截止目前,Puppeteer 没有提供原生的用于处理 WebSocket 的 API 接口。只能通过更底层的 Chrome DevTool Protocol (CDP) 协议获得。
Puppeteer 使用 CDPSession
对象处理 CDP 协议相关
实现如下
const puppeteer = require('puppeteer');
(async () => {
browser = await puppeteer.launch()
page = await browser.newPage()
const client = await page.target().createCDPSession()
await client.send('Network.enable')
client.on('Network.webSocketCreated',
function (params) {
console.log(`创建 WebSocket 连接:${params.url}`)
}
)
client.on('Network.webSocketClosed',
function (params) {
console.log(`WebSocket 连接关闭`)
}
)
client.on('Network.webSocketFrameSent',
function (params) {
console.log(`发送 WebSocket 消息:${params.response.payloadData}`)
}
)
client.on('Network.webSocketFrameReceived',
function (params) {
console.log(`收到 WebSocket 消息:${params.response.payloadData}`)
}
)
client.on('Network.webSocketWillSendHandshakeRequest',
function (params) {
console.log(`准备发送 WebSocket 握手消息`)
}
)
client.on('Network.webSocketHandshakeResponseReceived',
function (params) {
console.log(`接收到 WebSocket 握手消息`)
}
)
// 开始浏览
var url = "https://xxx:9900/index.html"
await page.goto(url)
})()