如何使用Selenium库将网站响应信息保存为JSON文件?
用Selenium保存网站响应到JSON文件
当然可以通过Selenium实现这个需求。不过要注意,Selenium核心是模拟浏览器交互,不像requests库那样直接获取HTTP响应,所以我们需要借助浏览器的性能日志来捕获网络请求的响应数据,再导出为JSON格式。
实现步骤
配置浏览器选项,启用性能日志
以Chrome为例,需要设置goog:loggingPrefs开启网络日志记录,让浏览器捕获所有网络请求和响应。捕获并过滤网络响应
访问目标页面后,从浏览器的性能日志中提取出包含响应数据的条目,过滤出你需要的请求(比如特定API接口)。解析响应并保存为JSON文件
将捕获到的响应内容解析为Python字典,再用json模块写入到本地JSON文件中。
代码示例(Python)
from selenium import webdriver from selenium.webdriver.chrome.options import Options 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") # 替换成你要爬取的网站 # 获取性能日志 logs = driver.get_log("performance") # 过滤出包含响应的日志条目 response_entries = [] for entry in logs: try: message = json.loads(entry["message"])["message"] # 只保留有响应数据的条目 if "Network.responseReceived" in message["method"]: request_id = message["params"]["requestId"] # 获取完整的响应内容 response = driver.execute_cdp_cmd("Network.getResponseBody", {"requestId": request_id}) # 整理需要保存的数据,比如URL、状态码、响应体 response_data = { "url": message["params"]["response"]["url"], "status": message["params"]["response"]["status"], "body": response.get("body", "") } response_entries.append(response_data) except Exception as e: continue # 跳过解析失败的日志条目 # 将数据保存到JSON文件 with open("website_responses.json", "w", encoding="utf-8") as f: json.dump(response_entries, f, indent=2, ensure_ascii=False) # 关闭浏览器 driver.quit()
注意事项
- 不同浏览器的日志配置可能略有差异,比如Firefox需要设置
moz:firefoxOptions里的prefs。 - 如果响应是加密的(比如gzip压缩),
getResponseBody会自动解密,无需额外处理。 - 可以根据需求调整过滤条件,比如只保留特定状态码、特定URL前缀的响应。
内容的提问来源于stack exchange,提问作者Alex Rebell
相关产品推荐
相关产品推荐

