当前位置: 首页 > article >正文

在Linux系统中将html保存为PNG图片

1 前言

之前使用Pyecharts库在Windows系统中生成图表并转换为PNG格式图片(传送门),现将代码放于Linux服务器上运行,结果发现错误,生成html文件之后无法保存图片。

2 原理

基于Selenium库的保存方案,其原理是使用Chrome浏览器打开html文件,然后在进行截图

3 实现

3.1 环境准备

安装Chrome和Chrome Driver

1 安装 Chrome
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

chromedriver 下载地址:
https://googlechromelabs.github.io/chrome-for-testing/ (推荐,包含最新稳定版)

这里需要下载和Chrome版本一致的Driver

# 下载 chromedriver
# 进入下载目录
cd /tmp# 查看chrome 版本号
google-chrome --version# 在chromedriver下载地址中找到对应版本,下载对应版本chromedriver
# 如
wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/118.0.5993.70/linux64/chromedriver-linux64.zip# 解压
unzip chromedriver-linux64.zip # 赋权
cd chromedriver-linux64
mv chromedriver /usr/local/bin
cd /usr/local/bin
chmod +x chromedriver

3.2 代码

import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Optionsdef split_filepath(filepath):"""此函数用于从文件路径中提取文件名(不含扩展名)。参数:filepath (str): 完整的文件路径返回:str: 文件名(不包含扩展名)"""# 获取目录路径和完整文件名(含扩展名)filename_with_ext = os.path.basename(filepath)# 分离文件名和扩展名filename, ext = os.path.splitext(filename_with_ext)return filenamedef save_as_png(html_file, img_file):"""该函数的作用是将指定的 HTML 文件在浏览器中打开并截图保存为 PNG 图片。参数:html_file (str): 要截图的 HTML 文件的完整路径img_file (str): 保存截图的 PNG 文件的完整路径返回:None"""# chrome-driver 安装路径DRIVER_PATH = "/usr/local/bin"# 浏览器基础配置options = Options()options.add_argument('--no-sandbox')options.add_argument('--headless')  # 无头参数options.add_argument('--disable-gpu')  # 禁用gpu 防止占用资源出现bugoptions.add_argument('window-size=1920x800')  # 设置分窗口辨率options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素可能会报错options.add_argument('--hide-scrollbars')s = Service(DRIVER_PATH)# 启动浏览器driver = webdriver.Chrome(service=s, options=options)# 设置隐式等待时间,在查找元素时最多等待 10 秒driver.implicitly_wait(10)try:# 调用 split_filepath 函数获取 HTML 文件的文件名(不含扩展名)img_name = split_filepath(html_file)# 打印开始截图的提示信息print("开始截图")# 在浏览器中访问指定的 HTML 文件driver.get(f"file://{html_file}")# 对当前页面进行截图并保存为指定的 PNG 文件driver.get_screenshot_as_file(img_file)# 打印完成截图的提示信息print("完成截图")except Exception as e:# 若截图过程中出现异常,打印异常信息print(e)finally:# 关闭当前浏览器窗口driver.close()# 退出浏览器驱动程序,释放资源driver.quit()

这里的重点是driver.get(f"file://{html_file}"),在需要打开的html文件路径前加上file://,否则driver会默认是url,导致超时错误。

3.3 字体

如果在html文件中存在中文的,需要保证Linux安装有中文字体

#查看已安装的字体
#查看已安装的字体
fc-list
#查看已安装的中文字体
fc-list :lang=zh#安装Linux字体程序
yum -y install fontconfig#安装中文字体
#查看服务器是否有:/usr/share/fonts这个目录,如果有,那么看下一步,如果没有,就创建
mkdir -p /usr/share/fonts#引入字体文件
#将准备好的字体放到/usr/share/fonts这个目录#安装字体索引
yum install mkfontscale#生成字体索引,在/usr/share/fonts这个目录执行下面的命令
mkfontscale#第三步验证安装结果
fc-list :lang=zh

4 参考链接
linux下安装 Chrome 和 chromedriver 以及 selenium webdriver 使用

如何给Linux系统安装中文字体

python中使用selenium打开保存在本地的html页面

相关文章:

在Linux系统中将html保存为PNG图片

