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

Selenium如何获取浏览器网络请求中名为history的XHR文件

问题原因说明

你之前执行JS返回的history是浏览器原生window.history对象,用于控制页面前进后退、历史状态管理,和你在网络面板看到的名为history的XHR请求没有任何关联,自然拿不到对应文件内容。

解决方案

方案1:Selenium 4+ 内置DevTools API(优先推荐)

Selenium 4及以上版本内置了Chrome DevTools协议支持,可以直接监听网络请求、捕获响应内容,Java适配代码如下:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v120.network.Network;
import org.openqa.selenium.devtools.v120.network.model.Response;
import java.util.Optional;

// 初始化DevTools
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
// 启用网络监控
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

// 添加响应监听器
devTools.addListener(Network.responseReceived(), responseReceived -> {
    Response response = responseReceived.getResponse();
    // 可根据实际请求的URL关键字、资源类型调整筛选规则
    if (response.getUrl().contains("history") && response.getMimeType().contains("json")) {
        // 获取响应体
        String responseBody = devTools.send(Network.getResponseBody(responseReceived.getRequestId())).getBody();
        System.out.println("history请求的响应内容:" + responseBody);
        // 此处可直接将responseBody写入本地文件,得到你需要的资源
    }
});

// 监听器配置完成后,再执行刷新页面、触发请求的操作
driver.navigate().refresh();

注意事项:

  • 代码中的v120是DevTools协议版本,需和你使用的Chrome版本对应,替换为匹配的版本号即可
  • 必须在触发history请求的操作(刷新、点击对应功能按钮)之前启动监听器,否则无法捕获到已完成的请求

方案2:低版本Selenium兼容方案:代理捕获请求

如果你的Selenium版本低于4,无法使用DevTools,可以通过代理工具捕获请求:

  • 启动BrowserMob Proxy代理服务
  • 配置ChromeDriver启动参数,将浏览器代理指向刚启动的本地代理服务
  • 在代理中添加请求拦截规则,筛选出URL匹配的history请求,直接读取响应内容

方案3:非Selenium方案:直接模拟HTTP请求

XHR本质是标准HTTP请求,你可以直接模拟发送请求获取资源:

  1. 在浏览器网络面板右键该history请求,选择「复制为cURL」
  2. 将cURL转换为Java的OkHttp/HttpClient请求代码
  3. 从Selenium的driver.manage().getCookies()导出当前登录态的Cookies,带入请求头保证权限正常,不需要走浏览器也能拿到响应内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:24:01