websocket - 如何使用 Puppeteer 向 WebSocket 发送数据

原文 标签 websocket puppeteer puppeteer-sharp

我使用 puppeteer-sharp 转储通过 websockets 按页面接收和发送的数据。 C#转储数据的代码:

async Task Dump()
{
   var client = await _browser.Page.Target.CreateCDPSessionAsync();
   await client.SendAsync("Network.enable");
   client.MessageReceived += OnChromeDevProtocolMessage;
}

void OnChromeDevProtocolMessage(object sender, MessageEventArgs eventArgs)
{
    if (eventArgs.MessageID == "Network.webSocketCreated")
    {
        Logger.Trace($"Network.webSocketCreated: {eventArgs.MessageData}");
    }
    else if (eventArgs.MessageID == "Network.webSocketFrameSent")
    {
        Logger.Trace($"Network.webSocketFrameSent: {eventArgs.MessageData}");
    }
    else if (eventArgs.MessageID == "Network.webSocketFrameReceived")
    {        
        var cdpMessage = JsonConvert.DeserializeObject<CdpMessage>(eventArgs.MessageData.ToString());
        ProcessMessage(cdpMessage);
    }
}

有没有办法使用 puppeteer 或直接使用 Chrome Dev Protocol 消息将数据发送到 websockets?

编辑:
或者是否有可能以某种方式获得 WebSocket 实例(或句柄)以在 JavaScript 代码中使用它来使用 EvaluateFunctionAsync 发送数据?

最佳答案

QueryObjects可以在命令行 API 和 Puppeteer 中使用以查找实例。之后,您只需使用 EvaluateFunction,在对象上执行发送方法。在 PuppeteerSharp 中,它看起来像这样:

//CODE SNIPPET
 var prototype = await page.EvaluateExpressionHandleAsync("WebSocket.prototype");
var socketInstances = await page.QueryObjectsAsync(prototype);
await page.EvaluateFunctionAsync("(instances) => {let instance = instances[0]; instance.send('Hello')}, new[] {socketInstances}");

更多信息可以在 documentation. 中找到

关于websocket - 如何使用 Puppeteer 向 WebSocket 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696265/

相关文章:

java - 使用 StompClient 在 Spring WebSocket 上传递消息时出错

javascript - 如何使 Node js 文件在 linux 中的某个时间在某个日期运行?

node.js - puppeteer@5.5.0 安装 : `node install.js` on M1

javascript - Puppeteer Sharp:加载内容时设置伪路径?

sockets - 如何检测字符串以UTF-8序列的中间结尾?

apache - 如何在运行Apache的端口443上运行socket.io?

websocket - 如何保持websocket连接直到任一端关闭?

javascript - 使用 puppeteer 通过 Headless Chrome 绕过 CAPTCHA

c# - Puppeteer-Sharp 库没有工作,也没有在 Web 服务(wcf)项目中创建页面

c# - 有没有办法向 PuppeteerSharp 网络驱动程序添加 chrome 扩展?