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

Selenium中点击Next按钮后如何检测页面是否加载完成(无需刷新)

解决方案:利用body的data-wc-domready属性检测页面加载状态

既然页面加载时data-wc-domready会在false和true之间切换,我们可以通过等待这个属性的完整变化周期来确认页面加载完成,无需刷新页面。具体逻辑是:

  • 点击Next按钮后,先等待data-wc-domready变为false(确认页面开始加载新内容)
  • 再等待它变回true(确认加载完成)

修改后的点击函数代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import TimeoutException

def click_next_button(driver, timeout=15):
    next_button_locator = (By.XPATH, "//button[@title='Go to next page']")
    next_button = WebDriverWait(driver, timeout).until(EC.element_to_be_clickable(next_button_locator))
    
    # 滚动到按钮可见
    driver.execute_script("arguments[0].scrollIntoView();", next_button)
    
    # 点击Next按钮
    actions = ActionChains(driver)
    actions.move_to_element(next_button).click().perform()
    
    # 等待页面开始加载(data-wc-domready变为false)
    try:
        WebDriverWait(driver, timeout).until(
            lambda d: d.find_element(By.TAG_NAME, "body").get_attribute("data-wc-domready") == "false"
        )
    except TimeoutException:
        # 若未检测到加载启动,可能是点击未生效或页面无变化,直接跳过
        pass
    
    # 等待页面加载完成(data-wc-domready变回true)
    try:
        WebDriverWait(driver, timeout).until(
            lambda d: d.find_element(By.TAG_NAME, "body").get_attribute("data-wc-domready") == "true"
        )
    except TimeoutException:
        # 加载超时,触发刷新重试
        driver.refresh()
        # 刷新后重新等待Next按钮可点击,避免后续操作失败
        WebDriverWait(driver, timeout).until(EC.element_to_be_clickable(next_button_locator))

关键逻辑说明

  • 自定义等待条件:用lambda表达式直接检测body元素的data-wc-domready属性值,适配页面的特殊加载标识,无需依赖通用的元素变化。
  • 超时容错:针对加载启动和加载完成两个阶段分别设置超时,若任一阶段超时,自动触发页面刷新并恢复操作环境,避免程序崩溃。
  • 兼容无变化场景:如果点击Next后页面未触发加载(比如已到最后一页),跳过“等待变为false”的步骤,直接确认状态为true即可。

备选方案:检测AJAX请求完成

如果data-wc-domready的状态变化不稳定,还可以通过JavaScript检测页面的AJAX活动:

# 等待所有AJAX请求完成(若页面使用jQuery)
WebDriverWait(driver, timeout).until(
    lambda d: d.execute_script("return jQuery.active == 0;")
)

# 或等待document readyState完成
WebDriverWait(driver, timeout).until(
    lambda d: d.execute_script("return document.readyState == 'complete';")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:23:11