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

执行Selenium Python脚本遇RecursionError错误,求解决方法

解决Selenium Python脚本中的RecursionError(最大递归深度超出)问题

错误信息

object address: 000001340
object refcount: 2
object type: 00007FFA03482550
object type name: RecursionError
object repr: Recursion Error('maximum recursion depth exceeded in comparison')
lost sys.stderr

Process ended with exit code 1.

已知上下文

  • Chrome驱动版本:117
  • 疑似触发错误的代码片段:
try:
    el = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.styles_radioButton__l8XWY:nth-child(2)')))
except:
    pass
else:
    el.click()

解决方法

1. 拆分预期条件逻辑,避免内部递归冲突

EC.element_to_be_clickable内部可能存在递归检查逻辑,在Chrome 117版本组合下容易触发递归溢出。可以手动拆分条件,先等待元素可见,再验证可点击状态:

try:
    # 先等待元素可见
    el = WebDriverWait(driver, 1).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'.styles_radioButton__l8XWY:nth-child(2)')))
    # 手动判断元素可交互性
    if el.is_enabled() and el.is_displayed():
        el.click()
except:
    pass

2. 临时提高Python递归深度上限(治标方案)

如果拆分逻辑无效,可以临时调高Python的递归深度限制,这只是应急手段,建议优先排查根本原因:

import sys
# 在脚本最开头添加,将递归深度从默认1000调整为1500
sys.setrecursionlimit(1500)

3. 严格匹配Chrome与ChromeDriver版本

确认ChromeDriver的小版本和Chrome浏览器完全一致(比如Chrome 117.0.5938.92对应同版本号的ChromeDriver),版本细微差异可能导致内部逻辑异常触发递归。

4. 精准捕获异常,排查真实触发点

避免用except:捕获所有异常,改为捕获Selenium相关的特定异常,方便定位隐藏问题:

from selenium.common.exceptions import TimeoutException, ElementNotInteractableException

try:
    el = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.styles_radioButton__l8XWY:nth-child(2)')))
    el.click()
except (TimeoutException, ElementNotInteractableException):
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:20:16