Selenium解决网页懒加载与滚动加载问题的两种方案

Oliver
Oliver
发布时间:2026-10-13| 5人浏览过
原创

本文介绍Selenium处理网页内容需滚动加载的两种方法:调整浏览器窗口高度延时加载,以及模拟下拉滚动操作。针对懒加载特性,强调page_source仅包含已加载内容,需通过模拟滚动触发加载。提示网速慢时需增加等待时间,确保获取完整HTML后再执行翻页或元素定位操作。

Selenium处理滚动加载问题的背景

在使用Selenium进行网页爬取时,常遇到一种情况:网页内容并非一次性全部加载,而是需要用户滚动鼠标才能加载剩余部分。若此时直接尝试模拟翻页或定位元素,往往因内容未完全加载而找不到目标,导致报错。

针对这一常见问题,本文提供两种可行的解决思路供参考。

方法一:调整浏览器窗口高度

第一种方法是通过Selenium控制浏览器,将浏览器窗口的高度设置为一个足够大的数值,随后设置适当的延时,等待页面内容全部加载完成。

调整窗口高度代码示例


import time
from selenium import webdriver
driver = webdriver.Firefox()
driver.set_window_size(1000,30000)
driver.get(url)
time.sleep(5)

方法二:模拟浏览器下拉滚动

第二种方法则是通过Selenium模拟浏览器的下拉滚动操作,逐步触发页面的动态加载。

模拟滚动操作代码示例


from selenium import webdriver
import time
browser.execute_script("window.scrollBy(0,3000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,5000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,8000)")
time.sleep(1)

懒加载与page_source获取技巧

补充说明:关于如何实现懒加载页面滚动至底部,使page_source一次性包含全部网页内容的技术细节。

部分网站采用懒加载技术,即只有当浏览器纵向滚动条滚动到特定位置时,对应的页面元素才会被动态加载出来。

需要注意的是,在内容加载完成之前,Selenium获取的page_source并不包含那些尚未加载的元素,它仅反映当前已渲染在视口内的页面内容。

因此,要实现加载全部内容,必须模拟人类滚动滚动条的行为,从而触发页面的动态加载机制。

滚动直至加载完成的实现代码


from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
 
  def scroll_until_loaded(self):
    check_height = self.browser.execute_script("return document.body.scrollHeight;")
    while True:
      self.browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
      try:
        self.wait.until(lambda driver: self.browser.execute_script("return document.body.scrollHeight;") > check_height)
        check_height = self.browser.execute_script("return document.body.scrollHeight;")
      except TimeoutException:
        break

此外,懒加载机制并非始终有效。当网络状况不佳时,若加载时间超过设定的wait()等待时间,程序会误判为加载已完成,此时page_source中仍只包含之前已加载的部分代码。因此,在执行翻页操作后,建议增加time.sleep(3)等等待语句,确保网页充分加载并更新HTML后,再获取网页源代码。

以上关于Selenium应对网页滚动加载问题的探讨即为全部分享内容,希望能对读者有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。