如何在Puppeteer中向参数传递变量以批量生成PDF
在Puppeteer中传递变量生成批量PDF文件
首先纠正你代码里的两个问题:
- 字符串变量赋值需要加引号:
var name = 'example1'(否则会被当作未定义变量报错) - PDF路径需要正确拼接变量,不能直接写
/name/.pdf,这里可以用模板字符串或字符串拼接插入变量。
单个文件的正确写法
const name = 'example1'; await page.pdf({ path: `${name}.pdf`, // 用模板字符串直接插入变量 printBackground: true, });
或者用传统字符串拼接方式:
path: name + '.pdf'
批量生成90+PDF的实现
要批量生成不同名称的PDF,先准备一个包含所有文件名的数组,再通过循环遍历数组,每次生成对应名称的PDF。如果每个PDF对应不同页面内容,记得在循环里更新页面状态(比如导航到对应URL或修改DOM)。
完整示例代码:
const puppeteer = require('puppeteer'); const fs = require('fs'); // 提前创建存放PDF的文件夹(避免路径不存在报错) fs.mkdirSync('./generated_pdfs', { recursive: true }); // 生成95个文件名(document_1到document_95) const fileNames = Array.from({ length: 95 }, (_, index) => `document_${index + 1}`); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); for (const fileName of fileNames) { // 示例:根据文件名导航到对应页面,或修改页面内容 await page.goto(`https://your-target-url.com/${fileName}`); // 也可以直接修改页面内容:await page.evaluate((title) => document.body.innerHTML = `<h1>${title}</h1>`, fileName); // 生成带变量名称的PDF await page.pdf({ path: `./generated_pdfs/${fileName}.pdf`, // 拼接文件夹路径和变量文件名 printBackground: true, format: 'A4' // 可选,指定PDF格式 }); } await browser.close(); console.log('所有PDF生成完成'); })();
关键注意点
- 模板字符串(
`...`)是ES6+语法,支持直接在字符串中插入变量,写法最简洁 - 如果指定生成目录,需确保目录存在,可通过
fs.mkdirSync提前创建(需引入fs模块) - 循环过程中要确保页面内容加载完成再生成PDF,可配合
page.waitForSelector或page.waitForNavigation等待页面状态稳定
内容的提问来源于stack exchange,提问作者MrMe
相关产品推荐
相关产品推荐

