Невозможно найти элемент из-за тайм-аута в селене python - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь найти способ проверить, открыта ли новая страница / окно успешно и имеет контент или нет. Я знаю, что селен не может проверить код 200, чтобы увидеть, успешно ли загружена страница или нет. Так что я должен сделать, чтобы узнать, успешно ли загружена страница?

while True:
        try:
            driver.find_element_by_css_selector("#showbtn").click()
            print ("Page Loaded Successfully")
            break
        except:
            print ("Page loading failed")
            time.sleep(5)

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Чтобы проверить наличие элемента, вы можете использовать WebDriverWait с presence_of_element_located примерно так:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ...))
)

Это будет ждать до элемент либо найден, либо достигнуто время ожидания (в примере 10 секунд)

0 голосов
/ 01 февраля 2020

Чтобы нажать на кнопку, вызвать WebDriverWait() и element_to_be_clickable(), а затем нажать на кнопку.

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#showbtn"))).click()

ИЛИ, чтобы успешно проверить загрузку страницы, вы можете вызвать javascript executor перед взаимодействием с элементом.

WebDriverWait(driver, 20).until(lambda drv: drv.execute_script('return document.readyState == "complete"'))

Вам необходимо добавить следующие библиотеки.

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

Обновленный код:

while True:
        try:
            WebDriverWait(driver, 20).until(lambda drv: drv.execute_script('return document.readyState == "complete"'))
            print("Page Loaded Successfully")
            WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#showbtn"))).click()                     
            break
        except:
            print ("Page loading failed")
            driver.refresh()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...