puppeteer获取网页中的websocket数据

截止目前,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)
})()

参考:
https://www.lfhacks.com/tech/puppeteer-websocket/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容