python - 硒自动登录失败没有这样的元素:无法找到元素
问题描述
我们有网站(www.example.com),它将重定向到 auth.exmaple.com 进行身份验证。我试过以下代码。但由于无法正确定位用户名/密码,它不起作用。
from selenium import webdriver
from getpass import getpass
from time import sleep
username = input("Enter in your username: ")
password = getpass("Enter your password: ")
driver = webdriver.Chrome()
driver.get("https://www.example.com")
username_textbox = driver.find_element_by_name("username")
username_textbox.send_keys(username)
password_textbox = driver.find_element_by_name("password")
password_textbox.send_keys(password)
login_button = driver.find_element_by_name("submit")
login_button.submit()
**Error:**
username_textbox = driver.find_element_by_name("username")
File "/Users/sababathy_c/Library/Python/3.8/lib/python/site-packages/selenium/webdriver/remote/webdriver.py", line 496, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
File "/Users/sababathy_c/Library/Python/3.8/lib/python/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "/Users/sababathy_c/Library/Python/3.8/lib/python/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/sababathy_c/Library/Python/3.8/lib/python/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":"name","selector":"username"}
(Session info: chrome=93.0.4577.82)
(Driver info: chromedriver=2.41.578706 (5f725d1b4f0a4acbf5259df887244095596231db),platform=Mac OS X 10.16.0 x86_64)
User Name
<input type="text" name="username" class="auth0-lock-input" placeholder="username/email" autocomplete="off"
Password
<input type="password" name="password" class="auth0-lock-input" autocomplete="off" autocapitalize="off"
Submit
<button class="auth0-lock-submit" name="submit" type="submit" aria-label="Log In" style="background-color:
解决方案
如果没有涉及框架或 iframe,则可能是元素未正确呈现。请尝试显式等待:
代替
username_textbox = driver.find_element_by_name("username")
username_textbox.send_keys(username)
尝试这个 :
username_textbox = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "username")))
username_textbox.send_keys(username)
PS:如果我们有唯一的条目,请检查dev tools
(谷歌浏览器)。HTML DOM
检查步骤:
Press F12 in Chrome
-> 转到element
部分 -> 执行CTRL + F
-> 然后粘贴//*[@name='username']
xpath 并查看,如果您想要element
的是否使用匹配节点突出显示。1/1
推荐阅读
- python - 如何检查电子邮件是否有效并使用 python
- scripting - 从 Web 资源打开 CRM 实体
- reactjs - 尝试使用 React 在我的导航上的图标和文本之间切换
- java - 很难理解 Swing 图形......以及如何在运行时绘制
- java - 第二维为空的二维数组如何工作?
- android - react-native-maps 获取当前位置
- node.js - 电子
.getWebContents().on('login',..) 只调用一次 - c++ - 在 ArduinoJson 中,如何检查创建 JSON 文档时是否发生错误?
- node.js - 使用 nodejs 更新特定内容而不是刷新整个页面
- themes - Vaadin Flow 应用程序自动在明暗模式之间切换