无法使用带有 BrowserMob-Proxy 的 Python Selenium 脚本捕获 HAR

2024-01-03

Goal:我想通过 BrowserMob-Proxy 运行 Selenium Python 脚本,它将捕获并输出 HAR 文件捕获。

Problem:我有一个功能性(非常基本的)Python 脚本(如下所示)。然而,当更改为使用 BrowserMob-Proxy 捕获 HAR 时,它会失败。下面我提供了两个不同的脚本,它们都失败了,但原因不同(代码片段后提供了详细信息)。

BrowserMob-代理说明:如前所述,我同时使用 0.6.0 和 2.0-beta-8。这样做的原因是 A) LightBody(BMP 的首席设计师)最近表示他的最新版本 (2.0-beta-9) 无法正常工作,并建议用户使用 2.0-beta-8 而 B) 尽我所能通过阅读各种 site/stackoverflow 信息可以看出,0.6.0(通过 PIP 获取)用于调用 Client.py/Server.py,而 2.0-beta-8 用于启动服务器。老实说,这让我很困惑。然而,当导入 BMP 的服务器时,它需要一个批处理(.bat)文件来启动服务器,这在 0.6.0 中没有提供,但在 2.0-beta-8 中提供...如果有人可以阐明这方面的情况混乱(我怀疑这是我下面描述的问题的根源),那么我将不胜感激。

软件规格:

  • 操作系统:Windows 7 (64x)——在 VirtualBox 中运行
  • 浏览器:火狐浏览器(32.0.2)
  • 脚本语言:Python (2.7.8)
  • 自动 Web 浏览器:Selenium (2.43.0)——通过 PIP 安装
  • BrowserMob-Proxy:0.6.0 和 2.0-beta-8 -- 请参阅下面的说明

Selenium 脚本(此脚本有效):

"""This script utilizes Selenium to obtain the Google homepage"""
from selenium import webdriver

driver = webdriver.Firefox()       # Opens FireFox browser.
driver.get('https://google.com/')  # Gets google.com and loads page in browser.

driver.quit()                      # Closes Firefox browser

该脚本成功运行并且不会产生任何错误。提供它是为了说明目的,以表明它在添加 BMP 逻辑之前可以正常工作。

使用 BMP 编写 ALPHA 脚本(不起作用):

"""Using the same functional Selenium script, produce ALPHA_HAR.har output"""
from browsermobproxy import Server
server = Server('C:\Users\Matt\Desktop\\browsermob-proxy-2.0-beta-8\\bin\\browsermob-proxy')
server.start()
proxy = server.create_proxy()

from selenium import webdriver
driver = webdriver.Firefox()           # Opens FireFox browser.

proxy.new_har("ALPHA_HAR")             # Creates a new HAR
driver.get("https://www.google.com/")  # Gets google.com and loads page in browser.
proxy.har                              # Returns a HAR JSON blob

server.stop()

此代码将成功运行脚本并且不会产生任何错误。然而,当搜索整个硬盘时,我从未成功找到 ALPHA_HAR.har。

使用 BMP 编写 BETA 脚本(不起作用):

"""Using the same functional Selenium script, produce BETA_HAR.har output"""
from browsermobproxy import Server
server = Server("C:\Users\Matt\Desktop\\browsermob-proxy-2.0-beta-8\\bin\\browsermob-proxy")
server.start()    
proxy = server.create_proxy()

from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)

proxy.new_har("BETA_HAR")             # Creates a new HAR
driver.get("https://www.google.com/") # Gets google.com and loads page in browser.
proxy.har                             # Returns a HAR JSON blob

server.stop()

这段代码取自http://browsermob-proxy-py.readthedocs.org/en/latest/ http://browsermob-proxy-py.readthedocs.org/en/latest/。运行上述代码时,FireFox 将尝试获取 google.com,但永远不会成功加载该页面。最终它会超时,但不会产生任何错误。并且在我的硬盘上找不到 BETA_HAR.har。我还注意到,当尝试使用此浏览器访问任何其他站点时,它同样会无法加载(我怀疑这是由于代理配置不正确)。


尝试这个:

from browsermobproxy import Server
from selenium import webdriver
import json

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()
profile = webdriver.FirefoxProfile()
profile.set_proxy(self.proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)
proxy.new_har("http://stackoverflow.com", options={'captureHeaders': True})
driver.get("http://stackoverflow.com")    
result = json.dumps(proxy.har, ensure_ascii=False)
print result
proxy.stop()    
driver.quit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用带有 BrowserMob-Proxy 的 Python Selenium 脚本捕获 HAR 的相关文章

随机推荐