获取网站的控制台日志并发送到 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的主要内容,如果未能解决你的问题,请参考以下文章