最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

puppeteer实现html截图的示例代码

来源:动视网 责编:小采 时间:2020-11-27 22:02:14
文档

puppeteer实现html截图的示例代码

puppeteer实现html截图的示例代码:puppeteer是谷歌官方出品的一个通过 DevTools 协议控制 headless Chrome 的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。 安装 直接运行安装命令: npm install
推荐度:
导读puppeteer实现html截图的示例代码:puppeteer是谷歌官方出品的一个通过 DevTools 协议控制 headless Chrome 的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。 安装 直接运行安装命令: npm install


puppeteer是谷歌官方出品的一个通过 DevTools 协议控制 headless Chrome 的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

安装

直接运行安装命令:

npm install puppeteer

如果出现无法安装的问题,可以使用淘宝镜像。

puppeteer实现滑动截图

在我 puppeteer 使用截全屏的过程中发现有些图片无法截取到,而实际上是因为有些图片是懒加载的,如果你没有滑动到图片的位置,那么这个图片是不会加载。

现在我的方式是采用模拟浏览器滚动条滑动的方式滑动底部来使图片加载出来。

代码如下:

const puppeteer = require('puppeteer');

(async () => {
 const browser = await puppeteer.launch({
 headless: false
 });
 const page = await browser.newPage();
 await page.goto('https://www.cnblogs.com/morethink/p/6525216.html');
 await page.setViewport({
 width: 1200,
 height: 800
 });

 await autoScroll(page);

 await page.screenshot({
 path: '1.png',
 fullPage: true
 });

 await browser.close();
})();


function autoScroll(page) {
 return page.evaluate(() => {
 return new Promise((resolve, reject) => {
 var totalHeight = 0;
 var distance = 100;
 var timer = setInterval(() => {
 var scrollHeight = document.body.scrollHeight;
 window.scrollBy(0, distance);
 totalHeight += distance;
 if (totalHeight >= scrollHeight) {
 clearInterval(timer);
 resolve();
 }
 }, 100);
 })
 });
}

动图如下:

puppeteer 实现 html element 截图

在某些情况下我们只想要针对html的某个位置进行截图而不是针对页面截全屏。

puppeteer提供了ElementHandle.screenshot 方法,该方法参数和page.screenshot 一样。而ElementHandle 对象是页面内的Dom对象。可以帮助我对 html element进行截图。这样的话你想截取页面的哪部分就截取页面的哪部分。

代码如下:

const puppeteer = require('puppeteer');

(async () => {
 const browser = await puppeteer.launch({
 headless: false
 });
 const page = await browser.newPage();
 await page.goto('https://www.cnblogs.com/morethink/p/6525216.html');
 await page.setViewport({
 width: 1200,
 height: 800
 });
 //获取页面Dom对象
 let body = await page.$('#cnblogs_post_body');
 //调用页面内Dom对象的 screenshot 方法进行截图
 await body.screenshot({
 path: '2.png'
 });
 await browser.close();
})();

参考文档:

https://github.com/GoogleChrome/puppeteer/blob/v1.11.0/docs/api.md#elementhandlescreenshotoptions

文档

puppeteer实现html截图的示例代码

puppeteer实现html截图的示例代码:puppeteer是谷歌官方出品的一个通过 DevTools 协议控制 headless Chrome 的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。 安装 直接运行安装命令: npm install
推荐度:
标签: 截图 实现 截图的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top