Skip to content

P5-DrissionPage监听websocket请求

欢迎大家来到DrissionPage自动化数据采集第六集,使用DrissionPage监听websocket请求。

之前做视频讲了如何监听http网络请求,然后就有兄弟问如何监听websocket,说实话我也没研究,但是有兄弟问了,我去找了下教程还比较少,于是自己结合网上教程实现了这样的效果。

接下来我们来看下效果:【演示】

如何实现这样的效果呢,这个视频我会带着大家一步一步实现出来。

首先我们要知道,drissionpage是基于cdp协议的,cdp协议就是谷歌浏览器官方支持的控制浏览器的协议。也就是说cdp协议支持的操作都可以实现。drissionpage也提供了执行cdp的方法。这里我们点进这个cdp协议大致看一下。https://drissionpage.cn/browser_control/page_operation#-run_cdp

在最开始,我们的dp是支持监听http的。但是为什么不支持webscoket呢?带着疑惑我们点进了他的监听器源码。

设置监听路径,然后开启网络监听,然后设置回掉函数,我们可以发现这里都是http的,没有websocket的,那也就是说我们加上说不定就可以了。

怎么加加什么呢?我尝试了下报错了,然后直接把这个文件全部发给gpt,复制粘贴运行,直接拿下。这里输出了接收到的数据包,没有输出发出的,有必要可以自己设置个回掉函数即可。

另外我们这里的paket其实没有用。因为没有yield出来数据。感兴趣需要自己实现。

python
def _set_callback(self):
    self._driver.set_callback('Network.requestWillBeSent', self._requestWillBeSent)
    self._driver.set_callback('Network.requestWillBeSentExtraInfo', self._requestWillBeSentExtraInfo)
    self._driver.set_callback('Network.responseReceived', self._response_received)
    self._driver.set_callback('Network.responseReceivedExtraInfo', self._responseReceivedExtraInfo)
    self._driver.set_callback('Network.loadingFinished', self._loading_finished)
    self._driver.set_callback('Network.loadingFailed', self._loading_failed)


    # WebSocket events callback
    self._driver.set_callback('Network.webSocketCreated', self._webSocketCreated)
    self._driver.set_callback('Network.webSocketFrameReceived', self._webSocketFrameReceived)
    self._driver.set_callback('Network.webSocketFrameError', self._webSocketFrameError)

def _webSocketCreated(self, **kwargs):
    """WebSocket创建事件回调"""
    print("WebSocket created:", kwargs)

def _webSocketFrameReceived(self, **kwargs):
    """WebSocket消息接收事件回调"""
    print("WebSocket frame received:", kwargs)
    # 可以在这里处理接收到的消息
    frame = kwargs.get('response', {})
    if frame.get('payloadData'):
        print("WebSocket Message Payload:", frame['payloadData'])

def _webSocketFrameError(self, **kwargs):
    """WebSocket错误事件回调"""
    print("WebSocket frame error:", kwargs)

本站收录内容源自互联网,不对其网站内容或交易负责。 | 如有内容侵犯权益,请联系站长删除相关内容!