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

PyCharm中Selenium脚本Try/Except无法捕获异常信息求助

问题根源与解决思路

嘿,你遇到的问题其实是两个核心细节没搞对,咱们一步步拆解:

1. 捕获的异常类型完全错误!

你现在捕获的是NoSuchElementException,但WebDriverWait的until()方法在等待超时后抛出的是TimeoutException,不是前者!

NoSuchElementException是直接调用driver.find_element()这类方法找不到元素时才会触发的异常,而WebDriverWait内部会反复尝试查找元素,直到超时,这时候它会抛出TimeoutException。所以你的except块根本没被触发,自然看不到打印的错误信息。

2. 代码逻辑搞反了(第一种写法的问题)

第一种写法里,你把print('NO ELEMENT FOUND!')放在了else块里——但else是当try块里的代码完全成功执行、没有抛出任何异常时才会运行的!也就是说,只有找到元素的时候,你才会打印“找不到元素”,这逻辑完全搞反了😂

修正后的代码示例

先把需要的异常类导进来,再调整逻辑:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 必须加上TimeoutException的导入
from selenium.common.exceptions import NoSuchElementException, TimeoutException

def choose_dress(self):
    try:
        # 等待元素出现
        self.dresses = WebDriverWait(self.driver.instance, 5).until(
            EC.visibility_of_element_located((
                By.XPATH, '//*[@id="block_top_menu"]/ul/li[2]/b')))
        # 找到元素后执行点击
        self.dresses.click()
    except TimeoutException:
        # 超时没找到元素,打印错误
        print('NO ELEMENT FOUND! 等待元素超时')
        # 如果想看到更详细的错误栈,可以加下面两行
        # import traceback
        # traceback.print_exc()
    except NoSuchElementException:
        # 额外捕获这个,防止某些极端情况触发
        print('NO ELEMENT FOUND! 元素不存在')

排查技巧:先捕获所有异常定位问题

如果你不确定到底抛出的是什么异常,可以先临时捕获所有Exception,打印异常类型和详情:

try:
    self.dresses = WebDriverWait(self.driver.instance, 5).until(
        EC.visibility_of_element_located((By.XPATH, '你的错误XPATH')))
except Exception as e:
    print(f"触发的异常类型:{type(e).__name__}")
    print(f"异常详情:{str(e)}")
    # 打印完整错误栈,方便定位
    import traceback
    traceback.print_exc()

这样就能明确看到到底是哪种异常,再针对性地捕获就好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:42