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

如何通过JavaScript WebDriver获取Selenium日志以查看网络请求

解决Selenium JavaScript查看网络请求的问题

我来帮你搞定这个!你遇到的核心问题是不知道怎么引入logging和Capabilities,以及如何正确配置日志来捕获网络请求——其实它们都来自你已经在使用的selenium-webdriver模块,而且要捕获网络请求,得用performance日志(不是你看到的browser日志)。

步骤1:正确引入所需对象

首先,修改你的require语句,直接解构出logging和Capabilities:

const chromedriver = require('chromedriver');
const { Builder, By, until, logging, Capabilities } = require('selenium-webdriver');

步骤2:配置日志偏好与Chrome能力

接下来,创建日志偏好设置,启用performance日志的DEBUG级别,同时配置Chrome允许捕获网络日志:

// 创建日志偏好,设置performance日志级别为DEBUG
const logPrefs = new logging.Preferences();
logPrefs.setLevel(logging.Type.PERFORMANCE, logging.Level.DEBUG);

// 配置Chrome能力,绑定日志偏好并启用网络日志捕获
const chromeCaps = Capabilities.chrome();
chromeCaps.setLoggingPrefs(logPrefs);
chromeCaps.set('goog:chromeOptions', {
  perfLoggingPrefs: {
    enableNetwork: true, // 启用网络日志
    enablePage: false    // 不需要页面加载日志的话可以关闭
  }
});

步骤3:修改你的测试代码,整合配置并获取网络日志

把上面的配置传入Builder,然后在页面加载完成后获取并解析网络日志:

async function LibraryAppTest() {
  // 使用配置好的Chrome能力创建driver
  let driver = new Builder()
    .forBrowser('chrome')
    .withCapabilities(chromeCaps)
    .build();

  try {
    await driver.get('http://library-app.firebaseapp.com');
    // 等待页面元素加载,确保网络请求完成
    await driver.wait(until.elementLocated(By.css('input')), 5000);

    // 获取performance日志
    const perfLogs = await driver.manage().logs().get(logging.Type.PERFORMANCE);
    // 过滤出所有网络相关的日志条目
    const networkRequests = perfLogs.filter(entry => {
      const logMessage = JSON.parse(entry.message);
      return logMessage.message.method.startsWith('Network.');
    });

    // 打印捕获到的网络请求URL
    console.log('\n=== 捕获到的网络请求 ===');
    networkRequests.forEach(log => {
      const logDetails = JSON.parse(log.message);
      if (logDetails.message.method === 'Network.requestWillBeSent') {
        console.log(`请求URL: ${logDetails.message.params.request.url}`);
      }
    });

    // 保留你原来的按钮文本获取逻辑
    const buttonText = await driver.findElement(By.css('.btn-lg')).getText();
    console.log("\nButton Text: " + buttonText);
  } catch (e) {
    console.error('FAILURE: ' + e);
  } finally {
    await driver.quit();
  }
}

LibraryAppTest()
  .then(_ => console.log('\nSUCCESS!'), e => console.error('FAILURE: ' + e));

关键说明

  • logging.Type.PERFORMANCE:这是Selenium用来捕获浏览器性能(包括网络请求)的日志类型,而BROWSER日志只是浏览器的控制台输出,不是你要的网络请求。
  • goog:chromeOptions里的perfLoggingPrefs:必须开启enableNetwork才能让Chrome捕获网络请求日志,否则你拿不到相关数据。
  • 日志解析:performance日志的message字段是JSON字符串,需要解析后才能拿到请求的具体信息,比如URL、请求方法等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:09