IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 基于koapuppeteer实现网页不同尺寸截图 -> 正文阅读

[JavaScript知识库]基于koapuppeteer实现网页不同尺寸截图

对网页不同尺寸进行截图,检查在不同尺寸下网页ui是否有错误。
在这里插入图片描述
在这里插入图片描述
该demo基于koa.jspuppeteer.js
接口实现:

index.js

const Koa = require('koa');
const app = new Koa;
// 允许跨域
const cors = require('koa2-cors');
app.use(cors());
// 静态资源
const path = require('path')
const koaStatic = require('koa-static')
app.use(koaStatic(path.join(__dirname, './src/assets/')))
// 路由中间件
const userRoute = require('./src/router');
app.use(userRoute.routes()).use(userRoute.allowedMethods());// allowedMethods 405响应和501响应

app.listen(3000, () => {
    console.log('Service running: http://127.0.0.1:3000');
})
module.exports = app;

/router/index.js:

const Router = require('koa-router');
const router = new Router();
const KoaBody = require('koa-body');

// 获取图片
router.get('/getJpeg', auth, async (ctx) => {
    const getPdf = require('../views/getJpeg');
    ctx.body = JSON.stringify(await getJpeg(ctx));
})

module.exports = router;

/views/getJpeg.js:

const puppeteer = require('puppeteer');

function delay(time) {
    return new Promise(res => setTimeout(res, time))
}
// 滚动到底
function autoScroll(page) {
    return page.evaluate(() => {
        return new Promise((resolve, reject) => {
            var totalHeight = 0;
            var distance = 500;
            var timer = setInterval(() => {
                var scrollHeight = document.body.scrollHeight;
                window.scrollBy(0, distance);
                totalHeight += distance;
                if (totalHeight >= scrollHeight) {
                    clearInterval(timer);
                    resolve(totalHeight);
                }
            }, 17);
        })
    });
}

const sc = [
    { width: 800, height: 600 },
    { width: 1024, height: 768 },
    { width: 1280, height: 960 },
    { width: 1440, height: 900 },
    { width: 1680, height: 1050 },
    { width: 1920, height: 1200 },
    { width: 2560, height: 1440 },
    { width: 3840, height: 2160 },
]
async function getJpegStart(url, scarr, quality = 50) {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url, {
        waitUntil: 'networkidle0'
    });
    await delay(3000) //等待3秒让页面渲染dom
    let pathArr = [];
	// 截取图片
    async function sh() {
        if (!scarr.length) return
        await page.setViewport(sc[scarr[0]]);
        let height = await autoScroll(page);
        let u = url.replace(':', '_').replace(/\./g, '_').replace(/\//g, '');
        await page.screenshot({
            path: 'src/assets/' + sc[scarr[0]].width + '_' + sc[scarr[0]].height + '(' + u + ')' + '.jpeg',
            clip: {
                x: 0,
                y: 0,
                width: sc[scarr[0]].width,
                height: height,
            },
            quality
        });
        pathArr.push({
            src: sc[scarr[0]].width + '_' + sc[scarr[0]].height + '(' + u + ')' + '.jpeg',
            size: sc[scarr[0]].width + '*' + sc[scarr[0]].height,
            name: sc[scarr[0]].width + '_' + sc[scarr[0]].height + '(' + u + ')'
        });
        scarr.shift();
        await sh();
    }
    await sh()

    await browser.close()
    return pathArr
}

async function getJpeg(ctx, id) {
    let res;
    let url = ctx.query.url;
    let quality = Number(ctx.query.quality);
    let sc = []; // 尺寸索引 传入的值格式为: sc=1,3,5
    ctx.query.sc.split(',').forEach(function (v) { sc.push(Number(v)) })
    let pathArr = await getJpegStart(url, sc, quality);
    
    if (pathArr.length) {
        pathArr.forEach(function (v) {
            v.src = 'http://' + ctx.host + '/' + v.src;
        })
        res = {
            status: 1,
            data: pathArr
        }
    } else {
        res = {
            status: 0,
            data: null,
            msg: '目标链接访问失败'
        }
    }
    return res
}

module.exports = getJpeg;
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:34:53  更:2022-04-07 22:39:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:35:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码