Как узнать, находится ли страница в автономном режиме или не отвечает? - PullRequest
0 голосов
/ 27 августа 2018

Я написал простой код на Python, который просматривает несколько веб-страниц, хранящихся в кортеже.Цель состоит в том, чтобы регулярно просматривать эти страницы и проверять, находятся ли они в сети и отвечают.Пример кода:

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

browser = webdriver.Chrome()

links = ('https://stackoverflow.com/', 'https://stackexchange.com/')

while True:
    for url in links:
        try:
            browser.get(url)
            print('OK')
        except Exception as e:
            print('Not OK: {}'.format(e))

Но этот код печатает 'OK', даже когда я не в сети, поэтому я полагаю, что метод get () не обрабатывает никаких исключений, если фактическая страница не достигнута.

Я думал об использовании WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.ID, 'some_common_id'))), чтобы проверить, достигла ли я настоящую страницу, но мой кортеж может содержать разные адреса URL без общего идентификатора, класса или элемента ...

Затем я подумал опоменять местами и использовать WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.ID, 'main-frame-error'))) для поиска определенного элемента, который вы получаете в Google Chrome, когда находитесь в автономном режиме (на их странице «Игра в Динозавр»).Но в этом случае сценарию придется ждать 5 секунд каждый раз, когда страница из моего кортежа будет успешно достигнута, что излишне замедлит весь тест.

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

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Я провел исследование о том, можем ли мы проверить статус веб-сайта с помощью selenium-python, похоже, что это невозможно.

Ссылка здесь: https://stackoverflow.com/a/25162599/5863811

Итак, я видел людей, предлагающих использовать модуль python-запросы, чтобы получить код состояния с веб-сайта и посмотреть, есть ли он в сети или нет.Тем не менее, я вижу людей, которые говорят, что ответ модуля Selen и запросов может быть другим .

Вот ссылка на это: https://stackoverflow.com/a/19246280/5863811

Здесь также другоевопрос о том, дал ли сайт ошибку или нет, с селеном: https://stackoverflow.com/a/22753475/5863811

0 голосов
/ 27 августа 2018

Если ваш вариант использования должен знать, находится ли страница в автономном режиме или не отвечает, вам даже не нужно Селен , и вы можете просто использовать метод requests.head() из python-requests следующим образом:

Примечание : Согласно текущей реализации, Selenium при вызове метода get() на самом деле использует также python-запросы модуль.

0 голосов
/ 27 августа 2018

Selenium не предоставляет модуль для получения кода статуса http.Поэтому вам нужно использовать другой модуль, например, модуль request.Вот похожий вопрос.

Как получить код ответа HTTP с помощью Selenium WebDriver

...