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

Python Selenium网页指定区域滚动受限,如何实现滚动到底部?

解决Selenium滚动到页面底部(仅滚动到350条数据的问题)

常见原因及对应解决方案

1. 替换元素定位滚动逻辑,直接操作页面/滚动容器

如果之前依赖指定元素分段滚动,可能该元素在350条数据后加载逻辑变化或定位失效,可改为直接操作页面或独立滚动容器:

  • 针对整个页面滚动:
    import time
    
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 滚动至当前页面底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 等待懒加载内容加载,可根据页面实际加载速度调整时长
        time.sleep(2)
        # 获取新的页面高度
        new_height = driver.execute_script("return document.body.scrollHeight")
        # 高度不再变化说明已到底部
        if new_height == last_height:
            break
        last_height = new_height
    
  • 针对独立滚动容器(如带滚动条的div):
    import time
    from selenium.webdriver.common.by import By
    
    scroll_container = driver.find_element(By.CSS_SELECTOR, "替换为你的滚动容器CSS选择器")
    last_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container)
    while True:
        driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
        time.sleep(2)
        new_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container)
        if new_height == last_height:
            break
        last_height = new_height
    

2. 用显式等待替代固定sleep,确保内容加载完成

固定sleep时长可能不足以让页面加载完350条后的内容,改用显式等待检测新元素加载:

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

scroll_container = driver.find_element(By.CSS_SELECTOR, "替换为你的滚动容器CSS选择器")
while True:
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
    try:
        # 等待最新一条数据加载完成,替换为你的数据项选择器
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".data-item:last-child"))
        )
    except TimeoutException:
        # 超时无新元素,说明已滚动到底部
        break

3. 模拟真实用户滚动频率,规避页面限制

部分页面会限制滚动速度,可改为分段小距离滚动:

from selenium.webdriver.common.by import By
import time

total_target = 500  # 已知目标数据条数
scroll_container = driver.find_element(By.CSS_SELECTOR, "替换为你的滚动容器CSS选择器")

while len(driver.find_elements(By.CSS_SELECTOR, ".data-item")) < total_target:
    # 每次滚动500px,模拟用户滚动行为
    driver.execute_script("arguments[0].scrollTop += 500", scroll_container)
    time.sleep(1)  # 降低滚动频率

4. 验证元素选择器的有效性

检查350条数据之后的元素结构是否和之前一致,部分页面滚动到一定位置后会改变数据项的HTML结构,导致原有选择器无法定位新数据。可通过浏览器开发者工具直接查看后续数据的元素属性,调整选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:30:44