在 html 中检索当前 chrome 打开的页面而不保存
Retrieve current chrome open page in html without saving it
我正在实现一个主要基于 pyautogui 的 python 脚本。该脚本所做的其中一件事是打开一个 chrome 网页。之后,我需要访问当前打开的网页的 DOM。
由于我没有用selenium打开浏览器,所以我不能用它来分析DOM。
但是,我的问题是:这个当前打开的 chrome 页 available/saved 是否在硬盘驱动器的某处,以便我可以使用 selenium 访问它?像 .html 文件?
我在这里检查了许多其他问题,用户谈论 chrome 缓存,但那里没有 html 文件。
我只需要能够访问当前打开的页面而不是缓存中的所有历史数据。
直接使用 selenium 打开 Web 浏览器也不是一种选择,因为所分析的大多数网站都具有验证码和提取技术。
谢谢
如果您使用 --remote-debugging-port=PORT_NR
参数启动原始 chrome,然后从另一个浏览器访问 localhost:PORT_NR,您将可以访问浏览器的全部内容,包括开发控制台。
一旦你有了这个,你就有了多种选择:
您可以使用任何其他浏览器(甚至是同一浏览器)访问 http://localhost:PORT_NR,并且您应该可以完全访问原始 Chrome 的内容。使用 Selenium,您应该可以相对轻松地度过难关。
你也可以使用devtools api(文档..是..好吧...还有改进的余地。搜索chrome devtools protocol
惊奇缺少文档)。例如,您可以到达 http://localhost:PORT_NR/json to get the available debugging URIs. Grab the relevant websocket endpoint (webSocketDebuggerUrl). Open a websocket connection, and issue a command, like {"method": "DOM.getDocument", "id":12}
. You can find available DOM related commands here: https://chromedevtools.github.io/devtools-protocol/1-3/DOM
因为我不得不重新安装轮子,所以我可能会提供一些我在任何地方都找不到的额外信息:
- 在启用远程调试的情况下启动浏览器(参见以前的帖子)
- 连接到本地主机上的给定端口并使用这些 HTTP-GET-Requests 对您的浏览器进行非常有限的控制:
https://chromedevtools.github.io/devtools-protocol/#endpoints
最重要的:
- GET /json/new?{url}
- 获取/json/activate/{targetId}
- 获取/json/close/{targetId}
- GET /json 或 /json/list
要完全控制浏览器,您需要使用“websocket”连接。 GET /json 或 /json/list 中的每个对象都有自己的 ID。使用此 ID 与选项卡交互。顺便说一句:类型“页面”是普通标签,其他内容是扩展等等。知道要影响哪个选项卡后,获取它的“webSocketDebuggerUrl”。
使用这个 URL 并连接到可以使用 Websocket 协议的东西。
连接后,您必须按照以下结构制作有效的 Json:
{
"id":0,
"method":"Page.navigate",
"params":{url:http://google.com}}
}
备注:
ID 是一个变大的简单计数器 (int) - 而不是选项卡的 ID (!)
method就是docs中描述的方法params也在docs中。
return 值始终是 JSON。
以后可以使用官方文档了:
https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-navigate
不知道其他人是如何发现它的,但它花了几个小时才开始工作。可能是因为每个人都只是使用 python 的硒来做这件事。
我正在实现一个主要基于 pyautogui 的 python 脚本。该脚本所做的其中一件事是打开一个 chrome 网页。之后,我需要访问当前打开的网页的 DOM。 由于我没有用selenium打开浏览器,所以我不能用它来分析DOM。 但是,我的问题是:这个当前打开的 chrome 页 available/saved 是否在硬盘驱动器的某处,以便我可以使用 selenium 访问它?像 .html 文件? 我在这里检查了许多其他问题,用户谈论 chrome 缓存,但那里没有 html 文件。 我只需要能够访问当前打开的页面而不是缓存中的所有历史数据。 直接使用 selenium 打开 Web 浏览器也不是一种选择,因为所分析的大多数网站都具有验证码和提取技术。 谢谢
如果您使用 --remote-debugging-port=PORT_NR
参数启动原始 chrome,然后从另一个浏览器访问 localhost:PORT_NR,您将可以访问浏览器的全部内容,包括开发控制台。
一旦你有了这个,你就有了多种选择:
您可以使用任何其他浏览器(甚至是同一浏览器)访问 http://localhost:PORT_NR,并且您应该可以完全访问原始 Chrome 的内容。使用 Selenium,您应该可以相对轻松地度过难关。
你也可以使用devtools api(文档..是..好吧...还有改进的余地。搜索
chrome devtools protocol
惊奇缺少文档)。例如,您可以到达 http://localhost:PORT_NR/json to get the available debugging URIs. Grab the relevant websocket endpoint (webSocketDebuggerUrl). Open a websocket connection, and issue a command, like{"method": "DOM.getDocument", "id":12}
. You can find available DOM related commands here: https://chromedevtools.github.io/devtools-protocol/1-3/DOM
因为我不得不重新安装轮子,所以我可能会提供一些我在任何地方都找不到的额外信息:
- 在启用远程调试的情况下启动浏览器(参见以前的帖子)
- 连接到本地主机上的给定端口并使用这些 HTTP-GET-Requests 对您的浏览器进行非常有限的控制: https://chromedevtools.github.io/devtools-protocol/#endpoints
最重要的:
- GET /json/new?{url}
- 获取/json/activate/{targetId}
- 获取/json/close/{targetId}
- GET /json 或 /json/list
要完全控制浏览器,您需要使用“websocket”连接。 GET /json 或 /json/list 中的每个对象都有自己的 ID。使用此 ID 与选项卡交互。顺便说一句:类型“页面”是普通标签,其他内容是扩展等等。知道要影响哪个选项卡后,获取它的“webSocketDebuggerUrl”。
使用这个 URL 并连接到可以使用 Websocket 协议的东西。
连接后,您必须按照以下结构制作有效的 Json:
{
"id":0,
"method":"Page.navigate",
"params":{url:http://google.com}}
}
备注: ID 是一个变大的简单计数器 (int) - 而不是选项卡的 ID (!) method就是docs中描述的方法params也在docs中。
return 值始终是 JSON。
以后可以使用官方文档了: https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-navigate
不知道其他人是如何发现它的,但它花了几个小时才开始工作。可能是因为每个人都只是使用 python 的硒来做这件事。