<p><strong>目标:</strong>
我想通过BrowserMob代理运行一个Selenium Python脚本,它将捕获并输出一个HAR文件捕获。</p>
<p><strong>问题:</strong>
我有一个功能(非常基本)的Python脚本(如下所示)。但是,当更改为使用BrowserMob代理来捕获HAR时,它失败了。下面我提供了两个不同的脚本,它们都失败了,但原因不同(在代码片段后面提供了详细信息)。</p>
<p><strong>BrowserMob代理说明:</strong>
如前所述,我同时使用0.6.0和2.0-beta-8。原因是A)LightBody(BMP的首席设计师)最近表示,他最新的版本(2.0-beta-9)不起作用,建议用户改用2.0-beta-8;B)从我阅读各种站点/堆栈溢出信息中可以看出,0.6.0(通过PIP获得)用于调用Client.py/Server.py,而2.0-beta-8用于启动服务器。老实说,这让我很困惑。然而,当导入BMP的服务器时,它需要一个批处理(.bat)文件来启动服务器,这不是0.6.0中提供的,而是2.0-beta-8中提供的……如果有人能对这个混乱的区域有所了解(我怀疑这是下面描述的问题的根源),那么我将非常感激。</p>
<p><strong>软件规格:</strong></p>
<ul>
<li>操作系统:Windows 7(64x)--在VirtualBox中运行</li>
<li>浏览器:FireFox(32.0.2)</li>
<li>脚本语言:Python(2.7.8)</li>
<li>自动Web浏览器:Selenium(2.43.0)--通过PIP安装</li>
<li>BrowserMob代理:0.6.0和2.0-beta-8——请参阅下面的解释</li>
</ul>
<p><strong>Selenium脚本(该脚本有效):</strong></p>
<pre><code>"""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
</code></pre>
<p>此脚本成功运行,不会产生任何错误。为了说明的目的,在添加BMP逻辑之前提供它以指示其工作。</p>
<p><strong>使用BMP编写ALPHA脚本(不起作用):</strong></p>
<pre><code>"""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()
</code></pre>
<p>此代码将成功运行脚本,并且不会产生任何错误。但是,在搜索整个硬盘时,我从未成功找到ALPHA_HAR.HAR。</p>
<p><strong>使用BMP编写BETA脚本(不起作用):</strong></p>
<pre><code>"""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()
</code></pre>
<p>此代码取自<a href="http://browsermob-proxy-py.readthedocs.org/en/latest/" rel="nofollow">http://browsermob-proxy-py.readthedocs.org/en/latest/</a>。当运行上述代码时,FireFox将尝试获取google.com,但永远无法成功加载页面。最终它将超时而不会产生任何错误。在我的硬盘上也找不到BETA-HAR.HAR。我还注意到,当尝试使用此浏览器访问任何其他站点时,它也将同样无法加载(我怀疑这是由于未正确配置代理)。</p>