capture-website使用

一.该插件1点几版本以下的有问题,如果生成截图报错会导致没有关闭截图,导致进程一直都在(2点几版本的没有这个问题,加try)

二.

方法一

const Pageres = require('pageres');
const path = require("path")
const fs = require("fs")

async function screenshot(req, res) {
    const { url,width,height } = req.query
    if (!url||!width||!height) {
        return res.json({
            code: 1000,
            msg: "缺少参数"
        })
    }

    const fileName = new Date().getTime()

    // width*height 是分辨率
    await new Pageres({
        delay: 0,
        launchOptions:{
            args:['--no-sandbox', '--disable-setuid-sandbox']
        }
    })
        .src(url, [`${width}x${height}`], {
            filename: `${fileName}`
        })
        .dest(__dirname)
        .run();

    const options = {
        root: path.join(__dirname),
        dotfiles: 'deny',
        headers: {
            'x-timestamp': Date.now(),
            'x-sent': true
        }
    }

    res.sendFile(fileName + ".png", options, function (err) {
        fs.unlink(path.join(__dirname, fileName + ".png"), (err) => {
            if (err) {
                console.error('删除图片压缩文件失败:', err);
            }
        });
        if (err) {
            res.json({
                code: 1001,
                msg: "截图失败"
            })
        }
    })
}
module.exports = {
    screenshot
}

方法二:

const captureWebsite = require("capture-website");

async function screenshot(req, res) {

    const { url,width,height } = req.query

    if (!url||!width||!height) {
        return res.json({
            code: 1000,
            msg: "缺少参数"
        })
    }

    try {
        //改成输出流的方式,captureWebsite.file()这个会生成文件
        const imgBuffer = await captureWebsite.buffer(url,{
            width:Number(width),//要传数字
            height:Number(height),//要传数字
            delay: 2,
            scaleFactor: 1,//这个参数设置为1,默认值2(设置为2的时候截图会比较慢,截图50000高度的页面用时差不多25秒,设置为1的时候用时8秒,而且设置为2的时候截图50000高度的页面生成出来有一半是空白)
            launchOptions:{//在linux运行要加这个参数,不加会报 Error: Failed to launch the browser process!
                args:['--no-sandbox', '--disable-setuid-sandbox'],
            }
        });
        //返回图片
        res.set('Content-Type', 'image/png;');
        res.send(imgBuffer);
    }catch (e) {
        console.error(e,"screenshot-error")
        res.json({
            code: 1002,
            msg: "截图失败"
        })
    }
}
module.exports = {
    screenshot,
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值