puppeteer实现html截图的示例代码


Posted in Javascript onJanuary 10, 2019

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截图的示例代码

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 面向对象编程基础 多态
Aug 21 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
js兼容的placeholder属性详解
Aug 18 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
网页瀑布流布局jQuery实现代码
Oct 21 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
vue select 获取value和lable操作
Aug 28 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 #Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 #Javascript
浅谈JavaScript 代码简洁之道
Jan 09 #Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 #Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 #Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 #Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 #Javascript
You might like
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
Python模块学习 re 正则表达式
2011/05/19 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
Python表达式的优先级详解
2020/02/18 Python
python实现文字版扫雷
2020/04/24 Python
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
信息管理专业推荐信
2013/10/29 职场文书
个人查摆剖析材料
2014/02/04 职场文书
社区服务活动总结
2014/05/07 职场文书
体育运动口号
2014/06/09 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
2015年幼师工作总结
2015/04/28 职场文书
原告代理词范文
2015/05/25 职场文书