c# - Chrome 开发者工具 : Remote DOM modifications

标签 c# websocket google-chrome-devtools

我正在创建一个应该远程控制的小应用程序 浏览器窗口:导航、填写表格等。我正在尝试存档 使用 Chrome 远程调试和 C# 的目标。目前原型(prototype) 连接到浏览器,获取可用页面列表并建立 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);
       }
   }

你能帮我解决命令语法和故障排除吗 问题...

谢谢,

亚历克斯

最佳答案

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

关于c# - Chrome 开发者工具 : Remote DOM modifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806975/

相关文章:

与 Chrome 14+ 和 Safari 兼容的 node.js WebSocket 服务器?

javascript - 无法在 Chrome 开发者工具中实时编辑 Javascript

google-chrome - chrome 开发工具设置中没有 "overrides"页面

javascript - Chrome 调试器 : What's a "PropertyBag" object?

c# - 通用应用程序中的 MMVM Light NavigationService 与 NavigationHelper

c# - 四元数转欧拉角算法 - 如何转换为 'Y = Up' 和惯用手之间?

c# - EF、ASP.NET Web API 和 JSON.NET - 返回限制层次结构

java - 玩WebSockets服务器推送示例

c# - 用于清除文本区域/文本框内容的按钮

javascript - 在客户端和nodejs服务器上使用静态javascript文件