Javascript 使用BrowserMobProxy配置WebDrivero

Javascript 使用BrowserMobProxy配置WebDrivero,javascript,node.js,selenium,webdriver,browsermob,Javascript,Node.js,Selenium,Webdriver,Browsermob,是否有人提供了关于如何配置的适当示例?这样我就可以捕获网络流量。我以前使用过它,它本质上是的一个弃用版本。您可以使用下面的代码来实现这一点。确保您的browsermob代理和selenium服务器正在运行。然后在test.js文件中复制代码下方的粘贴,并将其放入webdriverioinstalled文件夹中。从cmd转到该文件夹并运行node test.jsstuff.har应该在test.js所在的位置生成 var Proxy = require('browsermob-proxy').Pr

是否有人提供了关于如何配置的适当示例?这样我就可以捕获网络流量。我以前使用过它,它本质上是的一个弃用版本。

您可以使用下面的代码来实现这一点。确保您的
browsermob代理
selenium服务器
正在运行。然后在
test.js
文件中复制代码下方的粘贴,并将其放入
webdriverio
installed文件夹中。从
cmd
转到该文件夹并运行
node test.js
stuff.har
应该在
test.js
所在的位置生成

var Proxy = require('browsermob-proxy').Proxy
    , webdriverio = require("./node_modules/webdriverio/")
    , fs = require('fs')
    , proxy = new Proxy()
;

proxy.cbHAR('search.yahoo.com', doSeleniumStuff, function(err, data) {

        if (err) {

            console.error('ERR: ' + err);
        } else {

            fs.writeFileSync('stuff.har', data, 'utf8');


        }
});

function doSeleniumStuff(proxy, cb) {

    var browser = webdriverio.remote({
        host: 'localhost'
        , port: 4444
        , desiredCapabilities: { browserName: 'firefox', seleniumProtocol: 'WebDriver', proxy: { httpProxy: proxy } }
    });

    browser
        .init()
        .url("http://search.yahoo.com")
        .setValue("#yschsp", "javascript")
        .submitForm("#sf")
        .end().then(cb);        

}

如果您只想捕获网络流量,那么还有一种方法可以做到这一点

Webdriverio允许您使用

请阅读

这是一个关于如何使用chrome开发工具和webdriverio的例子,如果您需要更多帮助,请告诉我

const { remote } = require('webdriverio')

    let browser;

    (async () => {
        browser = await remote({
            automationProtocol: 'devtools',
            capabilities: {
                browserName: 'chrome'
            }
        })

        await browser.url('https://webdriver.io')

        await browser.call(async () => {
            const puppeteerBrowser = browser.getPuppeteer()
            const page = (await puppeteerBrowser.pages())[0]
            await page.setRequestInterception(true)
            page.on('request', interceptedRequest => {
                if (interceptedRequest.url().endsWith('webdriverio.png')) {
                    return interceptedRequest.continue({
                        url: 'https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png'
                    })
                }

                interceptedRequest.continue()
            })
        })

        // continue with WebDriver commands
        await browser.refresh()
        await browser.pause(2000)

        await browser.deleteSession()
    })().catch(async (e) => {
        console.error(e)
        await browser.deleteSession()
    })

因为我没有幸使用
browsermob代理解决这个问题(AFAIK,很快没有更新)

我创建了一个小的npm模块,将selenium测试捕获为HAR文件-

我采纳了@Raulster24的建议,并使用Chrome开发工具协议实现了它-