如何通过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
相关产品推荐
相关产品推荐

