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

如何用Python提取Chrome网络面板特定XHR的response数据

两种方案获取动态XHR响应数据

方案一:用Selenium自带的Chrome DevTools Protocol(CDP)

不用额外安装依赖,直接通过Chrome调试协议捕获网络请求,步骤如下:

  • 配置Chrome开启性能日志,用来记录所有网络请求
  • 编写函数倒序遍历日志,筛选出最新的query-list请求
  • 点击下一页后,调用函数提取响应内容

代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json

# 配置Chrome,开启性能日志
chrome_options = webdriver.ChromeOptions()
chrome_options.set_capability("goog:loggingPrefs", {"performance": "ALL"})

driver = webdriver.Chrome(options=chrome_options)
driver.get("你的目标网页地址")

def get_latest_query_list_response():
    # 倒序遍历性能日志,定位最新的query-list请求
    logs = driver.get_log("performance")
    for log in reversed(logs):
        log_data = json.loads(log["message"])["message"]
        # 只处理请求完成的日志,且URL包含query-list
        if log_data["method"] == "Network.responseReceived" and "query-list" in log_data["params"]["response"]["url"]:
            request_id = log_data["params"]["requestId"]
            # 通过CDP命令获取完整响应体
            response = driver.execute_cdp_cmd("Network.getResponseBody", {"requestId": request_id})
            return response["body"]
    return None

# 首次加载后获取数据
first_data = get_latest_query_list_response()
print(first_data)

# 点击下一页(替换成你页面的下一页按钮选择器,比如CSS或XPath)
next_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "替换成实际的下一页选择器"))
)
next_btn.click()

# 等待新请求完成(用显式等待比固定sleep更可靠)
WebDriverWait(driver, 10).until(lambda d: len(d.get_log("performance")) > len(logs))

# 获取最新的响应数据
latest_data = get_latest_query_list_response()
print(latest_data)

driver.quit()

方案二:用Selenium Wire

Selenium Wire是Selenium的扩展工具,专门用于拦截和处理网络请求,操作更简洁:

  1. 先安装依赖:pip install selenium-wire
  2. 用Selenium Wire驱动启动浏览器
  3. 点击下一页后,倒序遍历所有请求,提取最新的query-list响应

代码示例:

from seleniumwire import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("你的目标网页地址")

def get_latest_query_list_response():
    # 倒序查找最新的符合条件的请求
    for req in reversed(driver.requests):
        if "query-list" in req.url and req.response:
            # 解码响应体,编码格式根据实际情况调整
            return req.response.body.decode("utf-8")
    return None

# 首次加载后获取数据
first_data = get_latest_query_list_response()
print(first_data)

# 点击下一页
next_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "替换成实际的下一页选择器"))
)
next_btn.click()

# 等待新请求完成
WebDriverWait(driver, 10).until(lambda d: len(d.requests) > len(driver.requests))

# 获取最新响应数据
latest_data = get_latest_query_list_response()
print(latest_data)

driver.quit()

注意事项

  • 把代码中的你的目标网页地址和替换成实际的下一页选择器替换为项目真实值
  • 优先使用显式等待(WebDriverWait)替代固定sleep,避免因网络延迟导致获取不到数据
  • 如果响应是JSON格式,可通过json.loads()将字符串转为字典,方便提取具体字段

内容的提问来源于stack exchange,提问作者Sameerjeet Singh Chhabra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:05:06