Python:Selenium "no such element" XPath or ID



我正在尝试登录tessco.com我了解到此网站使用JavaScript,这就是为什么我无法使用RobObrowser找到表单。

我现在正在使用硒。我使用两种方法将信息输入到一个字段中。一个,使用driver.find_element_by_xpath()以及driver.find_element_by_id()

两种尝试都会产生错误。代码如下:

import time
from selenium import webdriver
chrome_path = r"C:UsersJamesDocumentsPython ScriptsjupyterNoteBooksScrapingDatachromedriver_win32chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://www.tessco.com/login")
userName = "FirstName.SurName321123@gmail.com"
password = "PasswordForThis123"
elem = driver.find_element_by_xpath("""//*[@id="userID"]""")
elem = send_keys(userName)
elem = driver.find_element_by_xpath("""//*[@id="password"]""")
elem = send_keys(password)
driver.close()

错误是:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="userID"]"}

当我使用ID调用元素时:

elem = driver.find_element_by_id("userID")
elem = send_keys(userName)
elem = driver.find_element_by_id("password")
elem = send_keys(password)

我得到:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="userID"]"}

我的印象是我检查了元素并使用了适当的名称。

有什么提示或想法我做什么?






在评论部分中提供的解决方案。代码修改为:

import time
from selenium import webdriver
#Webdriver wait functions being introduced to add a delay.
#I was running into problems, with the ID not being found
#add wait for the element to be clickable before trying send keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_path = r"C:UsersJamesDocumentsPython ScriptsjupyterNoteBooksScrapingDatachromedriver_win32chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://www.tessco.com/login")
userName = "FirstName.SurName321123@gmail.com"
password = "PasswordForThis123"
wait = WebDriverWait(driver, 10)
elem = wait.until(EC.element_to_be_clickable((By.ID, "userID"))) 
elem.send_keys(userName)
elem = wait.until(EC.element_to_be_clickable((By.ID, "password"))) 
elem.send_keys(password)
driver.close()

最初可能看不到该元素,这会导致故障。等待直到可见元素/可单击,然后使用发送键。

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "userID"))).send_keys(userName)

我想元素搜索在加载之前发生。我的建议会尝试等待一些。

最新更新