当前位置: 首页 > 知识库问答 >
问题:

为什么即使元素存在,selenium也会抛出“未找到元素”错误?[副本]

淳于煌
2023-03-14

这是我写的,这是一个简单的程序,可以登录我的instagram帐户,凭证已更改:

from selenium import webdriver
import time
import os

class InstaBot:

    def __init__(self, username=None, password=None):

        self.username = username
        self.password = password

        self.driver = webdriver.Chrome('./chromedriver.exe')

        self.login()

    def login(self):

        self.driver.get(r'https://www.instagram.com/accounts/login/')

        # login_btn = self.driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[3]') # login button xpath changes after text is entered, find first

        self.driver.find_element_by_name('username').send_keys(self.username)
        self.driver.find_element_by_name('password').send_keys(self.password)

        # login_btn.click()

if __name__ == '__main__':

    ig_bot = InstaBot(username='temp', password='tempp')

我不知道它为什么会出错。请帮忙。

Traceback (most recent call last):
  File "instabot.py", line 30, in <module>
    ig_bot = InstaBot(username='temp', password='tempp')
  File "instabot.py", line 15, in __init__
    self.login()
  File "instabot.py", line 23, in login
    self.driver.find_element_by_name('username').send_keys(self.username)
  File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 496, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="username"]"}
  (Session info: chrome=86.0.4240.183)

Chrome确实打开了登录页面,但找不到元素。

附言:你可以猜到我是新来的

编辑:

我想,当我使用time.sleep几秒钟,它正常工作......但我不认为这是修复它的最佳方式,所以请注意,并建议我一些东西,或者这是它实际上是如何工作的......

共有1个答案

陆翰藻
2023-03-14

我找到了答案,是的!!

我应该在搜索元素之前等待页面加载,它们有两种类型:

1显式等待

2隐式等待

这些事实记录在这里:https://selenium-python.readthedocs.io/waits.html

在搜索元素之前,应添加以下内容:

WebDriverWait(self.driver, 2).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Sign up")))

为此,需要在顶部设置一些导入行,即

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

Edit1:我前面用的是隐式的,现在用的是显式的

 类似资料:
  • 我的代码: 我有一个问题即使它存在,也找不到该元素。我用汤仔细检查了元素是否确实存在,并且它按照输出进行操作。 输出: 我有一个遍历每个应用程序域的循环(包含来自每个的数据)但是,它在大多数情况下都会找到并单击元素,但对于某些元素却没有,我不知道为什么。 这是站点html。有许多,每个都包含不同的,我需要单击它

  • 请参考截图。我正试图单击“取消”按钮,如我的截图所示。即使元素的ID存在,我也无法单击按钮。弹出窗口既不是一个新窗口,也不像是一个警告我。我试图搜索是否是窗口句柄的问题。但是当我搜索窗口句柄时,它只给我一个数字: 收到错误消息- 线程“main”org.openqa.selenium.nosuchelementexception:没有这样的元素:找不到元素:{“method”:“id”,“sele

  • 我使用selenium IDE 1.9.0记录测试。请告诉我什么地方没有错,以及如何解决问题。 以下是我记录测试的步骤。1.我使用用户名和密码登录网站。2.我导航到搜索成员页面,输入成员的姓名,单击名称链接。系统将引导我进入成员配置文件页面。 脚本停在这一行: 我第一次玩脚本时,它运行没有任何错误。在运行该脚本8小时后,它提示我以下错误: 我使用调试函数来查看出了什么问题。以下是调试窗格中显示的消

  • 嘿,伙计们,我正在为Mozilla Firefox运行一个使用SELENIUM-IDE进行Web自动化的脚本。在脚本中,我正在搜索网页上的“下一步”按钮,并想知道它是否可用。如果是这样,单击它并转到下一页,如果不是重新启动脚本的话。当在没有下一个按钮的页面上运行时,我会收到一个错误和一个 "测试用例失败" 我使用的命令: 在日志结果中,我得到: 有什么想法吗伙计们?

  • 问题内容: 我正在使用Selenium将Web测试添加到我的项目中。我已经有很多使用以下方法检查特定元素的测试: 这很好。现在,我还有另一个要求。这是在我生成的页面中: 如何掌握错误消息?我想要一些允许我在dateElement之后请求带有“错误”类的span元素的东西。 (此错误消息是由Spring MVC合并的,因此直接更改它并不容易。我想可能是这样,但我不希望这样做)。 任何其他想法都欢迎。

  • 这是我用来使用铬Web驱动程序和python查找元素的代码行 这是每次尝试运行代码时抛出的错误 这些是标题栏上的按钮,我试图让我的代码单击html按钮 这是努力按钮的html代码,我试图使用selenium来定位它,以便它可以点击这里,但它总是说没有找到这样的元素 我甚至创建了一个单独的函数来一次又一次地找到元素并在每次成功尝试后Hibernate5秒,直到它点击了元素,但仍然没有运气它永远运行而