如何使用Playwright监控浏览器带宽使用量?
追踪Playwright浏览器带宽使用量
要监控Playwright浏览器的带宽消耗,你当前的思路方向是对的,但现有实现存在几个可以优化的点:
重复统计风险:
requestfinished事件里的request.sizes()已经包含了响应体大小(responseBodySize),同时监听response事件读取response.body()会导致响应体被重复计算,而且调用response.body()会额外占用内存(Playwright默认不会缓存响应体)。失败请求流量缺失:
requestfailed事件只做了日志记录,但失败请求可能已经发送了请求体,这部分流量也应该被统计。单位转换可读性差:用
1024*1024转换为MB比直接写0.000001更直观易懂。
下面是优化后的实现代码:
# 初始化字典,按浏览器实例区分带宽统计数据 browser_bandwidth = {} def init_bandwidth_tracking(browser): # 为每个浏览器创建独立的上下行流量统计容器 browser_bandwidth[browser] = {"upload": 0, "download": 0} def track_bandwidth(browser): def handle_request_finished(request): sizes = request.sizes() if not sizes: return # 累加上传流量:请求体大小 browser_bandwidth[browser]["upload"] += sizes.get("requestBodySize", 0) # 累加下载流量:响应体大小 browser_bandwidth[browser]["download"] += sizes.get("responseBodySize", 0) def handle_request_failed(request): sizes = request.sizes() if not sizes: return # 失败请求的上传流量也要统计 browser_bandwidth[browser]["upload"] += sizes.get("requestBodySize", 0) proxy_logger.warning(f"{proxyInfo} 请求失败 {request}") # 给浏览器绑定全局请求事件(也可绑定到context层面) browser.on("requestfinished", handle_request_finished) browser.on("requestfailed", handle_request_failed) # 使用示例 browser = playwright.chromium.launch(proxy={"server": "你的代理服务器地址"}) init_bandwidth_tracking(browser) track_bandwidth(browser) # 查看指定浏览器的总流量(转换为MB) total_upload_mb = browser_bandwidth[browser]["upload"] / (1024 * 1024) total_download_mb = browser_bandwidth[browser]["download"] / (1024 * 1024) print(f"总上传流量:{total_upload_mb:.2f} MB,总下载流量:{total_download_mb:.2f} MB")
关键说明:
- 多浏览器隔离统计:用字典关联每个浏览器实例的流量数据,支持同时监控多个浏览器。
- 避免冗余计算:仅通过
request.sizes()获取流量数据,无需额外读取响应体。 - 覆盖全场景流量:包含成功请求的上下行流量,以及失败请求的上传流量。
- 按需扩展监控:如果需要按页面、请求类型细分统计,可以在事件处理函数中通过
request.url()、request.method()等属性做过滤。
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

