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.
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 .