2015-02-10 7 views
9

Potrzebuję pobrać zdarzenia sieciowe z Chrome. Znalazłem to: https://developer.chrome.com/devtools/docs/debugger-protocol https://developer.chrome.com/devtools/docs/protocol/1.1/network#command-enableKorzystanie z protokołu zdalnego debugowania Google Chrome

Wydaje się, że Chrome korzysta z portu, aby uzyskać wiadomości, odbierać i wysyłać zdarzenia, do zdalnego debugowania. Mówi, że używa JSON, więc postanowiłem spróbować.

Napisałem więc prosty kod java, który otwiera port, na którym nasłuchuje chrome (z założenia, że ​​uruchomiłem go za pomocą google-chrome --remote-debugging-port=9222 na moim komputerze ubuntu). Mam wątek, który zapisuje do stdout niczego pochodzących z tego portu, a następnie kod pisze o tym do OutputStream gniazda przy użyciu tej linii (próbka metody z protokołu):

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

Chciałbym spodziewać się odpowiedzi (zgodnie z protokołem) w strumieniu wejściowym, ale nic się nie dzieje.

Czy ktoś kiedykolwiek zrobił coś takiego? Nie mogę znaleźć niczego w sieci.

Odpowiedz

9

Nareszcie mam. Kredyt trafia do https://www.igvita.com/2012/04/09/driving-google-chrome-via-websocket-api/.

Najpierw wysyłam żądanie HTTP do http://localhost:9222/json. To zwraca listę JSON otwartych zakładek w Chrome, dla każdego ja również uzyskać URI websocket (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" 
} 
] 

Wtedy możemy użyć websocket wysyłać wiadomości do debugowania konkretną kartę, za pomocą tego identyfikatora URI. Też znalazłem to za używanie implementacji Jetty WebSocket: javax.websocket client simple example.

+2

Dzięki! Jesteś prawdziwym MVP – reformy