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

可能会出现以下报错:

  1.  
    ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOA
  2.  
    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(截图功能), 代码如下:
  1.  
    const puppeteer = require('puppeteer');
  2.  
     
  3.  
    (async () => {
  4.  
    const browser = await puppeteer.launch();
  5.  
    const page = await browser.newPage();
  6.  
    await page.goto('https://y.qq.com');
  7.  
    await page.screenshot({path: 'yqq.png'});
  8.  
    browser.close();
  9.  
    })();
  10.  
     

打开cmd执行index.js

  1.  
    node index.js
  2.  
     

这时候可能出现以下错误:

  1.  
    (node:8672) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejec
  2.  
    tion id: 1): AssertionError [ERR_ASSERTION]: Chromium revision is not downloaded
  3.  
    . Run "npm install"
  4.  
    (node:8672) [DEP0018] DeprecationWarning: Unhandled promise rejections are depre
  5.  
    cated. In the future, promise rejections that are not handled will terminate the
  6.  
    Node.js process with a non-zero exit code.
  7.  
     

显示chromium 未下载错误,因为chromium默认的下载路径是在node_modules/puppeteer/.local-chromium/目录,这时候我们的chromium是在项目根目录,所以需要配置指定路径,修改index.js文件():

  1.  
    const puppeteer = require('puppeteer');
  2.  
     
  3.  
    (async () => {
  4.  
    const browser = await puppeteer.launch({
  5.  
    executablePath: './chromium/chrome.exe',
  6.  
    headless: false
  7.  
    });
  8.  
    const page = await browser.newPage();
  9.  
    await page.goto('http://music.163.com/');
  10.  
    await page.screenshot({path: 'music.png'});
  11.  
    browser.close();
  12.  
    })();
  13.  
     

puppeteer launch参数说明:

  • executablePath: 运行Chromium或Chrome可执行文件的路径
  • headless: 是否运行在浏览器headless模式,true为不打开浏览器执行,默认为true
  • timeout: 等待浏览器实例启动的最长时间(以毫秒为单位)。默认为30000(30秒)。通过0禁用超时
  • args: 传递给浏览器实例的其他参数

更多参数请参照官网,再次执行index.js可能出现以下错误:

  1.  
    Error: Protocol error (Page.getFrameTree): 'Page.getFrameTree' wasn 't found undefined
  2.  
     

刚开始找了好久没找到答案,然后上万能的Google找了下,发现了类似的问题

 
image.png

可能是chromium的版本存在差异,然后重新在chromium官网下载最新版本解压到项目(要注意下相应系统chromium)

执行index.js, 脚本运行chromium浏览器跳转到界面,截图保存到项目中,这样就成功了...

2.5 puppeteer相关地址

puppeteer神器官方文档,可以进行其他强大的功能开发...

puppeteer 爬虫 pdf 截图 自动化的更多相关文章

  1. Puppeteer爬虫实战(一)

    Puppeteer 爬虫技术实践 信息简介 Puppeteer是Chrome开发团队发布的一个通过Chrome DevTool Protocol来控制浏览器Chrome(下文若无显式称呼Chromiu ...

  2. 用python写网路爬虫 PDF高清完整版免费下载 Python基础教程免费电子书 python入门书籍免费下载

    <用python写网路爬虫PDF免费下载>PDF书籍下载 内容简介 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你 ...

  3. 爬虫实战:爬虫之 web 自动化终极杀手 ( 上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:陈象 导语: 最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路.本次爬虫内容有:静态页面的爬 ...

  4. 在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 ...

  5. 从零开始学Python网络爬虫PDF高清完整版免费下载|百度网盘

    百度网盘:从零开始学Python网络爬虫PDF高清完整版免费下载 提取码:wy36 目录 前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python ...

  6. 使用node+puppeteer+express搭建截图服务

    使用node+puppeteer+express搭建截图服务 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14222807.html 写在之前 一开始我们的需求 ...

  7. 使用puppeteer生成pdf与截图

    之前写过一篇 vue cli2 使用 wkhtmltopdf 踩坑指南,由于wkhtmltopdf对vue的支持并不友好,而且不支持css3,经过调研最终选择puppeteer,坑少,比较靠谱. 一. ...

  8. 【原】使用puppeteer爬虫下载Midi文件

    The Beatles 乐队的 Midi文件下载地址 puppeteer官方github地址 midi文件爬取示例代码github地址 1.安装npm 参考:安装npm及cnpm(Windows) 修 ...

  9. Docker中部署puppeteer导出pdf

    最近在做puppeteer容器化的过程中发现问题. 在容器中npm install puppeteer仍然会报错,不能launch 随后错误提示中也给出了官方的文档,https://github.co ...

随机推荐

  1. Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树+树链剖分+线段树

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...

  2. LRN(local response normalization--局部响应标准化)

    LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似DROPOUT和数据增强作为relu激励之后防止数据过拟合而提出的一种处理方法.这个函数很少使用 ...

  3. Android 虹软免费人脸识别 SDK开发

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得集成ArcFace FD 的集成过程非常简单在 ArcFace FD 的 ...

  4. sql server auto increment - trace flag 272

    从 sql 2012 开始, 微软为了让 insert 时 auto increment 快一些,做了一个 cache 的机制. 这个机制虽然好,但是也有麻烦的情况,如果你的 sql 突然 resta ...

  5. Pytorch Visdom可视化工具

    2018-12-04 14:05:49 Visdom是Facebook专门为PyTorch开发的一款可视化工具,其开源于2017年3月.Visdom十分轻量级,但却支持非常丰富的功能,能胜任大多数的科 ...

  6. linux下逻辑卷管理 调整分区大小

    [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50 ...

  7. gooreplacer 很好用

    国内上 StackOverflow, hackernews 之类的站点会慢. 因为页面里有链接指向 google 谷歌, 会被墙. 于是拖累了整个页面的显示. gooreplacer 可以把这些被墙连 ...

  8. gradlew 的https代理设定

    在内网编译vlc for Android 时, 总是在 [./gradlew assemble] 卡住, 在网上找到了设置代理的方法: 在gradlew 的同一目录,建立一个 gradle.prope ...

  9. 自己动手编写IPv4地址包含关系测试的小脚本

    工作中需要对地址包含关系进行测试,现有ipaddress标准库和IPy无法满足,于是自己动手编写小脚本,主要实现== , in, <等专用功能,其他功能可以后续用到再补充,例如迭代打印网段内所有 ...

  10. 恶意代码分析-使用apataDNS+inetsim模拟网络环境

    准备工作 虚拟机安装: Win7 Ubuntu apateDNS 密码:wplo inetsim 密码:ghla 客户端Win7需要做的工作 安装apateDNS 服务器端Ubuntu需要做的工作 下 ...