You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium代码添加try...except块仍抛出TimeoutException该如何解决

问题原因

你写的异常捕获语句语法不符合Python规范:在except后使用or连接多个异常类型时,Python会先执行布尔运算,ElementNotInteractableException or NoSuchElementException or TimeoutException的运算结果始终为第一个非空的ElementNotInteractableException,相当于你只配置了捕获这一种异常,TimeoutException不在捕获范围内,所以超时场景下异常会直接抛出。

解决方案

把多个需要捕获的异常放在元组里,用逗号分隔即可,修正后的代码如下:

# 注意提前导入需要捕获的异常类
from selenium.common.exceptions import ElementNotInteractableException, NoSuchElementException, TimeoutException

try:
    browser.find_element('xpath', '/html/body/ul').click()
    wait = WebDriverWait(browser, 10)
    wait.until(EC.visibility_of_element_located(('xpath', '/html/body/div[1]/div[3]/span')))
    return ' '.join(browser.find_element('id', 'response').text.split('\n')[0].split()[:-1])

# 用元组包裹多个需要捕获的异常类型,用逗号分隔
except (ElementNotInteractableException, NoSuchElementException, TimeoutException):
    return 'No result'

可选优化点

  • 如果需要排查异常具体类型,可以在捕获块中增加日志输出:
except (ElementNotInteractableException, NoSuchElementException, TimeoutException) as e:
    print(f"触发异常类型:{type(e).__name__}")
    return 'No result'
  • 尽量避免使用绝对xpath定位元素,页面结构稍有变动就会触发元素找不到的异常,可以改用id、class、相对xpath等更稳定的定位方式。

内容的提问来源于stack exchange,提问作者Honn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:57:02