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的caller,callee,call,apply
Apr 28 Javascript
页面只能打开一次Cooike如何实现
Dec 04 Javascript
js插件dropload上拉下滑加载数据实例解析
Jul 27 Javascript
jQuery Validate插件实现表单验证
Aug 19 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
使用node.js搭建服务器
May 20 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
echarts整合多个类似option的方法实例
Jul 10 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 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无刷新上传文件实现代码
2011/09/19 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP解决中文乱码
2017/04/28 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
Python实现的Excel文件读写类
2015/07/30 Python
python reduce 函数使用详解
2017/12/05 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
HTML5新增加的功能详解
2016/09/05 HTML / CSS
String和StringBuffer的区别
2015/08/13 面试题
老师给学生的表扬信
2014/01/17 职场文书
大学毕业感言100字
2014/02/03 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
出生公证委托书
2014/04/03 职场文书
我的小天地教学反思
2014/04/30 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
暑期实践个人总结
2015/03/06 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang