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

如何用Selenium实现滚动加载时仅抓取新增元素?

仅抓取滚动加载列表中每次新增元素的实现方案

针对滚动加载的动态列表,要实现每次仅抓取新增元素而非重复获取全部已加载内容,这里提供两种实用方案:

方法一:基于已抓取计数的增量获取

核心思路是记录每次滚动前已抓取的元素总数,滚动后只截取超出之前计数的新增部分,简单直接,适合无元素唯一标识的场景。

代码示例(Python + Selenium):

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

driver = webdriver.Chrome()
driver.get("你的目标页面URL")

element_list = []
previous_count = 0

while True:
    # 获取当前所有已加载的目标元素
    all_div = driver.find_elements(By.PARTIAL_LINK_TEXT, '')
    # 提取新增元素:仅取超出之前计数的部分
    new_elements = all_div[previous_count:]
    
    if not new_elements:
        # 无新增元素,说明已滚动到列表末尾
        break
    
    element_list.extend(new_elements)
    # 更新已抓取元素的计数
    previous_count = len(all_div)
    
    # 滚动到最后一个元素触发加载
    last_element = all_div[-1]
    ActionChains(driver).move_to_element(last_element).perform()
    
    # 用显式等待替代固定sleep,更高效
    try:
        WebDriverWait(driver, 10).until(
            lambda d: len(d.find_elements(By.PARTIAL_LINK_TEXT, '')) > previous_count
        )
    except:
        # 超时则判定无新元素,终止循环
        break

driver.quit()

方法二:基于元素唯一标识的去重获取

如果列表元素有唯一属性(如id、data-id、href等),可以维护一个已抓取标识的集合,过滤掉重复元素,这种方式更可靠,适合元素顺序可能变动的场景。

代码示例:

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

driver = webdriver.Chrome()
driver.get("你的目标页面URL")

element_list = []
captured_unique_ids = set()

while True:
    all_div = driver.find_elements(By.PARTIAL_LINK_TEXT, '')
    new_elements = []
    
    for elem in all_div:
        # 替换成元素实际的唯一属性,比如data-id、href等
        elem_unique_id = elem.get_attribute("data-id")
        if elem_unique_id not in captured_unique_ids:
            captured_unique_ids.add(elem_unique_id)
            new_elements.append(elem)
    
    if not new_elements:
        break
    
    element_list.extend(new_elements)
    
    # 滚动触发加载
    last_element = all_div[-1]
    ActionChains(driver).move_to_element(last_element).perform()
    
    try:
        WebDriverWait(driver, 10).until(
            lambda d: len(d.find_elements(By.PARTIAL_LINK_TEXT, '')) > len(captured_unique_ids)
        )
    except:
        break

driver.quit()

额外注意点

  • 滚动方式:如果move_to_element无效,可以改用driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")滚动到页面底部,具体根据页面加载逻辑调整。
  • 终止条件:除了判断无新增元素,还可以检查页面是否出现“已加载全部”这类提示元素,终止循环会更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:27