浏览器"/>
强制 Puppeteer 使用现有的浏览器
我正在使用 Puppeteer 在我的项目中创建 PDF。 在为我的项目实施多租户架构后,我使用 Puppeteer 运行问题 这是我创建 PDF 文件的 2 条路线:
module.exports.pdfCreator = async (req,res)=>{
const puppeteer = require('puppeteer')
const { writeFile } = require('fs');
let index = mongoose.connections.findIndex(e=>e.name === req.session.dbname)
const Program = mongoose.connections[index].model('Program');
(async() => {
const program = await Program.findById(req.params.id)
const browser = await puppeteer.launch({ignoreHTTPSErrors: true})
const page = await browser.newPage()
await page.goto(`https://localhost/${req.params.id}/pdfPage`, {
waitUntil: 'networkidle2'
})
await page.emulateMediaType('screen')
const pdf = await page.pdf({
printBackground: true,
preferCSSPageSize: true,
format: 'Letter'
})
await browser.close()
let url = `./pdf_files/${Date.now()}.pdf`
writeFile(url, pdf, {}, (err) => {
if(err){
return console.error('error')
}
console.log(`a New PDF has been Generated! Program: ${program.program_name}`)
// res.redirect(`/${req.params.id}/pdfPage`)
const path = require('path')
res.sendFile(path.resolve(`${url}`));
})
})()
}
这是 Route Puppeteer 将从(EJS 文件)创建一个 pdf:
app.get('/:id/pdfPage',catchAsync(async(req,res)=> {
const ejs = require('ejs')
let index = mongoose.connections.findIndex(e=>e.name === req.session.dbname)
const a = mongoose.connections[index].model('a')
const b = mongoose.connections[index].model('b')
const c = mongoose.connections[index].model('c')
const program = await a.findById(req.params.id)
.populate({path: 'x',model: b,populate: {path: 'o',model: c}})
.populate({path: 'y',model: b,populate:{path: 'k',model: c}})
.populate({path: 'z',model: b,populate:{path: 'l',model: c}})
.populate({path: 'f',model: b,populate:{path: 'm',model: c}})
.populate({path: 't',model: b,populate:{path: 'n',model: c}})
.populate({path: 'g',model: User})
.populate({path: 'l',model: User});
ejs.renderFile('./controllers/print.ejs', { program }, (err, html) => {
if(err) {
console.log(err)
return res.send(err)
}
// enviar para o navegador
return res.send(html)
})
}))
这里的问题是 req.session 没有定义,因为当 Puppeteer 创建一个新的 Chromium 浏览器时,它不包含用户会话 .. 然后我的 Rended Page 坏了,因为它不能使用我的 Mongoose 模型 我试过这两种方法:
- 将 Cookie 从用户选项卡传递到创建的铬浏览器
- 强制 Puppeteer 连接包含用户 Cookie 的当前 Chrome 配置文件
我的猜测是第二种方法更简单。
如何强制 Puppeteer 使用当前用于创建 PDF 的 Chrome 配置文件?
回答如下:更多推荐
强制 Puppeteer 使用现有的浏览器
发布评论