最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

强制 Puppeteer 使用现有的浏览器

网站源码admin49浏览0评论

强制 Puppeteer 使用现有的浏览器

强制 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 配置文件?

回答如下:
发布评论

评论列表(0)

  1. 暂无评论