是否可以使用 selenium 和 python 捕获 websocket 流量?

wik*_*iki 5 selenium websocket python-3.x

我们在 python 上使用 selenium,作为自动化的一部分,我们需要捕获示例网站在网页完全加载后发送和接收的消息。

我在这里检查,据说我们想要做的事情是可以使用的,BrowserMobProxy但经过测试,websocket 连接在网站上不起作用,证书错误也很麻烦。

这里的另一篇文章中指出,这可以使用loggingPrefsof来完成,Chrome但似乎我们只获取网站加载时的日志,而不是之后的数据。

是否可以仅使用 selenium 捕获 websocket 流量?

wik*_*iki 15

事实证明,可以使用 ; 来完成pyppeteer。在以下代码中,正在捕获示例网站的所有实时 Websocket 流量:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(
        headless=True,
        args=['--no-sandbox'],
        autoClose=False
    )
    page = await browser.newPage()
    await page.goto('https://www.tradingview.com/symbols/BTCUSD/')
    cdp = await page.target.createCDPSession()
    await cdp.send('Network.enable')
    await cdp.send('Page.enable')

    def printResponse(response):
        print(response)

    cdp.on('Network.webSocketFrameReceived', printResponse)  # Calls printResponse when a websocket is received
    cdp.on('Network.webSocketFrameSent', printResponse)  # Calls printResponse when a websocket is sent
    await asyncio.sleep(100)


asyncio.get_event_loop().run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)