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

如何用Selenium、CDP、JavaScript获取HTTP响应体

解决ChromeDriver获取接口响应体的问题

你的代码存在几个关键问题:CDP事件监听方式错误、未启用Network监控、未正确调用getResponseBody接口,且缺少点击按钮的核心逻辑。以下是修正后的完整实现:

核心步骤说明

  • 必须先启用Chrome DevTools的Network域,才能捕获网络请求
  • 通过监听Network.responseReceived事件捕获响应完成的请求
  • 在事件回调中调用Network.getResponseBody获取实际响应体
  • 可通过请求URL、类型等过滤目标接口,避免输出无关请求

完整代码示例

const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

(async function getResponseBody() {
    let driver;
    try {
        // 初始化ChromeDriver
        driver = await new Builder()
            .forBrowser('chrome')
            .setChromeOptions(new chrome.Options())
            .build();

        // 建立CDP连接
        const cdpSession = await driver.createCDPConnection('page');

        // 启用Network域,开始监控网络请求
        await cdpSession.send('Network.enable');

        // 监听响应完成事件
        cdpSession.on('Network.responseReceived', async (params) => {
            const { response, requestId } = params;
            // 过滤目标请求,替换为你需要监控的接口特征
            if (response.url.includes('your-target-api-path')) {
                try {
                    // 获取响应体
                    const responseBody = await cdpSession.send('Network.getResponseBody', {
                        requestId: requestId
                    });
                    console.log('目标接口响应体:', responseBody);
                } catch (err) {
                    console.error('获取响应体失败:', err);
                }
            }
        });

        // 导航到目标页面
        await driver.get('http://your-target-url');

        // 执行点击按钮操作(替换为你的按钮定位方式,比如css/xpath)
        await driver.findElement({ css: 'button#target-button' }).click();

        // 等待足够时间确保请求完成,可根据实际接口响应时间调整
        await driver.sleep(3000);

    } catch (error) {
        console.error('执行出错:', error);
    } finally {
        if (driver) {
            await driver.quit();
        }
    }
})();

关键修正点

  1. CDP事件监听:使用cdpSession.on而非execute来监听Network.responseReceived事件
  2. 启用Network域:必须调用Network.enable才能触发网络事件捕获
  3. 获取响应体:通过cdpSession.send('Network.getResponseBody')异步获取,需传入事件返回的requestId
  4. 请求过滤:通过response.url筛选目标接口,避免输出所有请求的响应体
  5. 按钮点击逻辑:补充了点击按钮的代码,确保触发你需要监控的请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:48:52