Selenium场景下如何获取跳转至最终URL过程中中间重定向URL的查询参数
Selenium提取重定向链路URL的实现方案
以下是两种生产环境常用的实现方法,均可直接拿到完整的重定向URL列表:
方法1:基于Chromium内核浏览器性能日志实现(无需额外依赖)
该方案利用Chrome/Edge自带的性能日志捕获页面跳转记录,无需安装第三方扩展,适配绝大多数测试场景。
示例代码(Python):
from selenium import webdriver from selenium.webdriver.chrome.options import Options import json # 配置开启性能日志捕获 chrome_options = Options() chrome_options.set_capability( "goog:loggingPrefs", {"performance": "ALL"} ) driver = webdriver.Chrome(options=chrome_options) # 访问测试入口地址 driver.get("你的测试入口URL") # 解析日志提取顶层页面跳转链路 logs = driver.get_log("performance") redirect_chain = [] for entry in logs: log_msg = json.loads(entry["message"])["message"] # 仅保留顶层页面的导航事件,过滤iframe跳转 if log_msg["method"] == "Page.frameNavigated" and not log_msg["params"]["frame"].get("parentId"): current_url = log_msg["params"]["frame"]["url"] if current_url not in redirect_chain: redirect_chain.append(current_url) # 输出完整重定向列表 print(redirect_chain) # 校验指定查询参数是否存在 check_param = "你要校验的参数名" for url in redirect_chain: if f"{check_param}=" in url: print(f"匹配到含指定参数的中间URL:{url}") break driver.quit()
注意事项:
- 仅适配Chromium内核浏览器(Chrome、Edge),Firefox需单独配置日志规则
- 日志会记录所有页面请求,需自行过滤静态资源、iframe等非主链路跳转
方法2:基于Selenium Wire扩展实现(跨浏览器、功能更全面)
如果需要跨浏览器支持,或者要获取状态码、请求头这类额外信息,可以使用Selenium Wire扩展,它会自动拦截所有网络请求。
- 安装依赖:
pip install selenium-wire - 示例代码:
from seleniumwire import webdriver driver = webdriver.Chrome() driver.get("你的测试入口URL") redirect_chain = [] # 筛选重定向类型的主页面请求 for req in driver.requests: if req.response and req.response.status_code in [301,302,303,307,308] and req.response.headers.get("Content-Type","").startswith("text/html"): if req.url not in redirect_chain: redirect_chain.append(req.url) # 补充最终页面URL redirect_chain.append(driver.current_url) print(redirect_chain) driver.quit()
内容的提问来源于stack exchange,提问作者user16745258
相关产品推荐
相关产品推荐

