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

如何用Selenium实现带Load More按钮的网页数据爬取?

解决Paginegialle.it无限加载数据的抓取逻辑

核心思路是循环检查「Load More」按钮是否存在且可点击,存在则点击并等待新数据加载,重复直到按钮消失,同时每次加载完成后抓取当前页面的所有数据。

关键代码实现

假设你已有初始化Selenium Driver和抓取单页数据的函数(比如extract_page_data()),可以按以下逻辑扩展:

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.common.exceptions import TimeoutException
import random
import time

# 初始化driver(你的已有代码)
# driver = webdriver.Chrome(...)
# 导航到目标查询页面(你的已有代码)
# driver.get("你的查询URL")

all_data = []

while True:
    # 抓取当前页面的所有数据
    current_data = extract_page_data(driver)
    all_data.extend(current_data)

    try:
        # 等待Load More按钮出现并可点击,超时设为10秒
        load_more_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Load More')]"))
        )
        # 用JS点击避免按钮被遮挡的问题
        driver.execute_script("arguments[0].click();", load_more_btn)
        # 等待新数据加载完成(替换为页面新增结果的元素选择器)
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".new-result-item"))
        )
        # 随机延迟避免反爬
        time.sleep(random.uniform(1, 3))
    except TimeoutException:
        # 超时说明按钮不存在或无法点击,退出循环
        break

# 处理并保存所有数据
# save_to_file(all_data)

注意事项

  • 替换"//button[contains(text(), 'Load More')]"为页面实际的按钮选择器(用浏览器开发者工具查看)
  • 替换".new-result-item"为每次加载后新增结果的元素选择器,确保等待逻辑准确
  • 若页面加载无明显元素变化,可临时用time.sleep(2)替代显式等待(不推荐长期使用)
  • 频繁操作可能触发反爬,建议添加随机延迟和请求头伪装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:12:44