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

Python 2.7+Selenium出现StaleElementReferenceException报错求助

解决Selenium中的StaleElementReferenceException问题

嘿,这个问题我之前踩过一模一样的坑!咱们先搞明白为啥会弹出StaleElementReferenceException:

当你执行search.send_keys(Keys.RETURN)后,Google跳转到了搜索结果页面——这时候页面的DOM已经完全重新渲染了。你之前定位并存在search变量里的那个搜索框,已经不是当前页面中的元素了,旧的元素引用直接失效,这时候再调用search.clear()自然会报错。

最简单的修复方案:重新定位元素

在执行clear()操作前,重新获取一次当前页面的搜索框引用就行,修改后的代码如下:

from selenium.webdriver.common.keys import Keys
import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.google.com')
# 第一次定位搜索框并输入内容
search = browser.find_element_by_id('lst-ib')
search.send_keys('Python 2')
search.send_keys(Keys.RETURN)
time.sleep(6)
# 关键步骤:搜索页面加载完成后,重新定位搜索框
search = browser.find_element_by_id('lst-ib')
search.clear()
time.sleep(2)
browser.close()

更可靠的优化方案:用显式等待代替固定sleep

time.sleep()是固定时长等待,有时候页面加载慢了会超时,加载快了又白白浪费时间。用Selenium的显式等待可以等到元素真正可操作时再执行代码,稳定性和效率都更高:

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://www.google.com')

# 等待搜索框加载完成并可点击
search = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.ID, 'lst-ib'))
)
search.send_keys('Python 2')
search.send_keys(Keys.RETURN)

# 搜索结果加载后,重新等待并定位搜索框
search = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.ID, 'lst-ib'))
)
search.clear()

browser.close()

这个方法会最多等待10秒,只要搜索框在10秒内变得可操作,就会立刻执行下一步,比固定sleep灵活得多。

内容的提问来源于stack exchange,提问作者Amarpreet Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:44