python - 如何在没有硒的情况下使用 python 读取 chrome 控制台?
问题描述
我想使用 Python3 阅读 chrome 的 js 控制台,而不需要任何 web 驱动程序,例如 selenium(机器人检测和东西)。
我已经尝试过 Chrome DevTools 协议 python 库,例如 chromewhip、pychrome 和 PyChromeDevTools,但我无法从控制台读取任何数据。
我想阅读 Runtime.consoleAPICalled 或 Log.entryAdded,但我不知道如何实现这些回调,因为这些库的文档没有指定任何内容。也没有找到任何例子。
有谁知道如何正确访问这些事件或提供它的其他库?
解决方案
我想阅读 Runtime.consoleAPICalled 或 Log.entryAdded,但我不知道如何实现这些回调
以下假设(根据您的问题措辞)您能够在对 Web 调试器端点开放的流上发送和接收调试协议消息。
在您发送调试协议消息Runtime.enable
和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
}
推荐阅读
- javascript - 如何获取 recaptcha 值以便可以在条件检查中使用
- python - 函数内的“for”循环
- reactjs - 提交的数据在没有刷新的情况下不呈现 - 反应
- jquery - 如何在工具提示中使用 HTML?
- git - ubuntu 服务器上的图形 Gitolite
- c# - 如何通过 Forge 存储桶下载 *around* Web 应用程序,而不是 *通过* Web 应用程序?
- ios - 如何解决此错误“尝试在 Xcode 中将 'com.example' 替换为您的签名 ID:打开 ios/Runner.xcworkspace”
- visual-studio-code - 在哪里可以找到 vscode 撤消堆栈文档
- c# - 我真的需要在这里创建一个新的交易吗?
- php - 从 JSON 数组 PHP 嵌套数组中获取价值