У меня есть следующий код:
from requests_html import HTMLSession
ses = HTMLSession()
r = ses.get(MYURL) # start a headless chrome browser and load MYURL
r.render(keep_page=True) # This will now 'render' the html page
# which means like in a real browser trigger
# all requests for dependent links.
# like .css, .js, .jpg, .gif
Вызов render()
запускает загрузку запросов для Javascript, растровых изображений и т.д. c. Есть ли способ получить отслеживание кодов состояния для каждого запроса. Меня в основном интересуют ошибки 404
, но также могут быть интересны ошибки 403
и 5xx
.
Например, один вариант использования:
• Go to страница или последовательность страниц
• Затем сообщите, сколько запросов не удалось выполнить и какие URL-адреса были получены.
Если это невозможно с запросами - html но достаточно просто с селеном, я могу переключиться на селен
Дополнение: уродливая работа вокруг 1:
Я могу настроить ведение журнала для входа в файл и установить уровень журнала для отладки. Затем я могу попытаться проанализировать журналы websockets.protocol: который содержит такие строки, как {\\"url\\":\\"https://my.server/example.gif\\",\\"status\\":404,\\"statusText\\":\\"...
Проблемы:
Активация DEBUG уровня журнала в файл, похоже, активирует что-то еще, потому что внезапно множество информация об отладке также записывается в stdout
.
Например:
[I:pyppeteer.launcher] Browser listening on: ws://127.0.0.1:45945/devtools/browser/bc5ce097-e67d-455e-8a59-9a4c213263c1
[D:pyppeteer.connection.Connection] SEND: {"id": 1, "method": "Target.setDiscoverTargets", "params": {"discover": true}}
Также не очень весело анализировать это в реальном времени и соотносить его с URL-адресом, который я использовал в моем code.
Дополнение: уродливая работа вокруг 2:
Еще хуже для корреляции, но лучше для синтаксического анализа и простого определения 404
s и работает, только если под контролем http-сервер.
Анализ журналов http-сервера журналов с помощью nginx Я даже могу настроить собственный регистратор в формате csv только с интересующими меня данными.
Приложение: уродливая работа вокруг 3:
Используя python ведение журнала (специальный обработчик и фильтр для pyppeteer
), я могу перехватить строку json, описывающую ответы от pyppeteer.connection.CDPSession
регистратора без имея stderr
загрязняются.
Фильтр позволяет мне получать данные в реальном времени.
Это все еще довольно хакерский sh. Итак, ищем лучшее решение.