执行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
相关产品推荐
相关产品推荐

