Python实现获取网站或网页的快照的示例代码

 更新时间:2025年02月14日 09:23:42   作者:psonh  
本文主要介绍了Python实现获取网站或网页的快照的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、python获取快照的实现原理与背景

1.1、网站快照需求背景

在现代Web开发和数据分析中,获取网页快照是一项常见的需求。无论是为了记录网页状态、进行视觉回归测试,还是生成网页预览图,网页快照都是一种非常有用的工具。

1.2、实现原理

网页快照的本质就是把浏览器里显示的网页内容“拍个照片”,保存成图片文件。Selenium实现这个功能的过程可以分为几步:

1.2.1、启动浏览器

利用程序启动一个真实的浏览器(比如Chrome、Firefox),就像你双击桌面上的浏览器图标一样。只不过这个浏览器是由程序控制的,你看不到它的界面(除非你特意让它显示出来)。此处推荐使用Selenium实现。

1.2.2、 加载网页

 Selenium会让浏览器打开你指定的网页链接(比如https://www.example.com)。浏览器会像平常一样加载网页内容,包括HTML、CSS、图片、JavaScript等。

1.2.3、等待页面加载完成

现代网页很多内容是动态加载的,比如通过JavaScript从服务器获取数据,然后显示在页面上。Selenium会等待这些内容加载完成,确保页面是“完整的”。

1.2.4、截图

当页面加载完成后,Selenium会调用浏览器的截图功能,把当前浏览器窗口里显示的内容保存成一张图片(通常是PNG格式)。

1.2.5、 关闭浏览器

截图完成后,Selenium会关闭浏览器,释放资源。

二、实现步骤以及环境需求

1、环境需求

首先,确保你已经安装了Selenium库。如果尚未安装,可以通过以下命令进行安装:

pip install selenium

此外,你还需要下载与浏览器版本匹配的浏览器驱动。例如,如果你使用的是Chrome浏览器,可以下载ChromeDriver。将下载的驱动文件路径添加到系统环境变量中,或者在代码中显式指定路径。

1、部分老版本的Chrome浏览器可使用下面的链接下载对应版本的驱动文件
https://chromedriver.storage.googleapis.com/index.html
2、较新的版本可使用下面的链接下载对应的驱动文件
https://googlechromelabs.github.io/chrome-for-testing/

2、编写代码

以下是完整的Python代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time

chrome_options = Options()
plugins_path = "/Users/usernmae/Desktop/json.la/4.11.1_0.crx"
chrome_options.add_extension(plugins_path)  # 添加插件
chrome_options.add_experimental_option("detach", True)  # 浏览器窗口在脚本运行完后保持打开
chrome_options.page_load_strategy = 'none'  # 不等待页面完全加载
chrome_options.add_argument("--headless")  # 无界面模式
chrome_options.add_argument(
    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")
driver_path = '/usr/local/bin/chromedriver'  # 指定ChromeDriver的路径
service = Service(executable_path=driver_path)  # 初始化Service对象
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.maximize_window()
time.sleep(2)  # 等待插件加载完毕
# 打开网页
url = "https://www.baidu.com"
driver.get(url)
# 防止页面加载不完全(具体可根据需要调整等待时间)
time.sleep(4)  
# 获取网页快照并保存为图片
driver.save_screenshot("test.png")
# 关闭浏览器
driver.quit()

三、核心代码说明

  • WebDriver初始化通过webdriver.Chrome()创建一个Chrome浏览器实例。你可以根据需要替换为其他浏览器(如Firefox或Edge)。

  • 打开网页使用driver.get(url)方法打开目标网页。该方法会等待页面完全加载后再继续执行后续代码。

  • 等待页面加载由于现代网页通常包含大量动态内容(如JavaScript渲染),我们使用time.sleep()方法等待页面完全加载。如果需要更精确的控制,可以使用Selenium的WebDriverWait功能。

  • 保存快照使用driver.save_screenshot(path)方法将当前网页截图并保存为PNG文件。

  • 资源清理在操作完成后,调用driver.quit()关闭浏览器并释放资源。

四、其他高阶说明

1、 添加浏览器插件

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
plugins_path = "/Users/usernmae/Desktop/json.la/4.11.1_0.crx"
chrome_options.add_extension(plugins_path)  # 添加插件

如以上代码我添加了广告屏蔽插件,添加广告屏蔽插件是为了屏蔽网页中一些乱七八糟的广告,具体插件可根据个人需求添加。

2、调整浏览器窗口大小

设置浏览器窗口最大化

driver.maximize_window()

当然也可以设置具体宽高,代码如下:

driver.set_window_size(1200, 800)  # 设置窗口大小为1200x800像素

3、无头模式

如果你不需要看到浏览器界面,可以使用无头模式(Headless Mode)来运行浏览器,这样可以节省资源并提高效率:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')  # 启用无头模式
driver = webdriver.Chrome(service=service, options=options)

注意:部分站点可能无头模式,可能无法正常获取网页快照,需自己设置浏览器的UA

chrome_options.add_argument(
    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")

四、效果展示

在这里插入图片描述

五、总结

通过Python和Selenium,我们可以轻松实现网页快照的获取。无论是简单的静态网页还是复杂的动态网页,Selenium都能胜任。本文提供的代码示例和技巧可以帮助你快速上手,并根据实际需求进行扩展。如果你对自动化Web操作感兴趣,Selenium无疑是一个值得深入学习的工具。注意:本次教程基于MacOS系统实现,Windows系统可根据自己的具体路径实现。

到此这篇关于Python实现获取网站或网页的快照的示例代码的文章就介绍到这了,更多相关Python 获取网站或网页的快照内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • python爬虫使用scrapy注意事项

    python爬虫使用scrapy注意事项

    在本篇文章里小编给大家整理的是一篇关于python爬虫使用scrapy注意事项的相关文章,对此有兴趣的朋友们可以学习下。
    2020-11-11
  • Python判断字符串与大小写转换

    Python判断字符串与大小写转换

    这篇文章主要介绍了Python判断字符串与大小写转换的方法,有需要的小伙伴可以参考下。
    2015-06-06
  • Matplotlib绘图基础之坐标轴详解

    Matplotlib绘图基础之坐标轴详解

    Matplotlib的坐标轴是用于在绘图中表示数据的位置的工具,也是为了帮助观察者了解图像中数据的位置和大小,下面小编就来和大家详细聊聊Matplotlib绘图时坐标轴的具体使用吧
    2023-07-07
  • 浅析Python与Mongodb数据库之间的操作方法

    浅析Python与Mongodb数据库之间的操作方法

    这篇文章主要介绍了Python与Mongodb数据库之间的操作,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 使用Python创建多栏Word文档

    使用Python创建多栏Word文档

    多栏布局作为一种经典的排版形式,广泛应用于新闻简报,宣传手册和学术论文等场景,本文将深入探讨如何使用 Python 创建多栏 Word 文档,感兴趣的可以了解下
    2024-12-12
  • pyqt5中QThread在使用时出现重复emit的实例

    pyqt5中QThread在使用时出现重复emit的实例

    今天小编就为大家分享一篇pyqt5中QThread在使用时出现重复emit的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python pandera数据验证和清洗的库

    Python pandera数据验证和清洗的库

    为了确保数据的质量,Python Pandera 库应运而生。本文将深入介绍 Python Pandera,这是一个用于数据验证和清洗的库,并提供丰富的示例代码,帮助大家充分利用它来提高数据质量
    2024-01-01
  • Python素数检测实例分析

    Python素数检测实例分析

    这篇文章主要介绍了Python素数检测方法,实例分析了Python判定素数的相关技巧,需要的朋友可以参考下
    2015-06-06
  • python读取图片的方式,以及将图片以三维数组的形式输出方法

    python读取图片的方式,以及将图片以三维数组的形式输出方法

    今天小编就为大家分享一篇python读取图片的方式,以及将图片以三维数组的形式输出方法,具有好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Scala中使用Jsoup库处理HTML文档的案例分析

    Scala中使用Jsoup库处理HTML文档的案例分析

    Scala是一种多范式的编程语言,具有函数式编程和面向对象编程的特点,同时也能够与Java语言完美兼容,它拥有强大的类型推断、高阶函数、模式匹配等特性,使得代码更加简洁、灵活和易于维护,这篇文章主要介绍了Scala中使用Jsoup库处理HTML文档的案例分析,需要的朋友可以参考下
    2024-04-04

最新评论