批量生成HTML邮件模板
代码(Javascript)
const puppeteer = require('puppeteer');
const fs = require('fs');
async function saveHTMLasImage(html, filePath) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(html);
await page.waitForTimeout(20000); // 等待页面加载完成
const screenshotOptions = {
type: 'png',
fullPage: true,
omitBackground: true
};
const imageBuffer = await page.screenshot(screenshotOptions);
fs.writeFileSync(filePath, imageBuffer);
await browser.close();
}
// groupJsonAll.txt是需要遍历填充在html模板上的数据
fs.readFile('groupJsonAll.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(JSON.parse(data).length)
analysisData(JSON.parse(data))
});
// 立即执行的异步函数表达式
async function analysisData(data) {
const MAX_CONCURRENT_TASKS = 10; // 最大并发任务数
const tasks = [];
let index = 0;
while (index < data.length) {
const slice = data.slice(index, index + MAX_CONCURRENT_TASKS); // 切片取出最大并发任务数的数据项
const promises = slice.map(async (item, i) => {
let html =
`html文案`
const filePath = `./img4/${group_id}.png`;
// 保存图片
await saveHTMLasImage(html, filePath);
});
const completedPromise = Promise.race(promises); // 等待最快完成的任务
tasks.push(completedPromise);
await Promise.all(tasks); // 等待所有任务完成
index += MAX_CONCURRENT_TASKS; // 更新索引
}
}
同时,贴上咱的个人博客,欢迎各位来访~
青枫阁