不使用browsermobproxy获取站点HAR文件的实现方案咨询
无需browsermobproxy获取HAR文件的可行方案
你遇到的报错是因为browsermobproxy已经多年未更新,仅支持Java 8版本,你本地的Java版本过高导致反射权限被限制。以下是无需使用browsermobproxy的替代实现方式:
方案1:Selenium原生DevTools实现(无额外依赖)
Selenium 4.0及以上版本支持直接调用浏览器DevTools协议捕获网络请求,无需第三方代理:
import json from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 开启性能日志捕获 chrome_options.set_capability("goog:loggingPrefs", {"performance": "ALL"}) driver = webdriver.Chrome(options=chrome_options) # 启用网络监控 driver.execute_cdp_cmd("Network.enable", {}) driver.execute_cdp_cmd("Page.enable", {}) driver.get("http://www.google.co.in") # 读取性能日志并组装HAR logs = driver.get_log("performance") entries = [] for log in logs: msg = json.loads(log["message"])["message"] if msg["method"] == "Network.responseReceived": entries.append(msg["params"]) har = { "log": { "version": "1.2", "creator": {"name": "Selenium CDP", "version": "1.0"}, "entries": entries } } # 保存HAR文件 with open("google.har", "w", encoding="utf-8") as f: json.dump(har, f, indent=2, ensure_ascii=False) driver.quit()
Firefox浏览器仅需替换对应驱动配置即可使用相同逻辑
方案2:Playwright原生HAR导出(配置最简单)
Playwright内置HAR导出能力,仅需几行代码即可完成:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.firefox.launch() # 初始化上下文时指定HAR输出路径 context = browser.new_context(record_har_path="google.har") page = context.new_page() page.goto("http://www.google.co.in") context.close() browser.close()
导出的HAR为标准格式,无需手动处理数据结构
方案3:mitmproxy替代代理方案
如果必须使用代理模式捕获流量,可以用仍在活跃维护的mitmproxy替代browsermobproxy:
- 安装mitmproxy:
pip install mitmproxy - 启动代理并指定HAR输出:
mitmdump -w output.har - 配置Selenium代理指向mitmproxy默认监听的
127.0.0.1:8080即可
内容的提问来源于stack exchange,提问作者RLU
相关产品推荐
相关产品推荐

