You need to enable JavaScript to run this app. 如何使用Python Selenium实现网页分页跳转至下一页
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Selenium实现网页分页跳转至下一页

Selenium 实现eBay分类列表自动分页爬取的实现方案

核心实现思路

分页爬取的循环逻辑非常明确,重复执行三个固定操作直到触发停止条件即可:

  • 提取当前页面的所有目标商品链接,统一存储
  • 定位页面底部的「下一页」交互按钮
  • 点击下一页按钮,等待新页面的商品列表完全加载,进入下一轮循环

原有代码的可优化问题

  • 代码中使用的find_elements_by_xpath是Selenium 3.x版本的旧定位API,Selenium 4.x及以上版本已将该方法弃用,直接运行会报属性不存在的错误,需要替换为find_element(By.XPATH, "定位规则")的标准定位写法。
  • 代码中用固定time.sleep(0.5)等待页面加载的方式稳定性不足:遇到网络波动、页面渲染延迟的场景,会出现商品元素还没加载完成就被抓取的情况,要么抓不全数据,要么直接触发元素找不到的报错。

可直接运行的完整分页爬取代码

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

# 初始化Chrome驱动,可按需配置无头模式、窗口大小、反爬参数等
driver = webdriver.Chrome()
# 配置最长10秒的显式等待,元素超过10秒未加载完成则触发异常
wait = WebDriverWait(driver, 10)

# 初始化存储所有商品链接的列表
all_item_links = []

# 访问目标分类列表页
driver.get('https://www.ebay.co.uk/b/Cordless-Drills/184655/bn_9863722?rt=nc&_dmd=1')

# 循环爬取直到无下一页
while True:
    # 等待当前页所有商品链接元素加载完成
    item_link_elements = wait.until(
        EC.presence_of_all_elements_located((By.XPATH, '//div[@class="s-item__wrapper clearfix"]//a[@class="s-item__link"]'))
    )
    # 提取当前页链接,去重后存入总列表
    for elem in item_link_elements:
        target_link = elem.get_attribute('href')
        if target_link not in all_item_links:
            all_item_links.append(target_link)
            print(f"已提取链接:{target_link}")
    
    try:
        # 定位下一页按钮(eBay分类页下一页按钮的固定标识为aria-label="Go to next page")
        next_page_btn = wait.until(
            EC.element_to_be_clickable((By.XPATH, '//a[@aria-label="Go to next page"]'))
        )
        # 触发下一页点击
        next_page_btn.click()
        # 等待旧页面元素失效,确认页面已完成跳转
        wait.until(EC.staleness_of(item_link_elements[0]))
    except Exception:
        # 当找不到可点击的下一页按钮时,说明已到达最后一页,跳出循环
        print("已到达列表最后一页,爬取流程结束")
        break

# 爬取完成后关闭驱动
driver.quit()
print(f"本次共提取{len(all_item_links)}个有效商品链接")

关键逻辑说明

  • 显式等待替代固定sleep:只有当目标元素真正加载完成、满足交互条件时才执行后续操作,大幅降低因网络波动、页面渲染慢导致的报错概率,比固定时长的等待稳定很多。
  • 循环停止的判断逻辑:列表到最后一页时,分页区域的下一页按钮会被设置为不可点击状态,此时判断按钮可点击的等待条件无法满足,捕获对应异常后直接跳出循环,不会出现死循环的问题。
  • 重复数据过滤:跳转页面时可能因页面缓存出现重复加载旧链接的问题,在存入总列表前做去重判断,避免最终结果里出现重复数据。
  • 可灵活调整爬取范围:如果不需要爬完所有页面,可以在循环中加入页数计数,达到预设的爬取页数上限后主动break,无需一直爬到最后一页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 03:54:03