我们在 Python 上使用 Selenium,作为自动化的一部分,我们需要捕获示例网站在网页完全加载后发送和接收的消息。
我在这里检查了一下,据说我们想做的事情可以使用BrowserMobProxy
来实现,但是经过测试,websocket连接在网站上不起作用,证书错误也很麻烦。
在另一篇文章中,有人说,这可以使用Chrome
loggingPrefs
来完成,但似乎我们只获取网站加载时间的日志,而不是之后的数据。
是否可以仅使用硒捕获网络套接字流量?
事实证明,可以使用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())