这篇是写给“点下一页点到吐”的自己。

在做自动化的时候,特别是爬数据或批量操作的后台页面,基本都会遇到分页这种结构,一页十条、五十条,每次还要点“下一页”才能看到更多。

之前我为了偷懒,可能只点了前几页就不管了,但后来业务要求拉全量数据,不得不写一个稳定的“分页遍历”逻辑,这里记录一下我的处理方式。


一、目标:点“下一页”直到没有下一页

核心逻辑其实很简单:

  1. 一开始处理第一页内容
  2. 如果有“下一页”按钮,就点击
  3. 然后继续处理
  4. 直到“下一页”按钮不可点击 or 消失

二、示例页面结构

假设分页按钮长这样:

<a class="next-page" href="javascript:void(0)">下一页</a>

而最后一页时,会变成:

<a class="next-page disabled" href="#">下一页</a>

或者干脆 <a> 就不渲染了。需要代码去“感知”这些状态变化。


三、代码实现(稳定通用的分页逻辑)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException
import time

driver = webdriver.Chrome()
driver.get("https://example.com")

while True:
    # 处理当前页内容
    items = driver.find_elements(By.CSS_SELECTOR, ".data-row")
    print(f"当前页抓取到 {len(items)} 条记录")
    for item in items:
        print(item.text)

    # 尝试找“下一页”
    try:
        next_button = driver.find_element(By.CSS_SELECTOR, ".next-page")
        # 如果按钮有 disabled 状态,就跳出
        if "disabled" in next_button.get_attribute("class"):
            print("到最后一页了,停止分页")
            break
        else:
            print("点击下一页")
            next_button.click()
            time.sleep(1.5)  # 简单粗暴的等待,可替换成 WebDriverWait
    except NoSuchElementException:
        print("找不到下一页按钮,直接退出")
        break
    except ElementClickInterceptedException:
        print("下一页按钮被遮挡了,建议滚动或等待")
        break

四、一些建议(踩坑总结)

  • 判断方式要灵活:有些页面“下一页”会隐藏、有些会变灰、有些干脆移除。尽量写成“能跳就跳,不能就停”。
  • 避免死循环:比如点击后页面没变,反复点击同一页 → 可以记录当前页码防止重复。
  • 配合显式等待更稳:别像我上面偷懒用 time.sleep,正式环境最好用 WebDriverWait 检查分页完成再下一步。
  • 如果是 JS 渲染分页:点完下一页要等内容加载完才能继续抓,不然你抓的是上一次的内容。

五、总结

处理分页的核心就是“知道什么时候该停”,不要盲目死循环。这个逻辑写好之后几乎能适配大多数普通分页场景。

当然还有更复杂的,比如滚动加载下一页(不是按钮)那种,那就又是另一种处理方式了,回头单独写一篇。


添加微信