【问题标题】:BrowserMob Proxy and Webdriverio minimal, empty HAR fileBrowserMob 代理和 Webdriverio 最小的空 HAR 文件
【发布时间】:2019-02-02 15:13:38
【问题描述】:

我想知道是否有人知道可能是什么问题或我可以采取其他步骤来解决以下问题。

我需要捕获网络流量,因此我可以编写一些硒测试来验证某些请求标头。

问题是当尝试使用 Webdriver.io + Browsermob 代理时,创建的 HAR 文件包含的信息非常少。

我尝试使用代理的 C# 绑定,这导致了与 Javascript 相同的问题。在 HAR 文件中返回数据的唯一绑定是 Java 绑定。不过有一个业务需求,我必须使用 Webdriver.io 来实现它。

我从堆栈溢出检查了许多其他问题和答案,但无济于事。大多数都没有得到回答,而那些还没有为我工作过。

我当前运行的代码与this 非常相似,不同之处在于我试图从中获取信息的 URL。

我的 Java 代码与 Javascript 和 C# 代码之间的区别在于,Java 代码以编程方式设置代理,而其他两个期望代理已经在运行并连接到它。

即使考虑到这一点,当我启动 C# 或 Javascript 测试时,代理也会注册新连接。 selenium 服务器也可以正常启动。测试完成后,根据各自的控制台,这两种清理都没有问题。

还有其他方法可以调试吗?甚至是捕获网络流量的替代方案(必须跨浏览器工作 - 已经有一个使用 chrome-remote-interface 适用于 chrome 的解决方案,但我们看到了使用 browsermob 代理进行跨浏览器网络捕获的建议)。

感谢您的宝贵时间

有些事情我忘了提,这很重要。下面是我用于 browsermob-proxy 的 npm 包

https://www.npmjs.com/package/browsermob-proxy

【问题讨论】:

    标签: selenium webdriver-io browsermob-proxy browsermob


    【解决方案1】:

    好的,我知道为什么我没有得到任何数据。我希望这可以节省其他人一些时间和麻烦。

    问题在于 browsermob 代理处理 localhost 的方式。相反,我将代理切换为使用我的 IPV4 地址,它开始捕获所有 HAR 数据。

    请看下面的代码:

    //BroswerMobProxy + webdriver.io
    //npm package used https://www.npmjs.com/package/browsermob-proxy
    
    
    var webdriverio = require('webdriverio');
    
    //proxy settings, host is IPV4 address
    var Proxy = require('browsermob-proxy').Proxy
    , fs = require('fs')
    , proxy = new Proxy({host: 'Put IPV4 Address Here', proxyPort: 8081 , selHost: 'Put IPV4 Address Here'});
    ;
    
    //convenience method that 
    proxy.cbHAR({captureHeaders: true, captureContent: true, captureBinaryContent: true }, doSeleniumStuff, function(err, data) {
    
      if (err) {
        console.error('ERR: ' + err);
      } else {
    
        /* Make sure har results are in the correct shape
        *  for any further processing
        */
        var harResultsString = JSON.stringify(data);
        var harResultsJson = JSON.parse(harResultsString);
    
        //Write HAR file
        fs.writeFileSync('DemoFile.json', harResultsJson, 'utf8');
    
        //Print to console
        console.log(harResultsJson);
      }
    });
    
    //webdriver.io options
    const opts = {
      desiredCapabilities:{
        browserName: 'chrome',
        proxy: {
          proxyType: 'MANUAL',
            httpProxy: String(proxy.host)+":"+String(proxy.proxyPort),
            sslProxy:  String(proxy.host)+":"+String(proxy.proxyPort),
            socksProxy:String(proxy.host)+":"+String(proxy.proxyPort),
            socksVersion: 4,
          autodetect: false
         },
         acceptSslCerts: true,
         acceptInsecureCerts: true
      },
      host: 'Put IPV4 Address here',
      port: 4444,
      protocol: 'http',
      coloredLogs: true,
      proxy: 'http://'+String(proxy.host)+":"+String(proxy.proxyPort),
    }
    
    function doSeleniumStuff(proxy, cb) {
      var browser = webdriverio.remote(opts);
      // console.log(browser.options);
      browser
        .init()
        .url('http://yahoo.com.au')
        .getTitle().then(function(title) {
          console.log('Title was: ' + title);
        })
        .end().then(cb).catch(e => console.log(e));
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 2019-10-09
      • 2016-10-09
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多