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

Selenium点击按钮页面重载后driver.page_source仍返回旧内容如何解决?

问题原因

点击触发页面重载后,time.sleep() 只是固定时长等待,无法准确判断DOM是否完成更新:如果是整页跳转,可能页面还在加载过程中你就调用了driver.page_source;如果是单页应用局部刷新,DOM的异步渲染逻辑还没执行完成,拿到的自然还是旧页面的源码。

解决方法

1. 替换固定等待为显式等待(最常用方案)

放弃time.sleep(),改用Selenium内置的显式等待逻辑,先确认页面完成重载/更新,再获取页面源码:

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

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(base_listing_url)

# 点击前先获取旧页面的body元素
old_body = driver.find_element(By.TAG_NAME, 'body')
driver.find_element(By.CSS_SELECTOR, '.fTomoL').click()

# 等待旧body失效,确认页面已经开始重载
WebDriverWait(driver, 20).until(EC.staleness_of(old_body))
# 额外等待新页面独有的特征元素加载完成,确保DOM渲染完毕
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, '新页面独有的元素选择器')))

print(driver.page_source)

2. 新标签页跳转场景补充逻辑

如果点击按钮后是打开了新标签页加载内容,需要手动切换driver的上下文到新标签页:

# 点击后获取所有打开的标签页句柄
all_handles = driver.window_handles
# 切换到最新打开的标签页
driver.switch_to.window(all_handles[-1])
# 再执行上述的显式等待和源码获取逻辑

3. 单页应用局部刷新场景调整

如果是单页应用的局部内容重载(没有整页刷新),只需等待对应更新区域的内容发生变化即可:

# 点击前获取刷新区域的旧内容
old_content = driver.find_element(By.CSS_SELECTOR, '待刷新区域的元素选择器').text
driver.find_element(By.CSS_SELECTOR, '.fTomoL').click()
# 等待区域内容发生变更
WebDriverWait(driver, 20).until(lambda d: d.find_element(By.CSS_SELECTOR, '待刷新区域的元素选择器').text != old_content)

print(driver.page_source)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:54:05