You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用nodriver结合CDP获取网站操作触发的HTTP响应?

使用nodriver结合CDP捕获网站动态响应内容

直接上可运行的方案,步骤清晰,适合编程经验有限的开发者:

核心思路

通过CDP的Network.enable启用网络跟踪,监听Network.responseReceived事件捕获目标请求的requestId,再调用Network.getResponseBody获取完整响应内容。

完整代码示例

import asyncio
from nodriver import start

async def capture_target_response():
    # 启动浏览器并打开目标页面
    browser = await start()
    tab = await browser.get("替换为你要解析的网站URL")
    
    # 第一步:启用CDP网络跟踪
    await tab.send('Network.enable')
    
    # 用于存储捕获到的目标响应
    target_response = None

    # 第二步:定义响应接收回调,过滤目标请求
    def on_response_received(event):
        nonlocal target_response
        response_data = event['params']['response']
        # 这里替换为你要捕获的请求URL的特征,比如包含某API路径
        if "/api/your-target-endpoint" in response_data['url']:
            request_id = event['params']['requestId']
            # 异步获取响应体,避免阻塞事件循环
            asyncio.create_task(get_response_body(request_id))

    async def get_response_body(request_id):
        nonlocal target_response
        # 第三步:通过requestId获取响应体
        response_result = await tab.send(
            'Network.getResponseBody',
            {'requestId': request_id}
        )
        # 处理base64编码的响应(部分接口会返回base64格式)
        if response_result['base64Encoded']:
            import base64
            target_response = base64.b64decode(response_result['body']).decode('utf-8')
        else:
            target_response = response_result['body']
        
        # 打印或处理捕获到的响应
        print("捕获到目标响应内容:")
        print(target_response)

    # 注册事件监听器
    tab.add_listener('Network.responseReceived', on_response_received)

    # 第四步:触发网站操作(比如点击按钮、滚动,这里用sleep模拟等待请求触发)
    # 替换成实际的操作代码,例如:await tab.find_element("button#trigger-btn").click()
    await asyncio.sleep(5)

    # 关闭浏览器
    await browser.close()

# 运行异步函数
asyncio.run(capture_target_response())

关键细节说明

  • 必须先启用网络跟踪:Network.enable是所有网络事件监听的前提,一定要在页面加载或操作前调用。
  • 过滤目标请求:通过response_data['url']的特征筛选你需要的响应,避免捕获无关请求。
  • 处理base64编码:部分接口会返回base64格式的响应体,需要解码后才能读取明文内容。
  • 触发请求的时机:确保你的操作(点击、滚动等)是在启用网络跟踪之后执行的,否则会漏掉目标请求。

常见问题处理

  • 如果没捕获到响应:检查过滤条件是否正确,或者操作是否真的触发了目标请求,可以先打印所有response_data['url']排查。
  • 响应体乱码:确认解码的编码格式(比如utf-8)是否匹配网站的响应编码。

内容的提问来源于stack exchange,提问作者Aca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:03:16