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

Python Selenium出现stale element reference报错该如何解决?

你遇到的是Selenium中典型的StaleElementReferenceException,触发原因是代码中持有的DOM元素引用,对应的页面节点已经被销毁、更新或随着页面跳转失效,再对旧引用执行操作就会抛出该错误,你给出的两段代码都存在触发该错误的逻辑问题,对应解决方案如下:

1. 修正搜索框循环输入逻辑

不要一次性获取search_query元素后在循环中反复使用,每次输入前重新获取元素,避免输入过程中页面DOM更新导致元素失效,同时每次输入前清空搜索框内容,避免内容叠加:

for name in company_name:
    search_query = WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.NAME, 'q')))
    search_query.clear()
    search_query.send_keys(f'"linkedin" AND "{name}"')
    # 若输入后有查询请求,可在此处添加等待搜索结果加载的逻辑

2. 修正按钮点击及跳转后逻辑

你注释的frame切换代码本身存在逻辑错误,你定位的目标是普通span元素,并非iframe,不要调用frame切换相关方法。点击按钮触发页面跳转后,需要等待新页面加载完成再执行后续操作,不要使用固定时长的time.sleep,改用显式等待校验新页面状态:

# 等待目标按钮可点击
down_arrow = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ember68"]/span')))
down_arrow.click()
# 等待新页面加载完成,可替换为等待新页面独有元素出现的逻辑
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, '新页面的标志性元素ID')))
# 后续所有元素操作都要在新页面加载完成后重新获取元素

额外注意事项

presence_of_element_located仅校验元素存在于DOM树中,不保证元素可见、可交互,针对需要点击的元素,优先使用element_to_be_clickable做等待条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:02