1 前言 之前使用Pyecharts库在Windows系统中生成图表并转换为PNG格式图片(传送门),现将代码放于Linux服务器上运行,结果发现错误,生成html文件之后无法保存图片。 2 原理 基于Selenium库的保存方案,其原…...

身份验证:区块链如何让用户掌控一切

在网上证明你自称的身份变得越来越复杂。由于日常生活的很多方面现在都在网上进行,保护你的数字身份比以往任何时候都更加重要。 我们可能都接受过安全培训,这些培训鼓励我们选择安全的密码、启用双因素身份验证或回答安全问题,例如“你祖母…...

嵌入式硬件: GPIO与二极管基础知识详解

1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…...

Android HAL 架构详解,底层开发不再难

目录 HAL 基础概念 HAL 是个啥? 为啥要有 HAL? HAL 在系统中的位置 HAL 工作原理 抽象接口:硬件的 “通用语言” 接口的设计思路 核心结构体 版本与兼容性 实例:相机 HAL 接口 模块加载:动态链接的魔法 加载步骤 优化策略 实例:加载音频 HAL 通信机制:HAL…...

游戏引擎学习第194天

为当天的活动做铺垫 正在进行游戏开发中的调试和视图功能开发。目标是增加一些新功能,使得在开发过程中能够有效地检查游戏行为。今天的重点是推进用户界面(UI)的开发,并且尝试在调试变量的管理上找到一个折中的解决方案。计划探…...

js文字两端对齐

目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.text-align: justify; 不就可以了吗?但是实际测试无效 二、原因及解决方法 1.原因:text-align只对非最后一行文字有效。只有一行文字时,text-align无效,要用text-alig…...

经典论文解读系列:MapReduce 论文精读总结:简化大规模集群上的数据处理

🧠 MapReduce 论文解读总结:简化大规模集群上的数据处理 原文标题:MapReduce: Simplified Data Processing on Large Clusters 作者:Jeffrey Dean & Sanjay Ghemawat 发表时间:2004 年 发表机构:Google…...

HarmonyOS 介绍

HarmonyOS简介 随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,全场景多设备的全新底座&am…...

每天一篇目标检测文献(六)——Part One

