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

Selenium/Python点击Next按钮后URL无变化 无法正常抓取下一页数据

问题根因

你抓取的站点属于单页应用(SPA),翻页操作通过Ajax异步加载渲染内容,页面URL不会随翻页发生变化,所以你每次用未变化的URL通过requests发起请求,拿到的永远是首页的返回结果,和你是否点击了Next按钮无关。同时你现有代码存在逻辑缺陷,点击翻页后没有复用Selenium已加载的新页面内容,且循环仅执行一次就会终止。

可行解决方案

方案1:直接调用后端API(更稳定高效)

不需要依赖Selenium模拟点击,直接请求翻页对应的后端接口即可,操作步骤如下:

  • 打开浏览器F12开发者工具,切换到「网络」面板,筛选「Fetch/XHR」类型的请求
  • 点击页面上的Next按钮,就能捕获到翻页对应的POST请求,接口地址为https://www.hunterdouglas.com/xdan/locator/v1/search
  • 请求参数中包含pageNum(页码)、pageSize(每页条数)、address、country等字段,你只需要修改pageNum的数值,构造合法的POST请求就能拿到所有页的结果,比模拟点击的性能和稳定性高很多。

方案2:修正现有Selenium代码

如果你需要继续使用Selenium方案,可以按以下规则修改代码:

  • 不要使用requests重新请求页面URL,点击Next等待内容加载完成后,直接取driver.page_source传给bs4解析,这部分源码已经包含异步加载的新页内容
  • 替换固定等待time.sleep(10)为显式等待,避免等待时间不足或者过长的问题:可以在点击Next前先记录当前页第一条列表数据的唯一标识,点击后等待页面出现和之前标识不同的第一条数据,再开始解析
  • 移除循环中else分支的break语句,增加Next按钮是否置灰不可用的判断,按钮不可用时再终止循环

修正后参考代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
import time

# 先获取第一页内容
first_page = driver.page_source
get_page_content(first_page) # 你的解析函数,直接传页面源码即可

loop = True
while loop:
    try:
        # 记录点击前第一条数据的内容
        pre_first_item = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.locator-result-item'))).text
        # 等待Next按钮可点击
        next_btn = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH, '//button[text()="Next"]')))
        # 滚动到按钮位置点击
        ActionChains(driver).move_to_element(next_btn).click(next_btn).perform()
        # 等待页面内容更新:第一条数据发生变化
        WebDriverWait(driver, 10).until_not(
            EC.text_to_be_present_in_element((By.CSS_SELECTOR, '.locator-result-item'), pre_first_item)
        )
    except Exception as e:
        loop = False
        print(e, f"翻页终止,当前页面:{driver.current_url}")
    else:
        # 直接拿当前渲染好的页面源码解析
        current_page_source = driver.page_source
        get_page_content(current_page_source)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:57:02