最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Selenium 4 (Node.js): How to Capture Network Requests? (getDevTools, createCDPConnection) - Stack Overflow

programmeradmin4浏览0评论

Selenium 4 (Node.js) - TypeError: driver.manage(...).getDevTools is not a function

I'm trying to capture network requests and responses in Selenium 4 using Node.js and Chrome. I'm encountering the error: TypeError: driver.manage(...).getDevTools is not a function.

My environment details:

  • Selenium WebDriver: 4.28.1
  • ChromeDriver: 133.0.0
  • Chrome: 133.0.6943.60

Here's my code:

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

async function captureNetworkRequests() {
    const capabilities = new Capabilities();
    capabilities.set('goog:chromeOptions', {
        'args': [
            // other chrome options if needed
        ]
    });

    const driver = await new Builder()
        .withCapabilities(capabilities)
        .forBrowser(Browser.CHROME)
        .build();

    const devTools = await driver.manage().getDevTools(); // Error occurs here

    await devTools.send('Network.enable', {});

    devTools.on('Network.requestWillBeSent', (event) => {
        const request = event.request;
        console.log('Request URL:', request.url);
    });

    devTools.on('Network.responseReceived', async (event) => {
        const response = event.response;
        const requestId = event.requestId;
        const url = response.url;
        const status = response.status;

        if (url.includes('ws_api.php?')) {
            console.log(`${status} ${url}`);
            try {
                const responseBody = await devTools.send('Network.getResponseBody', { requestId });
                console.error(responseBody.body);

                const assert = require('assert');
                assert.strictEqual(status, 200, `Expected status 200 for ${url}, but got ${status}`);

            } catch (error) {
                console.error("Error getting response body:", error);
            }
        }
    });

    try {
        await driver.get('[/](/)');
        await new Promise(resolve => setTimeout(resolve, 10000));

    } finally {
        await driver.quit();
        await devTools.close();
    }
}

captureNetworkRequests();

I'm trying to use Chrome DevTools (via driver.manage().getDevTools()) to capture network requests/responses in Selenium 4 with Node.js. However, I'm encountering errors, and createCDPConnection is also not working. I cannot use driver.executeScript due to CSRF vulnerabilities. A working example or help with DevTools/CDP configuration would be very helpful.

发布评论

评论列表(0)

  1. 暂无评论