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

标签 python selenium proxy har browsermob

目标: 我想通过 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 中运行
  • 浏览器:FireFox (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 编写测试版脚本(不起作用):

"""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。我还注意到,当尝试使用此浏览器访问任何其他站点时,它同样会加载失败(我怀疑这是由于代理配置不正确所致)。

最佳答案

试试这个:

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()

关于python - 无法使用带有 BrowserMob-Proxy 的 Python Selenium 脚本捕获 HAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028604/

相关文章:

python - 使用 python 3 对 url 进行编码

html - Selenium 找不到从嵌入式 html 加载的元素

java - 下拉列表不选择可见时的值

selenium - org.openqa.selenium.WebDriverException : Unable to parse remote response: <! DOCTYPE html>

objective-c - 在命令行工具应用程序中更改 Mac 系统代理设置

docker - 在服务器上的docker-compose上使用代理

javascript - 在现有的 React 应用程序中逐步采用 Next.js

python - 将列表转换为 Pandas 时间序列

python - 如何将pandas DataFrame转换为tensorflow.python.data.ops.dataset_ops.PrefetchDataset

Python 批量重命名器可以工作,但不能同时工作?