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 相关文章推荐
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
javascript对select标签的控制(option选项/select)
Jan 31 Javascript
js根据日期判断星座的示例代码
Jan 23 Javascript
jquery仿搜索自动联想功能代码
May 23 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
jQuery实现复选框成对选择及对应取消的方法
Mar 03 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
详解如何构建一个Angular6的第三方npm包
Sep 07 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
May 22 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
微信小程序实现一个简单swiper代码实例
Dec 30 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
JS实现打字游戏
2019/12/17 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
python数据结构之链表详解
2017/09/12 Python
Python中enumerate函数代码解析
2017/10/31 Python
Windows下python3.7安装教程
2018/07/31 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python列表对象实现原理详解
2019/07/01 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
财务会计应届生求职信
2013/11/24 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
《去年的树》教学反思
2016/02/18 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书