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

使用Selenium爬取欧盟资助机会页面时持续返回首页求助

解决欧盟资助机会页面翻页重复提取第一页的问题

问题根源分析

这个网站的分页逻辑不依赖URL参数直接生效,大概率是前端路由拦截了URL参数修改,或是需要依赖页面内的会话状态(比如特定Cookie、JS生成的令牌)才能加载对应页码内容。手动改URL跳回首页就是明确信号——页面真实分页由前端JS控制,而非直接读取URL参数。

具体解决方案

1. 强制等待翻页后页面加载完成

点击翻页按钮后,不要立刻提取数据,必须等待新页面的标志性元素加载完成(比如页码指示器变化、列表项内容更新),避免Selenium还没等到新数据就抓取旧内容。

示例代码片段:

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

# 点击下一页按钮
next_btn = driver.find_element(By.CSS_SELECTOR, "button.pagination-next")
next_btn.click()

# 等待页码更新(假设当前页码元素class为current-page)
WebDriverWait(driver, 10).until(
    EC.text_to_be_present_in_element(
        (By.CSS_SELECTOR, "span.current-page"), "2"  # 对应目标页码
    )
)

# 此时再提取页面数据
extract_page_data(driver)

2. 模拟真实用户的翻页交互

不要直接修改URL,完全模拟用户点击翻页按钮的操作,且每次操作前加入1-3秒的随机延迟,避免触发反爬机制:

import time
import random

for page in range(1, 11):  # 覆盖10页数据
    # 提取当前页数据
    extract_page_data(driver)
    
    if page < 10:
        # 随机延迟模拟用户操作间隔
        time.sleep(random.uniform(1, 3))
        # 点击未禁用的下一页按钮
        next_btn = driver.find_element(By.CSS_SELECTOR, "button.pagination-next:not([disabled])")
        next_btn.click()
        # 等待列表内容更新(等待首个列表项失效,即新内容加载)
        WebDriverWait(driver, 10).until(
            EC.staleness_of(driver.find_element(By.CSS_SELECTOR, "div.opportunity-item:first-child"))
        )

3. 保留会话并处理Cookie

确保Selenium浏览器实例全程保持同一个会话,不要每次请求重新打开浏览器。另外,先接受网站的Cookie政策,部分网站会限制未接受Cookie用户的分页功能:

# 初始化浏览器后先处理Cookie
cookie_accept_btn = driver.find_element(By.CSS_SELECTOR, "button#cookie-accept")
cookie_accept_btn.click()

# 之后再执行分页操作

4. 验证翻页是否成功

每次翻页后,抓取页面唯一标识内容(比如首个资助项目的标题),和上一页的标识对比,若相同则说明翻页失败,需重新点击或刷新重试:

prev_first_title = ""
for page in range(1, 11):
    current_first_title = driver.find_element(By.CSS_SELECTOR, "div.opportunity-title").text
    if current_first_title == prev_first_title:
        # 翻页失败,重新点击并等待
        next_btn.click()
        time.sleep(2)
        current_first_title = driver.find_element(By.CSS_SELECTOR, "div.opportunity-title").text
    
    # 提取当前页数据
    extract_page_data(driver)
    prev_first_title = current_first_title

关键注意事项

  • 不要频繁快速点击翻页,否则会触发网站反爬限制,导致页面无法加载新数据。
  • 若翻页按钮点击无反应,检查元素是否正确(页面可能动态渲染按钮,需用WebDriverWait等待按钮可见)。
  • 部分网站分页时会显示加载动画,必须等待动画结束后再提取数据。

内容的提问来源于stack exchange,提问作者Oregon.Vlogrago

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:00:07