Chrome DevTools: удаленные модификации DOM - PullRequest
2 голосов
/ 10 января 2012

Я создаю небольшое приложение, которое должно удаленно управлять окном браузера: перемещаться, заполнять формы и т. Д. Я пытаюсь заархивировать цель с помощью Chrome Remote Debugging и C #.В настоящее время прототип подключается к браузеру, получает список доступных страниц и устанавливает соединение WebSocket.

  1. Запустите chrome.exe --remote-debugging-port = 9123
  2. Connectoна ws: // localhost: 9123 / devtools / page / 1 и отправить:

    request: { "id": 1, "method": "DOM.setOuterHTML", "params": {"nodeId": 1, "outerHTML": ""}}
    

Выглядит неправильно, но ошибки не возвращается.

Код:

       var client = new WebClient();
       var pages = client.DownloadString("http://localhost:9123/json");
       Console.WriteLine(pages); // works well, displays JSON with info about pages

       // create WebSocket
       var socket = new WebSockets.WebSocket("ws://localhost:9123/devtools/page/1");
       // it should print messages to console:
       socket.OnMessage += (sender, eventdata) => Console.WriteLine(eventdata);

       // works well - sends and recieves handshaking messages
       socket.Connect();

       Console.WriteLine("\nType \"exit\" to exit.\n");

       string data;
       while (true)
       {
           Thread.Sleep(500);
           Console.Write("> ");
           data = Console.ReadLine();
           if (data == "exit")
               break;
           // sends data:
           socket.Send(data);
       }

Как данные отправляются в поток WebSocket:

           byte[] dataBuffer = Encoding.UTF8.GetBytes(data);
           _wsStream.WriteByte(0x00);
           _wsStream.Write(dataBuffer, 0, dataBuffer.Length);
           _wsStream.WriteByte(0xff);

И чтение никогда не возвращается:

   private void Message() // started in different thread
   {
       while (_readyState == WsState.Open)
       {
           string data = Receive(); // does _wsStream.ReadByte(); and stops on it forever
           var handler = OnMessage;
           if (null != handler && data != null)
               handler(this, data);
       }
   }

Не могли бы вы помочь мне с синтаксисом командыи устранение неполадок вопроса ...

Спасибо,

Алекс

1 Ответ

0 голосов
/ 21 февраля 2017

Я советую вам использовать WebSocket4Net NuGet пакет.

using WebSocket4Net;

//Create new socket connection
WebSocket socket = new WebSocket(tab.webSocketDebuggerUrl);
socket.MessageReceived += MessageReceived;
socket.Open();
socket.Send("String to send");

private static void Ss_MessageReceived(object sender, WebSocket4Net.MessageReceivedEventArgs e)
{
    //Handle here response from server
}
...