如何在Python Selenium中获取FETCH/XHR请求的网络状态码
Python Selenium获取FETCH/XHR响应状态码实现方案
可以通过Selenium的性能日志抓取功能实现该需求,你提交的原有代码存在多处逻辑错误导致无法获取结果:
原有代码问题汇总:
- 未导入
DesiredCapabilities模块就直接调用- 性能日志配置逻辑写在driver初始化之后,配置参数未生效
- 调用
get_log时传入了browser参数,只能获取控制台输出日志,无法拿到网络请求相关的性能日志- webdriver初始化语法错误,缺少
webdriver.Chrome类声明
完整实现代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import os import json # 配置Chrome参数 chrome_options = Options() # 如需无头模式可取消下面的注释 # chrome_options.add_argument("--headless=new") # 配置性能日志采集 caps = DesiredCapabilities.CHROME.copy() caps['goog:loggingPrefs'] = {'performance': 'ALL'} # 初始化driver(注意参数传入顺序,capabilities要在初始化时传入) dpath = os.path.join(os.getcwd(), "chromedriver") driver = webdriver.Chrome( executable_path=dpath, options=chrome_options, desired_capabilities=caps ) # 访问目标页面 driver.get("https://www.geeksforgeeks.org/") # 获取所有性能日志 performance_logs = driver.get_log("performance") # 遍历日志筛选FETCH/XHR的响应状态码 for entry in performance_logs: log = json.loads(entry["message"])["message"] # 筛选响应接收事件 if log["method"] == "Network.responseReceived": params = log["params"] # 筛选资源类型为XHR或Fetch if params["type"] in ["XHR", "Fetch"]: response = params["response"] # 打印请求地址、状态码 print(f"请求地址:{response['url']}") print(f"响应状态码:{response['status']}\n") # 关闭driver driver.quit()
核心逻辑说明
- Selenium的
performance类型日志会记录所有网络请求相关的事件,我们需要过滤Network.responseReceived事件(该事件在请求收到响应时触发) - 事件参数中的
type字段对应资源类型,筛选值为XHR或Fetch的记录即可定位到目标请求 - 状态码存储在事件参数的
response.status字段中
内容的提问来源于stack exchange,提问作者user14784453
相关产品推荐
相关产品推荐

