【问题标题】:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="username"]selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:[name="username"]
【发布时间】:2021-03-26 22:28:21
【问题描述】:

我对 Python 和 Selenium 还是很陌生。我正在关注一个关于如何编写 Instagram 机器人来获得追随者和喜欢的教程。

程序会按原样打开一个 Firefox 窗口,但是当它必须填写用户名和密码字段时,它什么也不做。然后当我关闭窗口时,我发现自己遇到了这个错误。

我收到这个错误真的很奇怪,因为我查看了 https://www.instagram.com/accounts/login/ 上的元素,并且在用户名字段中有一个 name='username' 以及一个 name='password' 在密码字段中。

谁能帮帮我?

这是一段代码:

class InstagramBot:

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

    self.driver = webdriver.Firefox()

    self.login()

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

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

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

这是错误信息。

Traceback (most recent call last):
  File "C:/Users/Python Programming/PycharmProjects/insta_bot/bot.py", line 25, in <module>
    ig_bot = InstagramBot('temp_username', 'temp_password')
  File "C:/Users/Python Programming/PycharmProjects/insta_bot/bot.py", line 14, in __init__
    self.login()
  File "C:/Users/Python Programming/PycharmProjects/insta_bot/bot.py", line 19, in login
    self.driver.find_element_by_name('username').send_keys(self.username)
  File "C:\Users\Python Programming\PycharmProjects\insta_bot\venv\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:\Users\Python Programming\PycharmProjects\insta_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Users\Python Programming\PycharmProjects\insta_bot\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Python Programming\PycharmProjects\insta_bot\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="username"]

【问题讨论】:

标签: python selenium firefox


【解决方案1】:

您可能需要等待页面上的某些脚本完成,然后该元素才存在。

这里是您需要的导入语句:

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

使用此代码在您的 send_keys 行之前等待该元素:

WebDriverWait(self.driver,10).until(
         EC.presence_of_element_located((By.NAME, "username")))

【讨论】:

  • 另外,how to code an Instagram bot to gain followers and likes 听起来有道德问题。在外面小心点:)
  • 好点。关于wait 我认为应该更像是 10 你知道的连接问题...
  • @MosheSlavin 好点,从 5 -> 10 更新,假设这不是为了测试良好的性能,并且这段代码应该更专注于处理问题(而不是专注于发现问题的测试代码)
  • 感谢您的回复!有效!您只是忘了注意我还必须导入 from selenium.webdriver.common.by import By 否则它将不起作用
  • @MosheSlavin 这样不应该是 5 或 10。它应该来自设计文档,该文档应指定在 1) 新网站加载和 2) 网站子页面加载时所需元素可交互的最大时间限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多