You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python通过browsermob-proxy导出的HAR文件中获取_transferSize

根因说明

_transferSize是Firefox对标准HAR规范的自定义扩展字段,不属于browsermob-proxy 2.1.4默认输出的标准字段。你手动从Firefox导出的HAR是浏览器内核直接采集的原生数据,而通过browsermob-proxy导出的HAR是代理服务组装的标准格式数据,所以默认没有这个扩展字段。

解决方案

你可以根据需求任选以下两种方案解决:

方案1:修改现有browsermob proxy逻辑,手动补全_transferSize

  • 首先调整new_har的配置,开启全量捕获,确保bodySize和headersSize统计准确,将你原有代码中proxy.new_har行替换为以下内容:
proxy.new_har("generated_har", options={
    'captureHeaders': True,
    'captureContent': True,
    'captureBinaryContent': True,
    'captureSize': True
})
  • 拿到HAR数据后遍历条目,手动计算_transferSize,该值的统计逻辑和Firefox原生逻辑一致,等于响应头大小加响应体传输大小:
for entry in browser_logs['log']['entries']:
    entry['_transferSize'] = entry['response']['headersSize'] + entry['response']['bodySize']
  • 额外适配提示:如果你使用的Firefox版本高于58,建议删除caps['marionette'] = False配置,高版本Firefox已经停止支持旧的非marionette驱动模式,会导致捕获数据不全。

方案2:直接使用Firefox原生CDP接口导出HAR(无需代理)

该方案拿到的HAR和你手动从Firefox导出的内容完全一致,原生自带_transferSize字段,不需要依赖browsermob proxy,适配性更强,参考代码如下:

from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
import json

caps = DesiredCapabilities.FIREFOX
caps['acceptInsecureCerts'] = True
driver = webdriver.Firefox(desired_capabilities=caps)

# 开启网络监控模块
driver.execute_cdp_cmd('Network.enable', {})
# 开启HAR录制,开启传输大小统计
driver.execute_cdp_cmd('Network.startRecordingHAR', {
    'captureHeaders': True,
    'captureContent': True,
    'includeTransferSize': True
})

driver.get("someurl")

# 获取HAR内容
har_result = driver.execute_cdp_cmd('Network.getHAR', {})
browser_logs = json.loads(har_result['har'])

# 停止录制并关闭浏览器
driver.execute_cdp_cmd('Network.stopRecordingHAR', {})
driver.quit()

内容的提问来源于stack exchange,提问作者Dcook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:03