Исключение Selenium NoSuchElement для конкретного сайта - PullRequest
0 голосов
/ 29 июня 2018

Я недавно пытаюсь изучить Selenium и нашел сайт, который просто игнорирует мои попытки найти определенный элемент по идентификатору, имени или xpath. Сайт здесь:

https://www.creditview.pl/PL/Creditview.htm

Я пытаюсь выбрать первое текстовое окно, помеченное Uzytkownik, код для него выглядит так:

Я пытаюсь найти его несколькими способами:

from selenium import webdriver
browser = webdriver.Chrome()

site = "https://www.creditview.pl/pl/creditview.htm"
browser.get(site)

login_txt = browser.find_element_by_xpath(r"/html//input[@id='ud_username']")
login_txt2 = browser.find_element_by_id("ud_username")
login_txt3 = browser.find_element_by_name("ud_username")

Что бы я ни пытался, я продолжаю получать: selenium.common.exceptions.NoSuchElementException: Сообщение: такого элемента нет: Невозможно найти элемент:

как будто элемента там вообще не было.

Я подозревал, что маленький фрейм, содержащий поле, может быть iframe, и попытался переключиться на различные элементы без удачи. Также попытался проверить, не скрыт ли элемент каким-либо образом в моем коде (скрытый элемент). Кажется, ничего не работает, или я делаю какую-то ошибку новичка, и ответ прямо передо мной. Наконец, я смог выбрать другой элемент на сайте и использовал несколько клавиш TAB для перемещения курсора в нужную позицию, но это похоже на читерство.

Может кто-нибудь подсказать, пожалуйста, как мне найти элемент? Я буквально не могу спать из-за этой проблемы:)

1 Ответ

0 голосов
/ 29 июня 2018

Учитывая, что ваш элемент там, вам все равно нужно дождаться, пока ваш элемент будет загружен / видим / кликабелен и т. Д. Вы можете сделать это, используя ожидаемые условия селена (EC) .

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By 

my_XPATH = r"/html//input[@id='ud_username']"
wait_time = 10  # Define maximum time to wait in seconds

driver = webdriver.Chrome()
site = "https://www.creditview.pl/pl/creditview.htm"
driver.get(site)

try:
    my_element = driver.WebDriverWait(driver, wait_time).until(EC.presence_of_element_located(By.XPATH,my_XPATH))
except:
    print ("element not found after %d seconds" % (wait_time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...