Python使用Selenium将网页保存为图片或PDF

 更新时间:2026年02月09日 09:27:00   作者:清山博客  
这篇文章主要为大家详细介绍了Python如何使用Selenium配合Pillow实现将网页保存为图片或PDF,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

一、背景介绍

之前写过一篇将网页保存为图片的文章

C#利用WebBrowser将网页保存为图片

这里有个弊端,C# WebBrowser使用的是IE内核,目前很多网站都不支持IE了,所以需要找新的方案替代。 

二、Python实现

在Python中,一个常见的选择是使用Selenium配合Pillow将网页保存为图片。

第1步:安装Python环境。

如未安装,请参考从安装到应用全面掌握Python与OpenCV的配置与高级功能(最新推荐)

第2步:安装Selenium库。

如果你还没有安装它们,可以使用pip来安装:

打开windows命令行工具,输入以下命令:

pip install selenium pillow

第3步:下载Chrome浏览器、ChromeDriver

使用Selenium需要一个WebDriver,比如ChromeDriver。

注意:下载的ChromeDriver需与使用的Chrome浏览器版本保持一致。

下载完后,报存到电脑任一目录即可,如:

ChromeDriver官方下载地址可能打不开,可以使用华为提供的镜像。

Index of chromedriver-local 各个版本都有,找到与自己Chrome的版本一致,下载即可。

第4步:编写代码将网页保存为图片

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from PIL import Image
import io

# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式,不打开浏览器窗口
chrome_options.add_argument("--disable-gpu")

# 指定ChromeDriver的路径
service = Service(executable_path='C:\\chromedriver-win64\\chromedriver.exe')

# 创建WebDriver对象
driver = webdriver.Chrome(service=service, options=chrome_options)

# 访问目标网页
driver.get('https://blog.csdn.net/a497785609')

# 获取页面的实际高度和宽度
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")

# 设置窗口大小
driver.set_window_size(width, height)

# 截图并保存
driver.save_screenshot('C:\\chromedriver-win64\\screenshot.png')

# 使用Pillow处理图像(可选)
image = Image.open(io.BytesIO(driver.get_screenshot_as_png()))
image.show()

# 关闭浏览器
driver.quit()

至此,使用Python+Chrome即可将网页保存为图片了。

第5步:将网页保存为PDF

使用ChromeDriver+DevTools,可以将网页保存为PDF。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from PIL import Image
import io
import base64

# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式,不打开浏览器窗口
chrome_options.add_argument("--disable-gpu")

# ChromeDriver路径
ChromeDriver = 'C:\\chromedriver-win64\\chromedriver.exe'

# 访问目标网页
url = 'https://blog.csdn.net/a497785609'

# 保存PDF文件的路径
file_name = "C:\\test.pdf"

# 指定ChromeDriver的路径
service = Service(executable_path=ChromeDriver)

# 创建WebDriver对象
driver = webdriver.Chrome(service=service, options=chrome_options)

# 访问目标网页
driver.get(url)

# 获取页面的实际高度和宽度
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")

# 设置窗口大小
driver.set_window_size(width, height)

# 【打印为PDF】
# 调用 Chrome DevTools 的 printToPDF 方法,打印参数参考:https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
pdf_data = driver.execute_cdp_cmd("Page.printToPDF", {"landscape": False,
                                                      "displayHeaderFooter": False,
                                                      "printBackground": False,
                                                      "scale": 1.0,                # 必须是 float
                                                      "paperWidth": 8.5,           # A4纸宽度(英寸)
                                                      "paperHeight": 11.0,         # A4纸高度(英寸)
                                                      "marginTop": 0.5,
                                                      "marginBottom": 0.5,
                                                      "marginLeft": 0.5,
                                                      "marginRight": 0.5})
# 解码并写入 PDF 文件
with open(file_name, "wb") as f:
    f.write(base64.b64decode(pdf_data['data']))

print(" 已保存到文件:"+file_name)

# 关闭浏览器
driver.quit()

到此这篇关于Python使用Selenium将网页保存为图片或PDF的文章就介绍到这了,更多相关Python网页保存为图片或PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现的弹球小游戏示例

    Python实现的弹球小游戏示例

    这篇文章主要介绍了Python实现的弹球小游戏,可实现类似乒乓球游戏的键盘控制底部挡板移动碰撞小球的游戏功能,需要的朋友可以参考下
    2017-08-08
  • python文件操作seek()偏移量,读取指正到指定位置操作

    python文件操作seek()偏移量,读取指正到指定位置操作

    这篇文章主要介绍了python文件操作seek()偏移量,读取指正到指定位置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 一文详解如何在Python中使用Requests库

    一文详解如何在Python中使用Requests库

    这篇文章主要介绍了如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发送和响应处理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • pycharm中jupyter的使用图文教程

    pycharm中jupyter的使用图文教程

    这篇文章主要介绍了pycharm中jupyter的使用图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python轻松查找文本文件最热门单词技巧

    Python轻松查找文本文件最热门单词技巧

    本文将从文件读取、文本预处理到单词频率统计,以及性能优化和数据可视化等方面逐步展开,为你呈现一场深入学习的旅程,让我们一同探索如何用代码揭示文字中的故事,发现其中隐藏的信息,从而更好地理解和利用这个数字化时代的宝藏
    2024-01-01
  • Python数据处理之pd.Series()函数的基本使用

    Python数据处理之pd.Series()函数的基本使用

    Series是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据,轴标签统称为索引,下面这篇文章主要给大家介绍了关于Python数据处理之pd.Series()函数的基本使用,需要的朋友可以参考下
    2022-06-06
  • python regex库实例用法总结

    python regex库实例用法总结

    在本篇内容里小编给大家整理了关于python regex库实例用法总结内容,有需要的朋友们参考学习下。
    2021-01-01
  • python一行代码合并了162个Word文件

    python一行代码合并了162个Word文件

    这篇文章主要为大家介绍了python一行代码合并了162个Word文件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python基于tkinter点击按钮实现图片的切换

    python基于tkinter点击按钮实现图片的切换

    这篇文章主要介绍了python基于tkinter点击按钮实现图片的切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python数组复制拷贝的实现方法

    python数组复制拷贝的实现方法

    这篇文章主要介绍了python数组复制拷贝的实现方法,实例分析了Python数组传地址与传值两种复制拷贝的使用技巧,需要的朋友可以参考下
    2015-06-06

最新评论