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

使用Selenium Python实现网页全元素加载的无限滚动问题

滚动加载所有元素的修复方案

你的代码在前期能正常运行,但后续失效的核心原因是依赖document.body.scrollHeight判断加载完成的逻辑不适用该网站——bigbasket的商品列表嵌套在独立滚动容器内,而非直接基于body滚动;同时仅等待"显示更多"按钮可点击的条件不够严谨,容易出现误判。

以下是针对性的修复方案:

1. 定位正确的滚动容器

先找到商品列表所在的滚动容器(而非整个body),通过该容器的滚动高度变化判断内容加载情况。以bigbasket为例,商品列表通常在类名包含products-container的容器内(可通过浏览器开发者工具确认):

# 定位商品列表容器
container = driver.find_element(By.XPATH, "//div[contains(@class, 'products-container')]")

2. 修改循环逻辑与等待条件

  • 滚动目标改为容器内部,而非window
  • 同时等待新内容加载完成(通过商品数量变化验证)
  • 处理"显示更多"按钮消失的情况(无更多内容时按钮会隐藏)

修改后的完整代码:

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

driver.get('https://www.bigbasket.com/ps/?q=rice')
wait = WebDriverWait(driver, 10)

# 定位商品列表容器
container = wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'products-container')]")))

# 初始化商品数量
prev_item_count = len(driver.find_elements(By.XPATH, "//div[contains(@class, 'product-card')]"))

while True:
    # 滚动容器到底部
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", container)
    
    try:
        # 等待"显示更多"按钮可点击并点击
        show_more_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='show-more']/button")))
        show_more_btn.click()
        
        # 等待新商品加载(等待商品数量增加)
        wait.until(lambda d: len(d.find_elements(By.XPATH, "//div[contains(@class, 'product-card')]")) > prev_item_count)
        prev_item_count = len(driver.find_elements(By.XPATH, "//div[contains(@class, 'product-card')]"))
        
        # 短暂等待容器滚动高度更新
        time.sleep(1)
        
    except:
        # 按钮不存在或无法点击,说明已加载完所有内容
        break

3. 关键优化点说明

  • 滚动容器定位:避免了body滚动高度不更新的问题,精准针对商品列表区域
  • 双条件验证:同时检查按钮状态和商品数量变化,确保新内容确实加载完成
  • 异常捕获:处理无更多内容时按钮消失的场景,避免循环卡死

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:24