Как пропустить веб-страницу после определенного периода времени Selenium - PullRequest
1 голос
/ 15 октября 2019

Я анализирую файл с кучей колледжей. Selenium googles "Admissions " + college_name затем нажимает первую ссылку и получает данные с каждой страницы. Проблема в том, что список названий колледжей, из которого я берусь, очень грубый (технически это список всех аккредитованных учреждений в Америке), поэтому некоторые ссылки не работают или застряли в цикле загрузки. Как мне установить какой-то таймер, который в основном говорит

    if page load time > x seconds:
        go to next element in list

1 Ответ

2 голосов
/ 15 октября 2019

Вы можете вызвать WebDriverWait на странице, и если страница перехватывает TimeoutException, вы узнаете, что загрузка заняла слишком много времени, поэтому вы можете перейти к следующему.

Учитываяне знаю, как будет выглядеть каждая страница HTML, это очень сложная проблема.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException


# list of college names
names = []

for name in names:
    # search for the college here

    # get list of search results
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='rc']")))
    search_results = driver.find_elements_by_xpath("//div[@class='rc']")

    # get first result
    search_result = search_results[0]

    # attempt to load the page
    try:
        search_result.click()
    except TimeoutException:
        # click operation should time out if next page does not load
        # pass to move on to next URL
        pass

Это очень грубый общий план. Как я уже упоминал, не зная, каким будет ожидаемый заголовок страницы или как будет выглядеть ожидаемое содержимое страницы, невероятно сложно написать универсальный метод, который успешно выполнит это. Этот код предназначен для вас как отправная точка.

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