如何解决Python Selenium中'TimeoutException'未定义的报错问题
解决方案
1. 修复NameError: name 'TimeoutException' is not defined报错
该报错是因为未导入Selenium对应的异常类,在代码开头补充导入语句即可,推荐补全所有Selenium相关依赖:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 新增导入TimeoutException from selenium.common.exceptions import TimeoutException
如果你使用的是Selenium 4及以上版本,原有的find_element_by_xpath方法已被官方弃用,需要统一替换为find_element(By.XPATH, 路径)的写法。
2. 修复元素等待超时的TimeoutException报错
触发该报错是因为10秒内没有定位到目标duvfw-AB类的按钮,可按以下优先级排查解决:
- 不要用动态class定位:DEGIRO等站点的class名多为前端构建工具自动生成的动态值,会随版本更新、页面刷新变化,属于不稳定的定位依据。建议换用按钮文本、aria属性、父级稳定节点的相对路径作为定位条件,比如如果是cookie确认按钮,可以用文本匹配:
# 替换原来的XPATH定位,优先用可点击条件代替存在条件 myElem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Accept') or contains(text(),'接受')]"))) - 修改class匹配规则:如果确认class值固定,也可能是按钮存在多个class值导致全匹配失效,将XPATH的
@class='duvfw-AB'改为模糊匹配contains(@class, 'duvfw-AB')即可 - 增加登录后等待逻辑:点击登录按钮后可先等待登录成功的标识元素出现,再查找目标按钮,避免在登录跳转过程中就开始查找元素
- 检查iframe:如果目标按钮在iframe内嵌页面中,需要先调用
driver.switch_to.frame()切换到对应iframe后再查找元素
注:开头的蓝牙相关报错是Chrome浏览器的日志输出,不影响代码运行,无需处理。
内容的提问来源于stack exchange,提问作者SingSong
相关产品推荐
相关产品推荐

