如何用Python捕获浏览器动态请求URL并保存至文件?
问题分析
你的代码逻辑和需求完全不匹配:你现在是主动轮询一个固定URL,提取响应里的.jpg链接,但你的需求是捕获浏览器和网站连接后,浏览器向动态端点发送的所有请求URL,原代码根本没涉及拦截浏览器请求的逻辑,自然达不到目的。
正确实现方案
要捕获浏览器发出的请求,核心是让浏览器的流量经过你的Python程序,或者直接读取浏览器的网络请求日志,下面是两种可行的落地方案:
方案1:用mitmproxy拦截请求
mitmproxy是专门用来拦截、修改HTTP/HTTPS流量的工具,能轻松捕获浏览器的所有请求。
操作步骤:
- 先安装mitmproxy:
pip install mitmproxy
- 编写Python脚本(比如命名为
capture_requests.py):
from mitmproxy import http class CaptureRequests: def request(self, flow: http.HTTPFlow) -> None: # 拿到当前请求的完整URL request_url = flow.request.pretty_url # 把URL追加写入文件 with open("captured_urls.txt", "a", encoding="utf-8") as f: f.write(request_url + "\n") # 可以加过滤条件,比如只抓目标域名或特定后缀的请求 # if "example.com" in request_url and request_url.endswith(".jpg"): # with open("captured_urls.txt", "a", encoding="utf-8") as f: # f.write(request_url + "\n") addons = [CaptureRequests()]
- 启动mitmproxy代理:
mitmdump -s capture_requests.py
- 配置浏览器代理:把浏览器的HTTP/HTTPS代理设为
127.0.0.1:8080(mitmproxy默认端口),之后访问目标网站,所有请求都会被捕获并写入captured_urls.txt。
方案2:用Selenium捕获浏览器网络日志
如果你本来就在用Selenium控制浏览器,可以直接读取浏览器的网络日志获取请求URL。
代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time import json # 配置Chrome,开启性能日志(包含网络请求信息) chrome_options = Options() chrome_options.set_capability("goog:loggingPrefs", {"performance": "ALL"}) driver = webdriver.Chrome(options=chrome_options) driver.get("https://example.com") # 替换成你要监控的目标网站 # 持续捕获请求 while True: # 获取浏览器的性能日志 logs = driver.get_log("performance") for log in logs: log_entry = log["message"] # 筛选出请求即将发送的日志条目 if '"method":"Network.requestWillBeSent"' in log_entry: data = json.loads(log_entry) request_url = data["message"]["params"]["request"]["url"] # 写入文件 with open("captured_urls.txt", "a", encoding="utf-8") as f: f.write(request_url + "\n") time.sleep(2) # 实际使用完记得关闭浏览器 # driver.quit()
原代码的问题总结
- 逻辑完全偏差:原代码是主动请求固定URL,提取响应内容,和“捕获浏览器发出的请求”不是一个逻辑。
- 无新请求识别:就算能提取链接,也只是重复提取同一URL的响应内容,没法区分“新生成的请求”。
- 写入格式问题:
f.write(line)没加换行符,会导致所有链接挤在一行。
内容的提问来源于stack exchange,提问作者timp bill
相关产品推荐
相关产品推荐

