首页 > 解决方案 > 获取网站的控制台日志并发送到 websocket

问题描述

我有以下情况:

我想获取网站的控制台日志并将其发送到 WebSocket 客户端。

我能够使用以下代码创建节点服务器并将数据发送给连接的用户。

const puppeteer = require('puppeteer');
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 2222 });

wss.on('connection', function connection(ws) {
  ws.send("sending the sample data");
});

我能够使用以下代码获取网站的控制台日志:

(async () => {
  const browser = await puppeteer.launch({
    args: [
      '--no-sandbox',
      '--headless',
      '--disable-gpu',
      '--window-size=1920x1080'
    ]
  });

  const page = await browser.newPage();

  await page.goto('https://example.com/test.php');

  page.on('console', msg => console.log(msg.text()));

})();

page.on是一个回调函数,每次有控制台日志时都会调用它。如何将该消息(来自 puppeteer 的 console.log)广播到 WebSocket 客户端?

请注意,网站仅在应用程序启动时打开一次,并且每秒使用 setInterval 生成 console.log 输出。因此,新用户只能获得最新数据。

标签: javascriptnode.jswebsocketpuppeteer

解决方案


而不是console.log(msg.text())您需要将消息广播给所有 ws 客户端,对吗?

所以一个简单的代码将是:

page.on('console', msg => {
  wss.clients.forEach(function each(client) {
    if (client.readyState === WebSocket.OPEN) {
      client.send(msg.text());
    }
  });
});

阅读此处了解更多信息


推荐阅读