强制 Puppeteer 使用现有的浏览器

编程入门 行业动态 更新时间:2024-10-04 09:25:40

强制 Puppeteer 使用现有的<a href=https://www.elefans.com/category/jswz/34/1770995.html style=浏览器"/>

强制 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 使用现有的浏览器

本文发布于:2024-05-30 18:15:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770781.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浏览器   Puppeteer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!