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 相关文章推荐
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
jquery下利用jsonp跨域访问实现方法
Jul 29 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
Vue如何实现响应式系统
Jul 11 Javascript
详解vue-cli3使用
Aug 14 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
React倒计时功能实现代码——解耦通用
Sep 18 Javascript
javascript实现简易计算器功能
Sep 23 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 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往windows中添加用户
2006/12/06 PHP
PHP 类型转换函数intval
2009/06/20 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php事件驱动化设计详解
2016/11/10 PHP
做网页的一些技巧
2007/02/01 Javascript
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
Python二分查找详解
2015/09/13 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
最受欢迎的自我评价
2013/12/22 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
个人工作能力自我评价
2015/03/05 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers