Selenium Python3 - 无法按名称找到元素

如何解决Selenium Python3 - 无法按名称找到元素

HTML 元素的代码如下:

<input aria-label="Phone number,username,or email" aria-required="true" autocapitalize="none" autocorrect="off" maxlength="75" name="username" type="text" class="_2hvTZ pexuQ zyHYP" value="">

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="username"]

执行此代码时出现上述错误:

from selenium.webdriver import Firefox

class Efrit:

    #Initializing the bot
    def __init__(self,password):
        self.username = username    # it could also be e-mail or phone number
        self.password = password

#Credentials to log into Instagram:
    def log(self):
        driver = Firefox('/usr/local/bin')
        driver.get("https://www.instagram.com/")
        username_location = driver.find_element_by_name('username')
        password_location = driver.find_element_by_name('password')

bot = Efrit('test,'test')
bot.log()

解决方法

您可以使用显式等待:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get("https://www.instagram.com/")
wait = WebDriverWait(driver,20)
            wait.until(EC.visibility_of_element_located((SelectBy.CSS,"/input[name=username]")))
        username_location = driver.find_element_by_css_selector('input[name=username]')
        password_location = driver.find_element_by_css_selector('input[name=password]')

要等待登录按钮使用 element_to_be_clickable

wait.until(EC.element_to_be_clickable(
                (SelectBy.CSS_SELECTOR,".sqdOP.L3NKy.y3zKF")))
login = driver.find_element_by_css_selector(".sqdOP.L3NKy.y3zKF")
login.click()

您还可以设置全局隐式等待。 https://selenium-python.readthedocs.io/waits.html(有关说明,请参阅 P.5.2)。

,

正如 JaSON 在评论中所说,登录表单不在页面源中,需要时间来呈现。你必须使用 wait

显式等待

from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

    class Efrit:
        #Initializing the bot
        def __init__(self,username,password):
            self.username = username    # it could also be e-mail or phone number
            self.password = password
    
    #Credentials to log into Instagram:
        def log(self):
            driver = Firefox('/usr/local/bin')
            driver.get("https://www.instagram.com/")
            delay = 6 # seconds
            try:
                username_location = WebDriverWait(driver,delay).until(EC.presence_of_element_located((By.NAME,'username')))
                password_location = driver.find_element_by_name('password')
                print(username_location,password_location)
            except TimeoutException:
                print("Loading took too much time!")
            driver.quit()
    
    bot = Efrit('test','test')
    bot.log()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?