我正试图用python(3.7.3(编写一个脚本,第一次使用Selenium自动登录网站。我用一些基本的例子进行了练习,并浏览了Selenium文档。到目前为止一切都很好。但当我在自己选择的网站上尝试时;事情出了问题。。。
我正在设法打开登录页面,但每当我试图获得与用户名字段对应的元素ID时,我都会得到"NoSuchElementException">,这表明我使用的ID名称应该是不正确的。我通过右键单击用户名框并使用inspect函数查看HTML代码来获得名称。当这不起作用时,我试图通过xpath找到它,但也没有成功。有人能指出为什么这个元素没有被识别吗?
Python代码
from selenium import webdriver
path = r"C:Userspathchromedriver.exe"
driver = webdriver.Chrome(path)
driver.get ("https://a website")
driver.find_element_by_id("login-username").send_keys(login)
driver.find_element_by_id("login-sign-in-button").click()
错误消息
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="login-username"]"}
用户名字段的HTML代码:
<input id="login-username" type="text" name="username" placeholder="Username" msd-placeholder="Username" class="margin-bottom form-control ng-pristine ng-empty ng-invalid ng-invalid-required ng-touched" ng-model="formData.username" dh-autofocus="" required="">
正在查找具有xpath的元素。为了避免出现错误,我将id周围的"括号改为"。
driver.find_element_by_xpath("//*[@id='login-username']").send_keys(login)
最后我尝试了长xpath
driver.find_element_by_xpath("/html/body/ui-view/ui-view/div/div[1]/div[1]/ui-view/div/div[1]/div/div[2]/form/div[1]/div/input").send_keys(login)
我真是碰壁了。这可能对我没有帮助。HTML实际上是不存在的。
编辑1增加了等待功能。代码现在工作
driver.get ("https://a website")
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "login-username")))
driver.find_element_by_id("login-username").send_keys(login)
回答以结束此问题。正如Alok所指出的,我们需要等待Web元素完全加载后才能尝试访问它
driver.get ("https://a website")
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "login-username")))
driver.find_element_by_id("login-username").send_keys(login)