puppeteer入门
转自: https://www.jianshu.com/p/a89d8d6c007b
作者: ppCode
puppeteer新手入门(chromium下载跳坑)
puppeteer简介
puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人。puppeteer是一个nodejs的库,支持调用Chrome的API来操纵Web,相比较Selenium或是PhantomJs,它最大的特点就是它的操作Dom可以完全在内存中进行模拟既在V8引擎中处理而不打开浏览器,而且关键是这个是Chrome团队在维护,会拥有更好的兼容性和前景。
puppeteer功能
- 生成页面的截图和PDF。
- 抓取SPA并生成预先呈现的内容(即“SSR”)。
- 从网站抓取你需要的内容。
- 自动表单提交,UI测试,键盘输入等
- 创建一个最新的自动化测试环境。使用最新的JavaScript和浏览器功能,直接在最新版本的Chrome中运行测试。
- 捕获您的网站的时间线跟踪,以帮助诊断性能问题。
puppeteer轻松入门
1. 环境和安装
Puppeteer 至少需要 Node v6.4.0,如要使用 async / await,只有 Node v7.6.0 或更高版本才支持。 node下载地址: https://nodejs.org/zh-cn/
2. 创建项目
2.1 创建test目录,进入目录执行npm init
2.2 安装 puppeteer
yarn add puppeteer 或者 npm i puppeteer
可能会出现以下报错:
ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOA
D" env variable to skip download.
是因为在执行安装的过程中需要执行install.js,这里会下载Chromium,官网建议是进行跳过,我们可以执行 —ignore-scripts 忽略这个js执行。也可以通过设置环境变量set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1阻止下载 Chromium (因为封网,直接下载会失败)
npm i --save puppeteer --ignore-scripts
2.3 手动下载Chromium
下载地址:https://download-chromium.appspot.com/ (打开蓝灯翻墙软件...)
把下载刚刚下载的文件解压出来会有chrome-win32文件夹,把里面的文件拷贝到项目新建的chromium文件夹中
2.4 新建index.js(截图功能), 代码如下:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://y.qq.com');
await page.screenshot({path: 'yqq.png'});
browser.close();
})();
打开cmd执行index.js
node index.js
这时候可能出现以下错误:
(node:8672) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejec
tion id: 1): AssertionError [ERR_ASSERTION]: Chromium revision is not downloaded
. Run "npm install"
(node:8672) [DEP0018] DeprecationWarning: Unhandled promise rejections are depre
cated. In the future, promise rejections that are not handled will terminate the
Node.js process with a non-zero exit code.
显示chromium 未下载错误,因为chromium默认的下载路径是在node_modules/puppeteer/.local-chromium/目录,这时候我们的chromium是在项目根目录,所以需要配置指定路径,修改index.js文件():
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath: './chromium/chrome.exe',
headless: false
});
const page = await browser.newPage();
await page.goto('http://music.163.com/');
await page.screenshot({path: 'music.png'});
browser.close();
})();
puppeteer launch参数说明:
- executablePath: 运行Chromium或Chrome可执行文件的路径
- headless: 是否运行在浏览器headless模式,true为不打开浏览器执行,默认为true
- timeout: 等待浏览器实例启动的最长时间(以毫秒为单位)。默认为30000(30秒)。通过0禁用超时
- args: 传递给浏览器实例的其他参数
更多参数请参照官网,再次执行index.js可能出现以下错误:
Error: Protocol error (Page.getFrameTree): 'Page.getFrameTree' wasn 't found undefined
刚开始找了好久没找到答案,然后上万能的Google找了下,发现了类似的问题

