通过url链接对网页生成pdf
Puppeteer简介
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。
Puppeteer能做什么?
你可以在浏览器中手动执行的绝大多数操作都可以使用 Puppeteer 来完成! 下面是一些示例:
- 生成页面 PDF。
- 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。
- 自动提交表单,进行 UI 测试,键盘输入等。
- 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。
- 捕获网站的timeline trace,捕获网站的
- 测试浏览器扩展。
开始使用
安装node
要使用Puppeteer必须先安装node,安装node自行百度,node安装完成之后 用管理员打开cmd,运行如下命令。
npm install -g puppeteer
使用Puppeteer生成pdf
编写js文件,文件名为test.js
下面是test.js里面的代码
const puppeteer = require('puppeteer');
//node xxx.js url /xx/xx.pdf
const options = process.argv;
(async () => {
let url;
let pdfName;
if(options && options.length > 3){
url=options[2]; //网址
pdfName=options[3]; //types
}
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Set screen size
await page.setViewport({width: 1920, height: 1080});
await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
await page.goto(url, {
timeout: 300 * 1000,
waitUntil: [
// 'load', //等待 “load” 事件触发
// 'domcontentloaded', //等待 “domcontentloaded” 事件触发
'networkidle0', //在 500ms 内没有任何网络连接
// 'networkidle2' //在 500ms 内网络连接个数不超过 2 个
]
});
//由于是基于 chrome 浏览器的,浏览器为了打印节省油墨,默认是不导出背景图及背景色的
await page.pdf({path: pdfName, format: 'A3',printBackground:true,margin:{top:20,bottom:20}});
await browser.close();
})();
cmd中输入:
node test.js https://www.toutiao.com/article/7198341840758784552/?log_from=9141108901468_1676020835072 D:\home\1234.pdf
node js文件 url地址 生成pdf路径
效果图