目标: 我想通过 BrowserMob-Proxy 运行一个 Selenium Python 脚本,它将捕获并输出一个 HAR 文件捕获。
问题: 我有一个功能性(非常基本的)Python 脚本(如下所示)。然而,当它被更改为使用 BrowserMob-Proxy 来捕获 HAR 时,它会失败。下面我提供了两个不同的脚本,它们都失败了,但是出于不同的原因(在代码片段之后提供了详细信息)。
BrowserMob-Proxy 说明: 如前所述,我同时使用 0.6.0 和 2.0-beta-8。这样做的原因是 A) LightBody(BMP 的首席设计师)最近表示他的最新版本(2.0-beta-9)没有功能,并建议用户改用 2.0-beta-8 和 B)尽我所能从阅读各种站点/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 AND 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/。运行上述代码时,FireFox 将尝试获取 google.com,但永远无法成功加载页面。最终它将超时而不会产生任何错误。而且 BETA_HAR.har 在我的硬盘上的任何地方都找不到。我还注意到,当尝试使用此浏览器访问任何其他站点时,它同样会无法加载(我怀疑这是由于代理配置不正确)。