可能是chromium的版本存在差异,然后重新在chromium官网下载最新版本解压到项目(要注意下相应系统chromium)
执行index.js, 脚本运行chromium浏览器跳转到界面,截图保存到项目中,这样就成功了...
2.5 puppeteer相关地址
puppeteer神器官方文档,可以进行其他强大的功能开发...
puppeteer入门的更多相关文章
- Puppeteer入门初探
本文来自网易云社区 作者:唐钊 最近在看 node 爬虫相关的一些东西,我记得还是很久以前常用的 node 爬虫工具还是 superagengt+cherrio,他们的思路是通过发起 http 请求然 ...
- Puppeteer之大屏批量截图
事情的起因是客户三天两头的要求让我们给大屏截图,一定要最新的数据.所以我就自告奋勇研究了一下. puppeteer是一款headless浏览器,由谷歌官方维护.先看看puppeteer ...
- 爬虫利器 Puppeteer 实战
Puppeteer 介绍 Puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人.Puppeteer是一个Nodejs的库,支持调用Chrome的API来操纵Web,相比较Se ...
- 爬虫利器 Puppeteer
http://wintersmilesb101.online/2017/03/24/use-phantomjs-dynamic/ 一起学爬虫 Node.js 爬虫篇(三)使用 PhantomJS ...
- 【puppeteer+Node.js】学习
总结了一下有关puppeteer的学习的网站,以后还会继续更新 puppeteer 介绍 Puppeteer是一个通过DevTools Protocol控制headless chromium的高级no ...
- WM_QUERYENDSESSION与WM_ENDSESSION
此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 首先XP系统和Vista以后的系统,这两个消息的处理方式是不同的. XP系统 系统发送WM_QUERYEND ...
- web开发资源导航
实用工具 前端在线工具 兼容性速查 html5兼容性查询 node-es6支持度 es6兼容性表查询 设备es6支持度 游览器H5支持度 浏览器内核检测工具 手机设备信息检测 浏览器市场份额 文档手册 ...
- Puppeteer之爬虫入门
译者按: 本文通过简单的例子介绍如何使用Puppeteer来爬取网页数据,特别是用谷歌开发者工具获取元素选择器值得学习. 原文: A Guide to Automating & Scrapin ...
- puppeteer (Nodejs版selenium )快速入门
官网 https://pptr.dev/ api 与 教程: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.mdhttp ...
随机推荐
- BOM 浏览器对象模型
1.window对象模型:(操作浏览器) 它既是ECMAScript规定的global对象,又是javascript访问浏览器窗口的一个接口 系统对话框:这些对话框有操作系统/浏览器设置决定,css不 ...
- Eclipse markers窗口使用
项目提示有错误,又不知道错误是哪里导致的,这时你可以打开eclipse的markers窗口查看错误信息或者警告信息 markers窗口提示信息: 到项目工程目录的settings目录下找到org.ec ...
- leetcode — valid-parentheses
import java.util.Stack; /** * Source : https://oj.leetcode.com/problems/valid-parentheses/ * * Creat ...
- Kali中装中文输入法小企鹅
STEP 1. 装fcitx框架,apt-get install fcitx STEP 2. 装googlepinyin输入法,apt-get install fcitx-googlepinyin S ...
- 《剑指offer》内容总结
(1)剑指Offer——Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常 ...
- 进程间通信IPC-管道
管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此通讯机制.管道有以下两种局限性: 1, 历史上,它们是半双工的(即数据只能在一个方向上流动).现在某些系统提供了全双工管道,但是为了最 ...
- 一张图读懂PBN飞越转弯衔接TF/CF航段计算
在PBN旁切转弯的基础上,再来看飞越转弯接TF(或CF)航段,保护区结构上有些相似,只是转弯拐角处的保护区边界有“简化”,其余部分是相近的. FlyOver接TF段的标称航迹有一个飞越之后转弯切入航迹 ...
- SpringMVC4+Hibernate5+SQLServer 2014 整合(包括增删改查分页)
前言 前面整合完了SpringMVC+MyBatis,自然也少不了SpringMVC+Hibernate,严格来说Hibernate才是我们真正想要的ORM框架么.只记得最初学习hibernate时, ...
- 关于SVN 操作 提示文件已过时,请先update
提示文件已过时,请先update 错误产生原因:修改文件前没有先update,从svn获取该文件的最新版本. 解决方法:备份你修改后的文件,通过Revert恢复到服务器版本后,再比较之前备份的文件,进 ...
- 后台MemoryStream图片流用ajax接收乱码问题
MemoryStream ms = new MemoryStream(); //要先把二进制流进行编码,再传输,解决乱码问题 Convert.ToBase64String(ms.ToArray()); ...