获取网站的控制台日志并发送到 websocket

Posted

技术标签:

【中文标题】获取网站的控制台日志并发送到 websocket【英文标题】:Get the console log of website and send to websocket 【发布时间】:2020-05-31 21:02:12 【问题描述】:

我有以下情况:

我想获取网站的控制台日志并将其发送到 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 输出。因此,新用户只能获得最新数据。

【问题讨论】:

基本上你需要打开一个到服务器的连接。但是,如果 websocket 服务器是您用来打开 puppeteer 的同一个节点实例,那么您根本不需要使用 websocket....无论如何,要向 ws 客户端发送消息,您只需要 ws.send('something'); 不,它不是同一台服务器,我正在向所有客户端广播 检查我的答案 【参考方案1】:

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

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

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

Read here 了解更多信息

【讨论】:

嗨,它在 localhost 中工作,但在我的云服务器中不工作! “不工作”信息不足以帮助您。如果您的云服务器有特定问题,您可以提出新问题或提供更多信息。如果我的回答解决了您的问题,请接受它作为正确答案。

以上是关于获取网站的控制台日志并发送到 websocket的主要内容,如果未能解决你的问题,请参考以下文章

使用 CString 转换 int 并发送到控制台

在后端获取 blob 并发送到前端

如何从设置中获取数据并发送到此片段

获取Dataproc日志到Stackdriver日志

通过 express 从 mongo 获取数据,构建对象并发送到 React

从 ListView 项目中获取数据并发送到另一个活动 (Android)