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 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
javascript 函数调用规则
Aug 26 Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
jQuery简单倒计时效果完整示例
Sep 20 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
微信小程序icon组件使用详解
Jan 31 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 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实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python中List的sort方法指南
2014/09/01 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
opencv 阈值分割的具体使用
2020/07/08 Python
python 动态绘制爱心的示例
2020/09/27 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
企业人事任命书
2014/06/05 职场文书
临床专业自荐信
2014/06/22 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
小学美术教学反思
2016/02/17 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Python序列化模块JSON与Pickle
2022/06/05 Python