2015-02-10 257 views
9

我需要從Chrome獲取網絡事件。我發現這一點: https://developer.chrome.com/devtools/docs/debugger-protocol https://developer.chrome.com/devtools/docs/protocol/1.1/network#command-enable使用Google Chrome遠程調試協議

看來,Chrome使用一個端口來獲取消息,接聽和發送事件,用於遠程調試。它說它使用JSON,所以我決定嘗試它。因此,我寫了一些簡單的java代碼,它打開了chrome正在監聽的端口(當然,我通過在我的ubuntu機器上使用google-chrome --remote-debugging-port=9222啓動了它)。我有寫到標準輸出任何東西,從這個端口來一個線程,然後將代碼寫入此使用這條線的插座的OutputStream(從協議的樣品的方法):

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

我希望一些答案(根據協議)在輸入流中,但沒有任何反應。

有沒有人做過這樣的事情?我在網上找不到任何東西。

回答

9

終於我明白了。積分爲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

+2

謝謝你!你是真正的MVP – reformy 2016-11-04 08:01:13