今天看的是《Object Detection with Deep Learning: A Review》 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 2.1 信息区域选择 2.2 特征提取 2.3 分类 三、深度学习的简要回顾 3.1 历史、诞生、衰落和繁荣 3.2 CNN架构和优势 一、摘要 1.1 原文 Due to object dete…...

ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动

ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动 准备工作在线安装 Windows PowerShell离线安装 Windows PowerShell更新在线更新离线更新 下载 ESXi-Customizer-PS-v2.6.0.ps1安装Python安装pip安装相关插件 下载离线捆绑包下载对应的网卡驱动(如果纯净版可以进去…...

【12】Ajax的原理和解析

一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候,得到的结果可能会和在浏览器中看到的不一样&a…...

双塔模型2之如何选择正确的正负样本

双塔模型:正负样本 选对正负样本的作用 > 改进模型的结构 正样本 什么是正样本?答:曝光且有点击的 “用户-物品” 二元组 存在的问题:存在28法则,即少部分物品(比如热门物品)占大部分点击…...

《八大排序算法》

相关概念 排序:使一串记录,按照其中某个或某些关键字的大小,递增或递减的排列起来。稳定性:它描述了在排序过程中,相等元素的相对顺序是否保持不变。假设在待排序的序列中,有两个元素a和b,它们…...

清晰易懂的Rust安装与配置教程

Rust 是一门以安全性和性能著称的系统级编程语言,适合开发操作系统、游戏引擎和高性能服务。本教程将手把手教你安装 Rust 并配置开发环境,从安装到运行第一个程序,全程无坑! 一、安装 Rust(全平台通用) 1…...

零基础使用AI从0到1开发一个微信小程序

零基础使用AI从0到1开发一个微信小程序 准备操作记录 准备 想多尝试一些新的交互方式,但我没有相关的开发经验,html,JavaScript 等都不了解,看了一些使用AI做微信小程序的视频教程,觉得自己也行…...

基于Spring Boot的社区互助平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

【Elasticsearch入门到落地】10、初始化RestClient

接上篇《9、hotel数据结构分析》 上一篇我们讲解了导入的宾馆数据库tb_hotel表结构的具体含义,并分析如何建立其索引库。本篇我们来正式进入链接Elasticsearch的Java代码的编写阶段,先进行RestClient的初始化。 RestClient的初始化分为三步,…...

【AI大模型系列】DeepSeek V3的混合专家模型机制-MoE架构(八)

一、什么是MoE架构 MoE架构的核心思想是将输入数据分配给不同的专家子模型,然后将所有子模型的输出进行合并,以生成最终结果。这种分配可以根据输入数据的特征进行动态调整,确保每个专家处理其最擅长的数据类型或任务方面,从而实…...

HarmonyOS之深入解析如何根据url下载pdf文件并且在本地显示和预览

一、文件下载 ① 网络请求配置 下载在线文件,需要访问网络,因此需要在 config.json 中添加网络权限: {"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET","reason&qu…...

HTML5贪吃蛇游戏开发经验分享

HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中,我使用HTML5 Canvas和原生JavaScript实现了一…...

AI 的出现是否能替代 IT 从业者?

AI 的出现是否能替代 IT 从业者? AI 的快速发展正在深刻改变各行各业,IT 行业也不例外。然而,AI 并非完全替代 IT 从业者,而是与其形成互补关系。本文将从 AI 的优势、IT 从业者的不可替代性、未来趋势等方面,探讨 AI…...

git 操作记录

1、检查子模块是否在主分支上 [git submodule foreach --recursive \\n [ "$(git rev-parse HEAD)" "$(git rev-parse origin/master)" ] \\n && echo " 一致: $name" || echo "不一致: $name"] 使用 git submodule fore…...

QSettings用法实战(相机配置文件的写入和读取)

很多情况,在做项目开发的时候,将参数独立出来是比较好的方法 例如:相机的曝光次数、曝光时长等参数,独立成ini文件,用户可以在外面修改即可生效,无需在动代码重新编译等工作 QSettings便可以实现该功能 内…...

机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法

一、集成学习框架 对训练样本较少的结构化数据领域,Boosting算法仍然是常用项 XGBoost、CatBoost和LightGBM都是以决策树为基础的集成学习框架 三个学习框架的发展是:XGBoost是在GBDT的基础上优化而来,CatBoost和LightGBM是在XGBoost的基础上…...

SpringBoot集成Logback终极指南:从控制台到云端的多维日志输出

一、基础配置&#xff1a;快速启用Logback 1. 依赖管理&#xff08;SpringBoot默认支持Logback&#xff09; <!-- 无需额外依赖&#xff0c;但需要排除其他日志框架 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>…...

[蓝桥杯 2023 省 A] 网络稳定性

题目来自DOTCPP&#xff1a; 思路&#xff1a; ①由于题目没有告诉我们成树形结构&#xff0c;可能成环。因此&#xff0c;我们要自己构建树。 ②本体我们通过kruskal重构树&#xff0c;按边权从大到小排序&#xff0c;那么查询的两个点的最近公共祖先权值就是答案。 ③在通…...

SSM框架加成SpringBoot项目

&#x1f353;博主介绍&#xff1a; 资深程序设计专家&#xff0c;专注于网站开发与文档写作&#xff0c;拥有六年互联网行业经验。精通Java、Python、PHP等主流语言&#xff0c;擅长从需求分析到系统设计的全流程开发。累计开发过数百个网站及应用程序&#xff0c;注重代码质量…...

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品…...

一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证

一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证 如何创建钉钉应用实现H5端免登录创建钉钉内部应用1.进入钉钉开放平台&#xff0c;配置自己的应用信息2.配置应用相关信息&#xff08;建议选择旧版&#xff0c;后续有一个token获取&#xff0c;新版会提示URL不安全&…...

测试开发-定制化测试数据生成(Python+jmeter+Faker)

实现步骤 步骤一&#xff1a;使用pythonfaker随机生成测试数据 在python中开发脚本&#xff0c;随机生成所需要的数据。import json from faker import Faker faker Faker(locale"zh_CN")def generate_faker_user():return {"name" : faker.name(),&qu…...