因一个工作需要,拟用nodejs + puppeteer 批量访问某服务下的HTML,在本地建立多个PDF,所以期望封装一个模块,实现:
myHtml2Pdf( aURL ,pdfPath){
// aURL : 访问的地址,都是静态页面
// pdfPath : 本地存储的pdf路径
}
现在自己参考相应文档实现了一个myHtml2Pdf.js
,其内容为:
const puppeteer= require('puppeteer');
const fs = require('fs');
const path = require('path');
async function myHtml2Pdf(aURL,pdfPath){
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(aURL, {
// waitUntil: 'networkidle2'
waitUntil:'load'
// waitUntil:'domcontentload'
});
await console.log(outPath);
const pdf = await page.pdf({
path: pdfPath,
format: 'A4',
});
await browser.close();
return pdf
}
module.exports = myHtml2Pdf;
然后我建立了一个本地的测试文档: test.js
,内容如下
const myHtml2Pdf= require('./myHtml2Pdf.js');
let url1='https://www.baidu.com/';
let url2='https://www.bing.com/';
let pdf1='./baidu.pdf';
let pdf2='./bing.pdf';
myHtml2Pdf(url1, pdf1);
myHtml2Pdf(url2, pdf2);
用nodejs test.js
来运行也能正确获取到对应pdf文件(我自己准备生成的页面格式很简单,所以先不考虑美化问题)。
但真正批量使用时(实际有几百个页面),却不能正确输出一个pdf文件啦,也不报错,本来模块中也有输出日志的地方,也不输出日志啦,不知道是什么原因?!
先试着改成串行吧,puppeteer 要启动 chromium,其实系统消耗不小,你跑得多了,即时不出问题,也可能卡死。