如何为Selenium RemoteWebDriver设置最大连接重试次数?
修改Selenium Grid连接重试次数的方法
Selenium的webdriver.Remote并没有直接提供配置连接重试次数的参数,不过可以通过以下两种方式实现自定义重试逻辑:
方法一:手动实现重试循环
在初始化Remote驱动的代码外层添加循环,捕获连接异常并重复尝试,直到达到设定的重试次数:
from selenium import webdriver from selenium.common.exceptions import WebDriverException max_retries = 5 # 自定义重试次数 grid_url = "你的Grid地址" d = {"browserName": "chrome"} # 你的capabilities driver = None for attempt in range(max_retries): try: driver = webdriver.Remote( command_executor=grid_url, desired_capabilities=d, keep_alive=False ) print(f"第{attempt+1}次尝试连接成功") break except WebDriverException as e: print(f"第{attempt+1}次尝试失败: {str(e)}") if attempt == max_retries - 1: raise # 最后一次失败后抛出异常 # 使用driver进行后续操作
方法二:配置底层requests库的重试策略
Selenium底层依赖requests库与Grid通信,可以通过修改requests.adapters.HTTPAdapter的重试参数来全局设置重试行为:
import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry from selenium import webdriver # 配置重试策略 retry_strategy = Retry( total=5, # 总重试次数 backoff_factor=1, # 重试间隔(1秒、2秒、4秒...指数递增) status_forcelist=[429, 500, 502, 503, 504], # 需要重试的HTTP状态码 allowed_methods=["GET", "POST"] # 允许重试的请求方法 ) adapter = HTTPAdapter(max_retries=retry_strategy) http = requests.Session() http.mount("http://", adapter) http.mount("https://", adapter) # 让Selenium使用自定义的session from selenium.webdriver.remote.remote_connection import RemoteConnection RemoteConnection._request = http.request # 初始化Remote驱动 grid_url = "你的Grid地址" d = {"browserName": "chrome"} driver = webdriver.Remote( command_executor=grid_url, desired_capabilities=d, keep_alive=False )
注意:第二种方法是全局修改requests的重试行为,会影响所有使用该session的请求,包括Selenium的其他接口调用。
内容的提问来源于stack exchange,提问作者Steven Schütz
相关产品推荐
相关产品推荐

