timeoutexception 表示等待条件未在规定时间内成立,非元素不存在;显式等待需传元组参数,否则报 typeerror;导出超时需调整 webdriver 配置而非页面加载超时;操作 iframe 或 shadow dom 前须先切换上下文。

TimeoutException 是等不到,不是找不到
抛出 TimeoutException 意味着你设的等待条件在规定时间内没成立,和 NoSuchElementException 有本质区别:前者是“元素该在但还没好”,后者是“根本不在那儿”。常见于点击导出按钮后等下载完成、等待动态渲染的表格加载完毕等场景。不区分这点,容易误调定位器或加错等待逻辑。
显式等待必须传元组,否则直接报 TypeError
写错参数格式是高频低级错误,比如把 EC.presence_of_element_located((By.ID, "btn")) 写成 EC.presence_of_element_located(By.ID, "btn")(漏掉外层括号),会触发 TypeError: __init__() takes 2 positional arguments but 3 were given。这个错误发生在构造预期条件对象阶段,根本不会进入等待流程。
正确写法要点:
-
WebDriverWait第二个参数是秒数,必须是数字,不能是字符串 -
EC.xxx的参数必须是单个元组,格式为(By.XPATH, "//button")或(By.CSS_SELECTOR, "input[name='q']") - 不要混用定位策略:别把 XPath 字符串传给
By.ID
导出大文件时的 Read timed out 不是页面加载超时
遇到 HTTPConnectionPool(host='localhost', port=XXXX): Read timed out. (read timeout=120),别去调 driver.set_page_load_timeout() —— 这个设置只管 HTML 文档加载,而导出 CSV/Excel 时的超时来自 Chromedriver 内部 HTTP 连接读取限制(默认 120 秒),和 Selenium Python 层无关。
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
必须改 WebDriver 启动配置:
- 用
options.add_argument("--disable-extensions")减少干扰 - 在
desired_capabilities或 ChromeOptions 中注入timeouts配置,单位毫秒:{"pageLoad": 300000, "script": 60000} - 对下载路径做硬编码监控,用文件系统轮询代替无休止等待
iframe 和 Shadow DOM 里等元素,先切上下文再等
元素在 iframe 里却直接 find_element 或用 WebDriverWait 等,必报 NoSuchElementException 或 TimeoutException —— 因为 WebDriver 默认在顶层 DOM 查找。Shadow DOM 同理,现代前端框架(如 Lit、Stencil)大量使用它,但 Selenium 默认不可见。
操作前必须显式切换:
- 进
iframe:先driver.switch_to.frame("frame-name-or-id")或用find_element定位 frame 元素再切 - 出
iframe:用driver.switch_to.default_content()回顶层,或driver.switch_to.parent_frame()上一级 - 进 Shadow DOM:需用 JS 执行
element.shadowRoot.querySelector(...),Selenium 原生不支持直接定位
最容易被忽略的是:切完 iframe 后,所有后续等待和查找都必须在这个上下文内进行,且超时设置要单独考虑该 iframe 加载耗时。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










