【问题标题】:Browsermob proxy with selenium generates empty output使用 selenium 的 Browsermob 代理生成空输出
【发布时间】:2017-04-16 14:10:38
【问题描述】:

我正在使用 selenium 3.0.2 和 browsermob 代理 0.7.1 来捕获网络数据。我得到的只是一个空的 JSON。我的代码是:

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()

if browser is None:
    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.privatebrowsing.autostart", True)

browser = webdriver.Firefox(firefox_profile=profile, proxy=proxy.selenium_proxy())
proxy.new_har("google", options={'captureHeaders': True, 'captureContent': True})

browser.get("https://google.com/")

print(proxy.har)

我得到的只是这个空的 JSON

{'log': {'pages': [{'id': 'google', 'comment': '', 'pageTimings': {'comment': ''}, 'startedDateTime': '2016-12-01T14:23:24.984-05:00', “标题”:“谷歌”}],“条目”:[],“版本”:“1.2”,“创作者”: {'comment': '', 'name': 'BrowserMob 代理', 'version': '2.1.2'}, '评论':''}}

【问题讨论】:

  • 我也很想知道这个问题的答案!我认为 HAR 是空的,因为实际上并未使用代理。对于 http(而不是 https)站点,我可以通过使用:profile.set_proxy(proxy.selenium_proxy()) 代替传递代理对象来使代码工作,但不推荐使用 set_proxy 方法......对于 HTTPS,我认为这个问题是也相关:bugzilla.mozilla.org/show_bug.cgi?id=1103196
  • 页面在浏览器中加载成功了吗?由于您得到一个空的 HAR,这意味着代理已启动,但代理尚未看到任何请求。

标签: python selenium selenium-webdriver browsermob browsermob-proxy


【解决方案1】:

你有没有尝试过改变

这个:

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy") 

到这里:

server = Server("/Users/dev/Downloads/browsermob-proxy-2.1.2/bin/browsermob-proxy.bat")

您需要在 BrowserMob 服务器路径的末尾包含文件扩展名 (.bat) 才能正常工作:)

【讨论】:

    【解决方案2】:

    我怀疑这是由 this question 中的相同 GeckoDriver bug/missing feature 引起的:GeckoDriver 目前不支持 ChromeDriver 和旧 FirefoxDriver 支持的“代理”所需功能。

    在 GeckoDriver/Marionette 更新之前,您可以通过直接在 Firefox 配置文件上设置代理值来解决此问题。配置文件上的相关代理字段是:

    • network.proxy.http
    • network.proxy.http_port
    • network.proxy.ssl
    • network.proxy.ssl_port
    • network.proxy.type(设置为 1,“手动”)

    BrowserMob 代理有a test,它展示了如何在 Java 中执行此操作。应该很容易将其转换为 Python 等价物,因为您已经有一个 firefox_profile 对象。

    【讨论】:

      【解决方案3】:

      1.Browser mob 0.7.1 不支持 SSL 拦截 https 站点。
      2.根据您的问题,我观察到您提供了 https 网址,请尝试使用 browsermob 2.1.2 及更高版本
      3. 在您要拦截网络的设备上安装SSL证书(SSL证书在您下载的browsermob代理.zip文件中可用)。
      4. 如果问题没有解决,请通知我,我会深入研究导致问题的其他原因。

      【讨论】:

        【解决方案4】:

        我最近更改代码时预计会出现同样的问题。 尝试将代理添加到配置文件中,而不是 webdriver 本身。它已被弃用,但对我有用。

        profile.set_proxy(proxy.selenium_proxy())
        browser = webdriver.Firefox(firefox_profile=profile)
        

        【讨论】:

        • 这里如何初始化配置文件?
        【解决方案5】:

        试试这个 cmd 或许能解决你的问题:

        yum install -y google-chrome-stable

        【讨论】:

          猜你喜欢
          • 2018-04-23
          • 2015-07-24
          • 2017-09-01
          • 2015-07-09
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多