在使用 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
等方式判断是否加载完也很重要(后续会专门写等待机制)
欢迎评论交流 👇
如果你遇到某些懒加载页面仍抓不到内容,也可以发链接给我分析~