puppeteer 爬虫 pdf 截图 自动化
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 (rejection id: 1): AssertionError [ERR_ASSERTION]: Chromium revision is not downloaded. Run "npm install"(node:8672) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate theNode.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 爬虫 pdf 截图 自动化的更多相关文章
- Puppeteer爬虫实战(一)
		
Puppeteer 爬虫技术实践 信息简介 Puppeteer是Chrome开发团队发布的一个通过Chrome DevTool Protocol来控制浏览器Chrome(下文若无显式称呼Chromiu ...
 - 用python写网路爬虫 PDF高清完整版免费下载 Python基础教程免费电子书 python入门书籍免费下载
		
<用python写网路爬虫PDF免费下载>PDF书籍下载 内容简介 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你 ...
 - 爬虫实战:爬虫之 web 自动化终极杀手 ( 上)
		
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:陈象 导语: 最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路.本次爬虫内容有:静态页面的爬 ...
 - 在linux (centos)上使用puppeteer实现网页截图
		
1.安装nodejs和npm # 下载解压 wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz tar -xvf n ...
 - 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘
		
百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...
 - 使用node+puppeteer+express搭建截图服务
		
使用node+puppeteer+express搭建截图服务 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14222807.html 写在之前 一开始我们的需求 ...
 - 使用puppeteer生成pdf与截图
		
之前写过一篇 vue cli2 使用 wkhtmltopdf 踩坑指南,由于wkhtmltopdf对vue的支持并不友好,而且不支持css3,经过调研最终选择puppeteer,坑少,比较靠谱. 一. ...
 - 【原】使用puppeteer爬虫下载Midi文件
		
The Beatles 乐队的 Midi文件下载地址 puppeteer官方github地址 midi文件爬取示例代码github地址 1.安装npm 参考:安装npm及cnpm(Windows) 修 ...
 - Docker中部署puppeteer导出pdf
		
最近在做puppeteer容器化的过程中发现问题. 在容器中npm install puppeteer仍然会报错,不能launch 随后错误提示中也给出了官方的文档,https://github.co ...
 
随机推荐
- 3.2 git命令大全
			
1. 常用命令 -- 查看 git remote:要查看当前配置有哪些远程仓库; git remote -v: -v 参数,你还可以看到每个别名的实际链接地址; git branch -a :查看远程 ...
 - java常用技术名词解析
			
1.1 token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便 将此Token返回给客户端,以后客户端只需带上这个Token前来请求数 ...
 - spring controller方法和jstl
			
1复杂类型查询:查询条件已经多于一个实体类中的属性 1)可以创建一个类用于组合查询条件 基础类 public class Items { private Integer id; private Str ...
 - ArrayList的详解
			
数组一旦给定大小就是固定的,只能放同类型的不能再改,还有一种高级的可扩充的,就是arrayList类,被称作动态数组或者集合. 使用步骤: 1. 引用命名空间system.collections: 2 ...
 - 远程Service的显示 / 隐式启动
			
在进程间通信时,常会设计开启远程 Service 的情况.开启远程 Service 的方式有两种,一种时显示开启,一种是隐式开启.下面分别来看: 一.隐式开启 服务端:Service 所在 Andro ...
 - Corrupted Metadata/failed to mount /sysroot
			
公司电脑CentOS系统突然断电,开机后,无法进入系统.查看系统log如下: mount: mount /dev/mapper/cl-root on /sysroot failed:Structure ...
 - Lua和C++交互 学习记录之三:全局值交互
			
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
 - 牛客OI周赛6-提高组 A 大法师与魔法石
			
大法师与魔法石 思路: 对于一个ai, 它可以构成区间[ai/v, ai] 假设和它相邻的为aj, 那么ai 和 aj 构成的区间为[(ai+aj) / v, ai+aj] 那么这两个区间能合并的条件 ...
 - python Django 项目创建
			
注:后续如不特色说明,使用python版本均为python3 创建项目 django-admin startproject projectName 启动服务 python manage.py runs ...
 - [ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern
			
<url-pattern>/*</url-pattern> The /* on a servlet overrides all other servlets, includin ...