Puppeteer是什么

Puppeteer是一个Node库,它提供了一个高级API来通过DevTools协议控制Chromium或Chrome。

可以使用Puppeteer来自动化完成浏览器的操作,官方给出的一些使用场景如下:

  • 生成页面PDF
  • 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))
  • 自动提交表单,进行 UI 测试,键盘输入等
  • 创建一个时时更新的自动化测试环境,使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中执行测试
  • 捕获网站的timeline trace,用来帮助分析性能问题
  • 测试浏览器扩展

与Selenium比较

说起浏览器自动化操作,很容易联想到另一个自动化框架:Selenium

但是Puppeteer与Selenium使用的协议却不一样!

Puppeteer使用DevTools协议与Chome(或Chromium)进行交互,而Selenium却使用WebDriver协议与浏览器进行交互。

另外,他们各自的API在使用风格上也相差很多。

实践案例

在使用Puppeteer之前需要先安装,Node.js最低版本要求为:Node v6.4.0

有2种方式安装:

第一种:执行npm i puppeteer安装,这种方式安装同时会下载最新版本的Chromium,以保证可以使用API。

第二种:执行npm i puppeteer-core安装,这种方式仅仅只会安装Puppeteer自己,默认不会下载Chromium(自1.7.0版本以后会发布一个puppeteer-core包)。

如果本机已经安装了Chrome或Chromium浏览器,可以选择第一种方式安装Puppeteer即可。

如下示例展示通过Puppeteer打开百度网站,然后输入关键Java开发,并在搜索结果中定位div元素。

// 采用`npm i puppeteer`安装时,可以加载`puppeteer`模块
// const puppeteer = require('puppeteer'); // 采用`npm i puppeteer-core`安装时,可以加载`puppeteer-core`模块
const puppeteer = require('puppeteer-core'); (async () => {
// puppeteer默认打开的浏览器为无头模式
// const browser = await puppeteer.launch(); // 通过参数明确指定puppeteer不以无头模式打开浏览器,并指定了Chrome浏览器可执行文件的路径
const browser = await puppeteer.launch({headless: true, executablePath:'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'});
const page = await browser.newPage();
await page.goto('https://www.baidu.com'); try {
// 定位搜索输入框
await page.focus('#kw');
// 给搜索框输入关键字
await page.keyboard.type('Java开发'); // 按回车键
// await page.keyboard.press('Enter'); // 定位搜索按钮
const ele = await page.waitForSelector('#su');
// 点击搜索按钮
ele.click(); // 定位搜索结果中的div列表数量
const divsCounts = await page.$$eval('div', divs => divs.length);
console.log(divsCounts);
} catch (e) {
console.log(e.TimeoutError);
} // 明确关闭浏览器
await browser.close();
})();

【参考】

Puppeteer 中文文档

Selenium Webdriver原理终于搞清楚了

Puppeteer系列

Selenium入门介绍

Puppeteer介绍的更多相关文章

  1. web前端自动化测试/爬虫利器puppeteer介绍

    web前端自动化测试/爬虫利器puppeteer介绍 Intro Chrome59(linux.macos). Chrome60(windows)之后,Chrome自带headless(无界面)模式很 ...

  2. 2019.4.10 初识puppeteer

    注:原地址:https://www.cnblogs.com/paris-test/p/9705075.html 一.Puppeteer 介绍 Puppeteer 翻译是操纵木偶的人,利用这个工具,我们 ...

  3. 爬虫利器 Puppeteer 实战

    Puppeteer 介绍 Puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人.Puppeteer是一个Nodejs的库,支持调用Chrome的API来操纵Web,相比较Se ...

  4. 【puppeteer+Node.js】学习

    总结了一下有关puppeteer的学习的网站,以后还会继续更新 puppeteer 介绍 Puppeteer是一个通过DevTools Protocol控制headless chromium的高级no ...

  5. pupeteer初体验

    官方文档: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagescreenshotoptions puppet ...

  6. puppeteer,新款headless chrome!

    puppeteer puppeteer是一种谷歌开发的Headless Chrome,因为puppeteer的出现,业内许多自动化测试库停止维护,比如PhantomJS,Selenium IDE fo ...

  7. 基于puppeteer模拟登录抓取页面

    关于热图 在网站分析行业中,网站热图能够很好的反应用户在网站的操作行为,具体分析用户的喜好,对网站进行针对性的优化,一个热图的例子(来源于ptengine) 上图中能很清晰的看到用户关注点在那,我们不 ...

  8. Puppeteer学习之小试牛刀

    最近有了写文章的动力了,一方面是受到了很多前辈们的启示,另一方面也是为了记录下来更好地学以致用.闲言少叙,先说说Puppeteer是什么. Puppeteer是一个node库,提供了一些用来操作Chr ...

  9. Puppeteer 应用容器化

    Puppeteer 应用容器化 Intro Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库.可以通过Puppeteer的提供的api直接控 ...

  10. Puppeteer: 更友好的 Headless Chrome Node API

    很早很早之前,前端就有了对 headless 浏览器的需求,最多的应用场景有两个 UI 自动化测试:摆脱手工浏览点击页面确认功能模式 爬虫:解决页面内容异步加载等问题 也就有了很多杰出的实现,前端经常 ...

随机推荐

  1. [转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

    前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一. 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 机械磁盘, ...

  2. [转帖]Jmeter学习笔记(十一)——定时器

    https://www.cnblogs.com/pachongshangdexuebi/p/11571524.html 默认情况下,Jmeter线程在发送请求之间没有间歇.不设置定时器,短时间内会产生 ...

  3. [转帖]理解 postgresql.conf 的work_mem 参数配置

    https://developer.aliyun.com/article/401250 简介: 主要是通过具体的实验来理解 work_mem 今天我们着重来了解 postgresql.conf 中的 ...

  4. [转帖]ansible 安装 K8S

    作者:山河已无恙链接:https://www.zhihu.com/question/315497851/answer/2898814729来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  5. [转帖]基本系统调用性能lmbench测试方法和下载

    简介 Lmbench是一套简易,可移植的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具.一般来说,它衡量两个关键特征:反应时间和带宽. Lmbench旨在使系统开发者深入了解关键操作 ...

  6. [转帖]发布即巅峰!万字长文:Java性能调优六大工具:MAT内存分析工具

    jianshu.com/p/4ed3dd8b7b83 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基 ...

  7. Mysql到TiDB迁移,双写数据库兜底方案

    作者:京东零售 石磊 TiDB 作为开源 NewSQL 数据库的典型代表之一,同样支持 SQL,支持事务 ACID 特性.在通讯协议上,TiDB 选择与 MySQL 完全兼容,并尽可能兼容 MySQL ...

  8. web字体小于12px的解决办法

    大家都知道,web端的字体在正常情况下,最小只能够是12px; 但是有些时候,可能需要字体小于12px 那么如何解决这个办法了 可以使用css3的缩放属性scale 如果字体的大小是10px; 那么我 ...

  9. vue数据更新后在视图上不响应

    一.vue如何追踪变化 当你把一个普通的JS对象传给vue实例的data选项时, vue将遍历此对象的所有属性, 并使用 Object.defineProperty 把这些属性全部转为 getter/ ...

  10. &&运算提高代码质量

    sendGiveWeb: { code: 200, success: true, data: [ { id: "1230", name: "lh" }, { i ...