如何在Selenium中捕获HTTP响应错误(如500状态码)并终止脚本或记录错误
Selenium捕获HTTP响应错误并终止脚本的实现方法
原生Selenium WebDriver本身没有直接提供读取HTTP响应状态码的内置接口,其设计核心聚焦于模拟终端用户的页面交互行为,而非网络层数据监听。但可以通过以下两种成熟方案实现你的需求:
方案1:使用Selenium 4+内置的DevTools协议支持(推荐)
Selenium 4.0及以上版本已经原生支持Chrome DevTools协议(CDP),可以直接监听所有网络请求的响应状态,触发错误时直接终止脚本。
以下是Python语言的示例代码:
from selenium import webdriver import sys # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() # 开启网络监听能力 driver.execute_cdp_cmd("Network.enable", {}) # 定义响应捕获回调函数 def response_listener(response): resp_data = response.get("response", {}) status_code = resp_data.get("status", 200) req_url = resp_data.get("url", "") # 匹配4xx、5xx类错误状态码 if status_code >= 400: print(f"捕获到HTTP错误:状态码 {status_code},请求地址:{req_url}") # 关闭浏览器后直接终止脚本 driver.quit() sys.exit(1) # 绑定响应监听器 driver.add_listener("Network.responseReceived", response_listener) # 下方写入你原本的脚本业务逻辑 # driver.get("https://你的测试地址.com")
- 优点:无需额外依赖其他工具,配置简单,全类型网络请求均可捕获
- 注意:仅支持Selenium 4.0及以上版本,Chrome、Edge、Firefox等主流现代浏览器均兼容该方案
方案2:搭配本地代理工具实现(兼容旧版本Selenium)
如果使用的是Selenium 3及以下版本,可以在启动浏览器时配置本地代理,将所有浏览器流量转发到代理服务中,在代理层监听响应状态码。常用的代理工具包括BrowserMob Proxy、mitmproxy等,你可以在代理的响应回调逻辑中加入状态码判断,遇到错误时调用Selenium的退出接口终止脚本。
- 优点:兼容所有Selenium版本,不受浏览器版本限制
- 缺点:需要额外部署代理服务,配置流程相对繁琐
内容的提问来源于stack exchange,提问作者Abdurehman Siddiqui
相关产品推荐
相关产品推荐

