node puppeteer截图

puppeteer([ˌpʌpɪˈtɪr])

相关资料

使用puppeteer完成海报生成优化

涉及业务:

  • 由于前端生成海报需要考验的是电脑的性能问题,在生成大量海报时,断然不能在前端生成,会导致生成时间过长,或浏览器进入卡死状态!!!
  • 那就换个思路,通过node层生成,服务器生成海报?那肯定不能全靠服务器,服务器画海报还是不行,还得借助前端!!!

实现优化思路:

  • 前端提供海报模板和样式
  • 服务器通过无头浏览器,无形中浏览前端模板
  • 并截图海报模板
  • 最后再通过队列异步的方式返回
  • 这样异步等待时间,不需要同步的等待生成

截图页面示例

const puppeteer = require("puppeteer");
const fs = require("fs");

(() => {
  puppeteer
    .launch({
      // 是否启用无头浏览器
      headless: true,
    })
    .then(async (browser) => {
      const page = await browser.newPage();
      await page.goto(
        "https://edu-admin.qlchat.com/"
      );
      const dimensions = await page.evaluate(() => {
        // 执行js脚本获取截图部分
        return {
          width: document.querySelector(".login-wrap").getBoundingClientRect()
            .width,
          height: document.querySelector(".login-wrap").getBoundingClientRect()
            .height,
          x: document.querySelector(".login-wrap").offsetLeft,
          y: document.querySelector(".login-wrap").offsetTop,
        };
      });
      const clipArea = {
        width: dimensions.width,
        height: dimensions.height,
        x: dimensions.x,
        y: dimensions.y,
      };
      console.log("Dimensions:", dimensions);
      // await page.setViewport({width: 1800, height:1400});

      // 截图图片路径
      // const imgPath = './' + Date.now() + 'test.png';
      const imgPath2 = './test.png';

      // 删除上次
      if(fs.existsSync(imgPath2)) {
        fs.unlinkSync(imgPath2);
      }

      // 延时
      const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
      await delay(500);

      /**
       * 文档地址 http://www.puppeteerjs.com/#?product=Puppeteer&version=browsers-v0.0.2&show=api-pagescreenshotoptions
       * @returns buffer缓存
       */
      await page.screenshot({
        type: "jpeg",
        quality: 100,
        path: imgPath2,
        clip: clipArea,
      });
      
      // const imgBase64 = imgBuffer.toString('base64');
      // const imgBase64Url =  "data:image/png;base64," + imgBase64;
      // // console.log("🚀 ~ file: capture.js:43 ~ .then ~ imgBase64Url", imgBase64Url)
      // const dataBuffer = Buffer.from(imgBase64, 'base64');
      // fs.writeFileSync('./avatar3.png', dataBuffer, function(err) {
      //   if(err) {console.log(err)}
      // });
      
    });
})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值