如何延长Selenium连接超时时间,解决net::ERR_CONNECTION_TIMED_OUT报错
问题原因
selenium.common.exceptions.WebDriverException: Message: unknown error: net::ERR_CONNECTION_TIMED_OUT 属于网络连接阶段抛出的超时错误,触发在driver.get()执行过程中,早于你配置的显式等待、隐式等待的生效时机,你之前添加的等待逻辑仅在页面请求建立完成后才会执行,自然无法解决该类报错。
解决方案
按以下步骤调整代码即可:
- 第一步:初始化driver后先配置全局超时参数,覆盖默认的短超时阈值
# 初始化driver后立即配置 driver.set_page_load_timeout(120) # 页面加载超时设为120秒,可根据你的网络情况调整 driver.set_script_timeout(120) # JS异步执行超时 driver.implicitly_wait(30) # 元素查找全局隐式等待
- 第二步:给
driver.get添加重试逻辑,在连接超时时自动重试,避免单次请求失败直接抛错
max_retry = 3 # 最大重试次数,可自行调整 for retry_cnt in range(max_retry): try: driver.get(f"https://{username}:{password}@theinternalsite") break # 请求成功直接跳出重试循环 except Exception as e: # 仅对连接超时的报错做重试,其他错误直接抛出 if "ERR_CONNECTION_TIMED_OUT" in str(e) and retry_cnt < max_retry - 1: driver.delete_all_cookies() # 重试前清除缓存避免残留影响 else: driver.quit() raise e
- 第三步:简化后续页面校验逻辑,移除冗余的重复显式等待,调整后的完整代码示例:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() # 配置全局超时 driver.set_page_load_timeout(120) driver.set_script_timeout(120) driver.implicitly_wait(30) # 重试连接 max_retry = 3 for retry_cnt in range(max_retry): try: driver.get(f"https://{username}:{password}@theinternalsite") break except Exception as e: if "ERR_CONNECTION_TIMED_OUT" in str(e) and retry_cnt < max_retry - 1: driver.delete_all_cookies() else: driver.quit() raise e # 页面加载完成后执行后续操作 driver.find_element_by_tag_name('body').screenshot('test.png') WebDriverWait(driver, 60).until(EC.title_is("Face"))
额外排查项
如果调整后还是报错,优先检查以下配置:
- 手动在当前运行代码的网络环境下访问目标站点,确认域名可正常解析、无防火墙/安全策略拦截,基础网络连通性正常
- 如果目标是内部站点需要走代理访问,要给driver显式配置代理参数,不要依赖系统默认代理配置
- 检查用户名、密码中是否包含@、:、/这类URL保留字符,如有需要先做URL编码后再拼接到请求地址中,避免地址解析错误
内容的提问来源于stack exchange,提问作者Royal
相关产品推荐
相关产品推荐

