Python: Selenium "нет такого элемента" XPath или ID - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь войти на Tessco.com. Я узнал, что этот сайт использует JavaScript, поэтому мне не удалось найти форму с помощью RoboBrowser.

Я сейчас использую Selenium.Я использовал два метода для ввода информации в поле.Во-первых, с использованием driver.find_element_by_xpath(), а также driver.find_element_by_id()

Обе попытки дают ошибку.Код выглядит следующим образом:

import time
from selenium import webdriver
chrome_path = r"C:\Users\James\Documents\Python Scripts\jupyterNoteBooks\ScrapingData\chromedriver_win32\chromedriver.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"]"}

Когда я вызываю элемент с использованием идентификатора как таковой:

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:\Users\James\Documents\Python Scripts\jupyterNoteBooks\ScrapingData\chromedriver_win32\chromedriver.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()

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Вполне вероятно, что элемент сначала не виден, и это вызывает сбой.Подождите, пока элемент станет видимым / активным, а затем используйте клавиши отправки.

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "userID"))).send_keys(userName)
0 голосов
/ 03 июля 2019

Полагаю, поиск элемента происходит до его загрузки. Мое предложение попыталось бы немного подождать, и это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...