2012-01-10 117 views
2

我正在创建一个小应用程序,该应用程序应远程控制 浏览器窗口:导航,填充表单等。我试图使用Chrome远程调试和C#将 目标归档。目前原型 连接到浏览器,获取可用页面的列表并建立WebSocket连接 。Chrome DevTools:远程DOM修改

  1. 开始的chrome.exe --remote调试端口= 9123
  2. Connecto到WS://本地主机:9123/devtools /页面/ 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); 
     } 
    } 

能否请你帮我命令语法和故障排除 的问题...

感谢,

亚历

回答

0

我建议你使用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 
}