这是经过检查的源代码
input aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" class="_2hvTZ pexuQ zyHYP" value=""
我试过这段代码运行
driver = webdriver.Chrome()
driver.get('https://www.instagram.com/')
driver.find_element_by_xpath("//input[@name=\"username\"]").send_keys(username)
driver.find_element_by_xpath("//input[@name=\"password\"]").send_keys(pw)
driver.find_element_by_xpath('//button[@type="submit"]').click()
但有这样的错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name="username"]"}
(Session info: chrome=83.0.4103.61)
我的 chromedriver 和 chrome 版本是匹配的,并按照说明查找元素。为什么我会收到此错误?
Instagram应用程序是通过构建的React元素。因此,当您启动搜索登录元素时调用 url 后,您将面临没有这样的元素异常
Solution
登录内Instagram使用您需要诱导的一组有效凭据WebDriver等待为了element_to_be_clickable()
你可以使用以下内容定位策略:
-
Using XPATH
:
driver.get("https://www.instagram.com/")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='username']"))).send_keys("username")
driver.find_element_by_xpath("//input[@name='password']").send_keys("password")
driver.find_element_by_xpath("//button/div[text()='Log In']").click()
-
Note:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
参考
您可以在以下位置找到一些相关讨论:
- 使用 selenium 和 webdriver (chrome) 在 Instagram 中填写登录表单 python OSX
- selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:尝试使用 selenium 单击“下一步”按钮时无法找到元素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)