【问题标题】:Chrome DevTools: Remote DOM modificationsChrome DevTools:远程 DOM 修改
【发布时间】:2012-02-07 01:59:40
【问题描述】:

我正在创建一个应该远程控制 浏览器窗口:导航、填写表格等。我正在尝试存档 使用 Chrome 远程调试和 C# 的目标。目前的原型 连接到浏览器,获取可用页面列表并建立 WebSocket 连接。

  1. 启动 chrome.exe --remote-debugging-port=9123
  2. 连接到 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);
       }
   }

能否请您帮助我了解命令语法和疑难解答 这个问题...

谢谢,

亚历克斯

【问题讨论】:

    标签: c# websocket google-chrome-devtools


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2020-03-31
      • 2020-01-11
      • 2021-12-26
      • 1970-01-01
      • 2016-08-14
      • 2012-06-13
      • 2018-11-28
      • 2018-10-18
      相关资源
      最近更新 更多