puppeteer实现html截图的示例代码
2019-01-11 12:02
976 查看
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章推荐
- js实现截图保存图片功能的代码示例
- C#实现定时全屏截图并且保存到预先设定好的文件夹中的代码示例
- VC++基于Dx实现的截图程序示例代码
- html+css+javascript实现列表循环滚动示例代码
- html css js 实现Tab标签页示例代码
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- 用PHP ob_start()控制浏览器cache、生成html实现代码
- Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果][示例代码下载]
- html-示例代码
- VB实现抓屏/截图的代码
- js实现网页的两个input标签内的数值加减(示例代码)
- 【出版直播】博客园征途系列,《设计模式——基于C#的工程化实现与扩展》电子书、示例代码发布,互动网预订开始
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- webuploader+springmvc实现多文件上传(html+js+css原创,后台代码借鉴)
- java实现优酷视频地址解析示例代码分享
- Spring MVC代码实例系列-04:通过自定义视图(继承InternalResourceView),实现既能解析Jsp页面又能解析Html页面的目的
- C#摄像头实现拍照功能的简单代码示例
- Android对图片Drawable实现变色示例代码
- TensorFlow 机器学实战指南示例代码之 TensorFlow 实现反向传播(二)
- php添加文章时生成静态HTML文章的实现代码