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

如何用Python Selenium获取Chrome DevTools Network定期更新的search接口数据

实现方案

完全可以实现,你不需要从Performance面板提取数据,直接通过Selenium 4+ 内置的Chrome DevTools Protocol(CDP)监听网络请求事件即可,这是目前最直接的实现方式。

前置要求

  • 升级Selenium到4.0及以上版本,旧版本不支持原生CDP调用
  • 不需要额外安装其他依赖(如果用selenium-wire方案需要单独安装)

方案1:原生CDP实现(推荐)

核心逻辑是监听Chrome的Network域事件,匹配到目标search接口后直接拉取响应体,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json

chrome_options = Options()
driver = webdriver.Chrome(options=chrome_options)

# 启用Network域的事件上报
driver.execute_cdp_cmd("Network.enable", {})

# 定义请求监听回调
def capture_search_response(event):
    # 匹配目标search接口,这里根据你的实际接口特征修改匹配规则,比如路径包含/search、请求域名符合等
    if "search" in event["response"]["url"]:
        request_id = event["requestId"]
        # 获取响应体内容
        response_body = driver.execute_cdp_cmd("Network.getResponseBody", {"requestId": request_id})
        # 响应内容存在response_body['body']里,是字符串格式,json接口可以直接loads转字典
        try:
            data = json.loads(response_body["body"])
            # 这里写你处理数据的逻辑
            print("捕获到search接口数据:", data)
        except json.JSONDecodeError:
            # 非json格式响应直接打印原内容
            print("捕获到search接口非JSON响应:", response_body["body"])

# 绑定responseReceived事件触发回调
driver.add_cdp_listener("Network.responseReceived", capture_search_response)

# 后续正常运行你的Selenium逻辑即可,比如打开目标页面
driver.get("你的目标页面URL")

方案2:使用selenium-wire简化实现

如果不想写CDP相关代码,可以用封装好的selenium-wire库,它会自动代理所有浏览器请求,直接遍历请求列表即可匹配目标接口:

  1. 先安装依赖:pip install selenium-wire
  2. 示例代码:
from seleniumwire import webdriver
import time

driver = webdriver.Chrome()
driver.get("你的目标页面URL")

# 循环监听新请求
while True:
    # 遍历所有已捕获的请求
    for request in driver.requests:
        # 匹配目标search接口,且请求已完成有响应
        if "search" in request.url and request.response:
            # 拿响应内容
            data = request.response.body.decode("utf-8")
            print("捕获到search接口数据:", data)
            # 处理完后可以删掉已经处理过的请求,避免重复处理
            del driver.requests[driver.requests.index(request)]
    time.sleep(1)

注意事项

  • 如果需要获取search接口的请求参数(比如POST的请求体),可以在CDP方案中监听Network.requestWillBeSent事件,里面包含完整的请求头、请求体信息
  • 两种方案拿到的响应内容和Chrome DevTools Network面板里看到的完全一致,不需要额外处理加密、签名等逻辑
  • 若接口设置了CORS或者其他跨域限制,不会影响数据捕获,因为是直接从浏览器内核层面拿的已加载的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:27:03