Utilisation du protocole de débogage à distance Google Chrome

J'ai besoin d'obtenir les événements réseau de Chrome. J'ai trouvé cette: https://developer.chrome.com/devtools/docs/debugger-protocol https://developer.chrome.com/devtools/docs/protocol/1.1/network#command-enable

il semble que Chrome utilise un port pour recevoir des messages, répondre et envoyer des événements, pour le débogage à distance. Il dit qu'il utilise JSON, alors j'ai décidé de l'essayer.

alors, j'ai écrit un simple java code qui ouvre le port sur lequel chrome écoute (bien sûr je l'ai démarré en utilisant google-chrome --remote-debugging-port=9222 sur ma machine ubuntu). J'ai un thread qui écrit à stdout tout ce qui vient de ce port, et puis le code écrit ceci à l'outputstream de la socket en utilisant cette ligne (une méthode d'échantillon du protocole):

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

je m'attends à une réponse (selon le protocole) dans le flux d'entrée, mais rien ne se passe.

est-ce que quelqu'un a déjà fait quelque chose comme cela? Je ne trouve rien sur le net.

10
demandé sur reformy 2015-02-10 14:25:38

1 réponses

enfin je l'ai. Le crédit va à https://www.igvita.com/2012/04/09/driving-google-chrome-via-websocket-api / .

J'envoie D'abord une demande HTTP à http://localhost:9222/json . Ceci retourne une liste JSON d'onglets ouverts dans Chrome, pour chaque j'obtiens aussi un 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": "/q/using-google-chrome-remote-debugging-protocol-20780/",
"webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/C014A09F-BD0A-40BA-B23C-7B18B84942CD"
}
]

alors je peux utiliser WebSocket pour envoyer des messages pour déboguer un onglet spécifique, en utilisant ceci URI. J'ai aussi trouvé ceci pour utiliser L'implémentation de Jetty de WebSocket: javax.websocket client exemple simple .

12
répondu reformy 2017-05-23 10:30:55