使用nodejs进行截图
创建一个空文件夹
初始化项目
js
npm init -y
下载插件
js
npm i puppeteer
npm i puppeteer-core // 用不上,但是必须要下,被puppeteer所依赖
根目录下创建app.js放入以下内容:
js
const puppeteer = require('puppeteer');
(async () => {
// 启动 Puppeteer 并创建一个新浏览器实例
// const browser = await puppeteer.launch(); // 会在后台自动运行截图,不会打开浏览器
const browser = await puppeteer.launch({headless: false}); // headless参数为false则打开浏览器
// 创建一个新页面
const page = await browser.newPage();
await page.setViewport({ width: 414, height: 896 }); // 打开的浏览器尺寸(淫威有的页面适配web有的适配移动端,尺寸不一样)
// 导航到目标网页
await page.goto('https://saas.takehr.cn/wxshare/#/coachDailyPaper/1387187/0/0');
// 等待页面完全加载
// 截取网页截图
// 无需下载
// let screenshotBuffer = await page.screenshot({ encoding: 'base64' }); // 不会下载到当前目录,返回的是base64格式的图片
// 如果想要返回buffer流的话,可以将base64图片进行转换
// const imageBuffer = Buffer.from(screenshotBuffer, 'base64');
// 需要下载到当前目录下
await page.screenshot({ path: 'example.png',fullPage: true }); // 会下载到当前项目下
// 关闭浏览器
await browser.close();
})();
运行app.js,当前项目下打开终端运行如下命令
js
node .\app.js
然后就会自动打开浏览器访问上述页面,然后截图完毕自动关闭浏览器,在当前项目下会生成一个example.png文件,就是截图的图片
正常情况下,都是使用下面这段代码进行截图,适配所有长图和短图情况,而且也保证了清晰度
js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
// 设置视口,deviceScaleFactor 影响清晰度
// 下面这个可以根据ui尺寸设计
// 打开的窗口大小
await page.setViewport({ width: 750, height: 1624, deviceScaleFactor: 2 });
// 导航到目标网页
await page.goto('https://saas.takehr.cn/wxshare/#/otfresult/7593667/708626');
// 等待页面加载完成
await new Promise(resolve => setTimeout(resolve, 500)); // 等待 0.5 秒
// 获取页面内容高度并调整视口
const bodyHandle = await page.$('body');
const boundingBox = await bodyHandle.boundingBox();
await bodyHandle.dispose();
// 这个设置截图的图片的宽高大小
await page.setViewport({
width: 750,
height: Math.ceil(boundingBox.height),
deviceScaleFactor: 2
});
// 截取长页面截图
await page.screenshot({ path: 'example.png' });
// 关闭浏览器
await browser.close();
})();