Как читать консоль 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 хотя бы фрагмент кода, который сработал для вас.

Другие вопросы по тегам