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进行同期群分析(Cohort Analysis)

    使用Python进行同期群分析(Cohort Analysis)

    同期群(Cohort)的字面意思(有共同特点或举止类同的)一群人,比如不同性别,不同年龄。这篇文章主要介绍了用Python语言来进行同期群分析,感兴趣的同学可以阅读参考一下本文
    2023-03-03
  • Django 模板中常用的过滤器实现

    Django 模板中常用的过滤器实现

    在模版中,有时候需要对一些数据进行处理以后才能使用。一般在Python中我们是通过函数的形式来完成的。而在模版中,则是通过过滤器来实现的,本文就来介绍一下如何实现
    2021-05-05
  • pandas筛选数值列和非数值列方式

    pandas筛选数值列和非数值列方式

    这篇文章主要介绍了pandas筛选数值列和非数值列方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • OpenCV学习方框滤波实现图像处理代码示例

    OpenCV学习方框滤波实现图像处理代码示例

    这篇文章主要为大家介绍了OpenCV学习如何使用方框滤波实现对图像处理代码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • python实现顺序表的简单代码

    python实现顺序表的简单代码

    这篇文章主要为大家详细介绍了顺序表定义及python实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • python 字典 setdefault()和get()方法比较详解

    python 字典 setdefault()和get()方法比较详解

    这篇文章主要介绍了python 字典 setdefault()和get()方法比较详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python实现单项链表的最全教程

    Python实现单项链表的最全教程

    单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域,这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值,这篇文章主要介绍了Python实现单项链表,需要的朋友可以参考下
    2023-01-01
  • PyTorch清理CPU缓存的实现步骤

    PyTorch清理CPU缓存的实现步骤

    在使用PyTorch进行深度学习时,频繁的数据和计算可能导致CPU缓存满载,影响性能和内存使用,适时清理CPU缓存有助于管理内存占用,下面就来介绍一下如何使用
    2024-09-09
  • python数据可视化plt库实例详解

    python数据可视化plt库实例详解

    这篇文章主要介绍了python可视化数据plt库实例,下面使用pycharm环境给大家详细介绍,文中提到jupyter和pycharm环境的差别,需要的朋友可以参考下
    2021-06-06
  • Python Matplotlib绘制动图平滑曲线

    Python Matplotlib绘制动图平滑曲线

    这篇文章主要介绍了Python Matplotlib绘制动图平滑曲线,文章围绕主题展开详细的内容介绍,具有一定的参考一下,需要的小伙伴可以参考一下
    2022-08-08

最新评论