Исключение тайм-аута Python Selenium

#python #beautifulsoup #data-extraction #try-except

Вопрос:

Я работаю над проектом очистки данных. Я использую приведенную ниже попытку и блок кода, кроме как для загрузки URL-адреса.

 try:
    driver.set_page_load_timeout(30)
    driver.get(url)
except TimeoutException:
    print("Page Loading Failed......")
    print("Trying by Refreshing...")
    for number_of_try in range(1,9):
        print("Number of try ",number_of_try)
        try:
            driver.refresh()
            break
        except TimeoutException:
            print("Fail")
            print("trying after 1 miunutes")
            time.sleep(60)
 

Проблема здесь в том, что код не будет блокироваться, кроме как при получении исключения TimeoutException. Я не понимаю, почему это происходит.

Вот моя ошибка исключения:

Исключение TimeoutException: тайм-аут: Истекло время приема сообщения от визуализатора: 30.000

Комментарии:

1. Вы хотите попробовать загрузить страницу 8 раз, и если это не удастся, возникнет исключение, верно?

2. @VictorErmakov Нет, я хочу загрузить страницу только один раз. Но если у меня есть исключение тайм-аута, я хочу перейти к другой части, а затем снова проверю загрузку страницы

Ответ №1:

Лучший способ сделать это — рекурсия.

 from selenium.common.exceptions import TimeoutException
import time

TRY_LIMIT = 10
SLEEP_TIMER = 60


def get_url(driver, url, try_number=1):
    if try_number > TRY_LIMIT:
        return None # or you can raise other exception
    try:
        driver.get(url)
    except TimeoutException:
        time.sleep(SLEEP_TIMER)
        get_url(driver, url, try_number 1)

 

и используйте его вот так

 get_url(driver,url)