我需要从Chrome获取网络事件。我发现了这一点:
https://developer.chrome.com/devtools/docs/debugger-protocol
https://developer.chrome.com/devtools/docs/protocol/1.1/network#command-enable

Chrome似乎使用端口来获取消息,应答和发送事件,以进行远程调试。它说它使用JSON,所以我决定尝试一下。

因此,我写了一些简单的Java代码来打开chrome正在监听的端口(当然,我是通过在ubuntu机器上使用google-chrome --remote-debugging-port=9222启动它的)。我有一个线程将来自此端口的任何内容写入stdout,然后代码使用此行(协议的示例方法)将其写入套接字的输出流:

out.println("{\"id\": 1,\"method\": \"Network.enable\"}");


我希望在输入流中有一些答案(根据协议),但是什么也没有发生。

有没有人做过这样的事情?我在网上找不到任何东西。

最佳答案

终于我明白了。功劳归于https://www.igvita.com/2012/04/09/driving-google-chrome-via-websocket-api/

首先,我将HTTP请求发送到http://localhost:9222/json。这将返回Chrome中打开的标签页的JSON列表,每个标签页我还获得一个WebSocket uri(webSocketDebuggerUrl):

[
{
"description": "",
"devtoolsFrontendUrl": "/devtools/devtools.html?ws=localhost:9222/devtools/page/C014A09F-BD0A-40BA-B23C-7B18B84942CD",
"faviconUrl": "http://cdn.sstatic.net/stackoverflow/img/favicon.ico?v=00a326f96f68",
"id": "C014A09F-BD0A-40BA-B23C-7B18B84942CD",
"title": "Using Google Chrome remote debugging protocol - Stack Overflow",
"type": "page",
"url": "https://stackoverflow.com/questions/28430479/using-google-chrome-remote-debugging-protocol",
"webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/C014A09F-BD0A-40BA-B23C-7B18B84942CD"
}
]


然后,我可以使用WebSocket使用此URI发送消息以调试特定的选项卡。对于使用WebSocket的Jetty实现,我也发现了这一点:javax.websocket client simple example

10-06 07:16
查看更多