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. [转帖]Codis作者黄东旭:细说分布式Redis架构设计和那些踩过的坑

    https://dbaplus.cn/news-141-270-1.html Codis是一个分布式Redis解决方案,与官方的纯P2P模式不同,Codis采用的是Proxy-based的方案.今天我 ...

  2. Python学习之九_winrm执行远程机器的cmd命令

    Python学习之九_winrm执行远程机器的cmd命令 winrm # 注意如下命令需要按照顺序执行. # 打开powershell的管理员模式进行如下的操作. set-executionpolic ...

  3. [转帖]Ubuntu Server安装图形界面

    最早接触到的Linux系统是Ubuntu 10.04,当时在自己的一台Win7笔记本电脑上安装的Win/Ubuntu双系统,Ubuntu简洁的操作界面给我留下了深刻的印象. 后来开始做一些服务器开发, ...

  4. CentOS8 安装Oracle19c RPM的办法

    1. 下载相应的rpm包 我这边使用的主要有: -rw-r--r-- 1 root root 19112 Apr 5 15:13 compat-libcap1-1.10-7.el7.x86_64.rp ...

  5. vue同步组件和异步组件的区别

    异步组件 异步组件:只在组件需要渲染(组件第一次显示)的时候进行加载渲染并缓存,缓存是以备下次访问. Vue实现按需加载 在打包的时候,会打包成单独的js文件存储在static/js文件夹里面** 在 ...

  6. IConfigurationSectionHandler 接口的用法

    今天终于花了点时间了解一下IConfigurationSectionHandler 接口的用法 ,引以入门.首先建立一 RobsunConfigSectionHandler 专案,代码如下 : nam ...

  7. CouchDB vs. LevelDB

    CouchDB 和 LevelDB 都是数据库系统,但它们在很多方面有着不同的设计和应用重点.下面是对这两个数据库在一些关键点上的对比: 数据模型: CouchDB:CouchDB 是一种面向文档的数 ...

  8. Gin CORS 跨域请求资源共享与中间件

    Gin CORS 跨域请求资源共享与中间件 目录 Gin CORS 跨域请求资源共享与中间件 一.同源策略 1.1 什么是浏览器的同源策略? 1.2 同源策略判依据 1.3 跨域问题三种解决方案 二. ...

  9. pycharm alt+f7(查找)显示动态用法的结果过多(dynamic usages)

    在脚本语言中查找引用时,如果有同名函数,在动态用法那一栏会出现大量的结果,,如何缩小或者动态用法(dynamic usages)的结果呢? 在官网上也有提出了这个问题,但官方没有给出答案issue:P ...

  10. 重写JSON.stringify与JSON.parse使其支持解析function类型

    const JSONStringify = (option) => { return JSON.stringify(option, (key, val) => { // 处理函数丢失问题 ...