Python Selenium触发TimeoutException却未进入对应except块问题求助
问题原因
- 异常类型不匹配:你当前捕获的
TimeoutException不是Selenium官方抛出的异常类,只有从selenium.common.exceptions包中导入的TimeoutException才能匹配driver抛出的页面加载超时、渲染超时异常。如果导入了其他库的TimeoutException(比如requests库的超时异常),或者没有显式导入Selenium的超时异常,就会出现抛异常但不进入except块的问题。 - 异常子类未匹配:Chrome内核的WebDriver抛出的渲染器接收超时,部分旧版本中会归类到
WebDriverException子类下,仅捕获TimeoutException会出现漏判。
修复步骤
1. 修正异常导入
在代码开头添加正确的Selenium异常导入声明:
# 导入Selenium官方的超时异常类 from selenium.common.exceptions import TimeoutException, WebDriverException import time
2. 优化捕获逻辑,添加兜底校验
调整try-except结构,新增异常类型打印,方便后续定位问题:
try: driver.set_page_load_timeout(30) driver.get(url) except TimeoutException: print("页面加载失败......") print("尝试刷新重试...") for number_of_try in range(1,9): print(f"第 {number_of_try} 次重试") try: driver.refresh() break except TimeoutException: print("刷新失败") print("等待1分钟后再次尝试") time.sleep(60) # 兜底捕获其他Selenium相关异常 except WebDriverException as e: print(f"捕获到Selenium驱动异常,异常类型:{type(e).__name__},异常详情:{str(e)}")
3. 渲染器超时专属优化
如果频繁出现如下报错:
TimeoutException: timeout: Timed out receiving message from renderer: 30.000
可在初始化ChromeDriver时添加启动参数修复:
from selenium import webdriver chrome_options = webdriver.ChromeOptions() # 禁用GPU渲染,减少渲染器异常概率 chrome_options.add_argument("--disable-gpu") # 禁用/dev/shm内存共享,避免内存不足导致渲染超时 chrome_options.add_argument("--disable-dev-shm-usage") # 禁用沙箱模式,降低驱动权限限制导致的异常 chrome_options.add_argument("--no-sandbox") driver = webdriver.Chrome(options=chrome_options)
内容的提问来源于stack exchange,提问作者karanrp
相关产品推荐
相关产品推荐

