如何使用 Puppeteer 将数据发送到 WebSocket
How to send data to WebSocket using Puppeteer
我使用 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.
中找到更多信息
我使用 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.
中找到更多信息