Как читать консоль Chrome, используя Python без селена?
Я хотел бы прочитать консоль js в Chrome, используя Python3 без какого-либо веб-драйвера, такого как selenium (обнаружение ботов и прочее).
Я пробовал библиотеки Python для Chrome DevTools Protocol, такие как chromewhip, pychrome и PyChromeDevTools, но я не могу прочитать какие-либо данные из консоли.
Я хочу прочитать Runtime.consoleAPICalled или Log.entryAdded, но я не знаю, как реализовать эти обратные вызовы, поскольку в документации для этих библиотек ничего такого не указано. Также нет примеров, которые можно найти.
Кто-нибудь знает, как правильно получить доступ к этим событиям или какой-либо другой библиотеке, которая обеспечивает это?
2 ответа
Я хочу прочитать Runtime.consoleAPICalled или Log.entryAdded, но не знаю, как реализовать эти обратные вызовы
Ниже предполагается (согласно формулировке вашего вопроса), что вы можете отправлять и получать сообщения протокола отладки в потоке, открытом для конечной точки веб-отладчика.
После отправки сообщений протокола отладки и
Log.enable
сообщения,
Runtime.consoleAPICalled
а также
Log.entryAdded
«События», которые вы ищете, представлены сообщениями, которые вы получаете по тому же каналу отладки.
Возможно, вам потребуется сопоставить сообщения о событиях консоли с контекстом выполнения (см.
Runtime.enable
ответ), изучив
executionContextId
в полученных сообщениях о событиях. События журнала не связаны ни с одним контекстом выполнения. Все эти "события" сообщения будут иметь
Id=0
поле, которое помогает распознать, что это «сообщения о событиях», а не ответные сообщения.
Вот несколько примеров сообщений, полученных от Chrome (в формате JSON с произвольным порядком полей):
Сообщение о событии API консоли:
{
"method": "Runtime.consoleAPICalled",
"params":
{
"type": "warning",
"args": [
{ "type": "string",
"value": "Google Maps JavaScript API warning: NoApiKeys https://developers.google.com/maps/documentation/javascript/error-messages#no-api-keys"
}],
"executionContextId": 1,
"timestamp": 1618949706735.553,
"stackTrace":
{
"callFrames": [
{
"functionName": "TA.j",
"scriptId": "206",
"url": "https://maps.googleapis.com/maps-api-v3/api/js/44/10/util.js",
"lineNumber": 228,
"columnNumber": 26
} ]
}
}
},
"id": 0
}
Сообщение о событии журнала:
{
"method":"Log.entryAdded",
"params":
{
"entry":
{
"source":"javascript",
"level":"warning",
"text":"The deviceorientation events are blocked by permissions policy. See https://github.com/w3c/webappsec-permissions-policy/blob/master/features.md#sensor-features",
"timestamp":1.6189509536801208e+12
}
},
"id": 0
}
KundaPanda, не могли бы вы KundaPanda хотя бы фрагмент кода, который сработал для вас.