Python 将网页保存为图片(Chrome内核)

一、背景介绍

之前写过一篇将网页保存为图片的文章《C# 将网页保存为图片(利用WebBrowser)_c# webbrowser 把网页内容转换成图片-CSDN博客​​​​​​》这里有个弊端,C# WebBrowser使用的是IE内核,目前很多网站都不支持IE了,所以需要找新的方案替代。

二、Python实现

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

第1步:安装Python环境。

如未安装,请参考1.OpenCV 运行环境配置(Python)_python配置opencv-CSDN博客

第2步:安装Selenium库。

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

打开windows命令行工具,输入以下命令:pip install selenium pillow

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

使用Selenium需要一个WebDriver,比如ChromeDriver。你可以从这里下载与你的Chrome浏览器版本相匹配的ChromeDriver。
d52c641d68cf463f9ef14d738903e80d.jpeg

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

c2946025fa654e30b1cb9b5f746a1e77.jpeg

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

09c2bfe829064fcca7e3322ac56412d2.jpeg

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()

发表评论

称呼 *
联系方式 * 方便与您联系,不会对外显示。
内容
验证码