【发布时间】: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"]
【问题讨论】:
-
页面首次加载时该元素不存在;它使用 javascript 动态添加到页面中。您必须告诉 Selenium 在寻找元素之前等待片刻。见allselenium.info/wait-for-elements-python-selenium-webdriver