在使用 Selenium 抓取网页或做自动化测试时,经常会遇到“懒加载”页面:页面初始只加载一部分内容,滚动到一定位置才会加载更多数据。本文总结几种实用的滚动与懒加载处理方法。


🚧 常见问题

  • 页面刚打开时并未加载完整内容,Selenium 获取不到后面部分元素
  • 模拟用户滚动行为可触发内容加载,但滚动过快/过少都可能失败
  • 有些页面采用瀑布流(无限滚动),需要持续滚动到底部直到加载完

🛠 方法一:执行 JavaScript 滚动到底部

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

driver = webdriver.Chrome()
driver.get("https://example.com")

# 滚动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)  # 等待内容加载

# 获取懒加载后的元素
items = driver.find_elements(By.CLASS_NAME, "lazy-item")
print(f"共获取到 {len(items)} 个元素")

🛠 方法二:增量滚动,适用于无限加载场景

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

🛠 方法三:滚动到指定元素

target = driver.find_element(By.XPATH, "//div[@id='load-more']")
driver.execute_script("arguments[0].scrollIntoView();", target)
time.sleep(2)

🧼 小结

技术 应用场景
scrollTo 快速滚动页面到底部
scrollIntoView 精准滚动到目标元素
增量滚动 + 高度判断 无限滚动懒加载页面
  • 滚动后记得 time.sleep() 等待加载
  • 使用 WebDriverWait 等方式判断是否加载完也很重要(后续会专门写等待机制)

欢迎评论交流 👇
如果你遇到某些懒加载页面仍抓不到内容,也可以发链接给我分析~

添加微信