爬虫界的扫地僧?一文带你了解Puppeteer的前世今生

 大数据时代,衍生出了许多跟数据相关的公司和行业。在这个数据为王的时代,每个人都必须掌握一手获取数据的能力!

01

什么是Puppeteer?

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。我们来看看Puppeteer单词原本的意思:


Puppete 的原意为木偶,即很多90后小时候听的木偶奇遇记的故事里面讲述的那个说谎后鼻子会变长的“小孩”。根据这个单词的意思,我们就很清楚的明白Puppeteer的执行原理就是像操纵木偶的人一样,通过各种方式(接口)进行操纵浏览器帮你执行各种操作的工具。

截至目前,Puppeteer的最新版本为v5.5.0,于2020年11月16日更新


02

Puppeteer 能帮我们具体做什么?

简单来说,你能在浏览器里做的大部分事情,Puppeteer都可以做!像打开标签页,打开百度,输入搜索关键词,点击搜索,点击下一页....等等你的日常操作行为都能模拟,其它的你不常使用的楷哥也整理了一些:

生成页面 PDF

抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))

自动提交表单,进行 UI 测试,键盘输入等

创建一个实时更新的自动化测试环境

使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试

捕获网站的timeline trace,帮助你分析该网站的性能问题

测试浏览器的自动化扩展

03

Puppeteer 为什么可以做到控制浏览器?

Puppeteer之所以可以帮助我们做这么多,首先我们需要分析下Puppeteer的整体架构:

我们可以从图中看到Puppeteer将浏览器分为了几个部分:Browser(浏览器),Context(上下文),Page(页面或标签),Workers(工人)等部分,他们之间的关系是:

Puppeteer 使用 DevTools 协议 与浏览器进行通信。

Browser 实例可以拥有浏览器上下文。

BrowserContext 实例定义了一个浏览会话并可拥有多个页面。

Page 至少有一个框架:主框架。可能还有其他框架由 iframe 或 框架标签 创建。

frame 至少有一个执行上下文 - 默认的执行上下文 - 框架的 JavaScript 被执行。一个框架可能有额外的与 扩展 关联的执行上下文。

Worker 具有单一执行上下文,并且便于与 WebWorkers 进行交互。

04

Puppeteer VS Puppeteer-core?

Puppeteer从v1.7.0开始,每个版本都会发布两个包:

Puppeteer

Puppeteer-core

Puppeteer是浏览器自动化的产品。安装后,它会下载一个版本的 Chromium,然后使用Puppeteer-core 驱动工作。作为最终用户产品,Puppeteer支持一堆方便的 PUPPETEER* env 变量来调整行为。Puppeteer-core 是一个核心库来帮助驱动任何支持 DevTools 协议的东西。Puppeteer-core 在安装时不会下载 Chromium。作为一个库,Puppeteer-core 是完全是通过其编程接口驱动的并忽略所有PUPPETEER* env 变量。

总结一下,Puppeteer-core 与Puppeteer不同的地方:

Puppeteer-core 在安装时不会自动下载 Chromium

Puppeteer-core忽略所有的 PUPPETEER_* env 变量

大多数情况下,你可以使用Puppeteer来进行实际的应用开发,而如果是考虑下载及打包速度问题或者正在构建一个DevTools协议顶部的产品库,这时你可以选择使用Puppeteer-core来进行开发。

05

爬虫扫地僧?为什么?

了解了Puppeteer的背景及功能,很多朋友都会猜到为什么Puppeteer被称之为爬虫界的扫地僧了吧?因为其模拟的是真实用户的操作,从打开标签页,到输入关键词,甚至在输入过程中模拟用户打字速度的这种精细操作都会严重混淆服务端风控服务的判断,那一般的风控系统会从几个方面进行反爬虫?

接口调用频次限制

同IP的访问频次

验证码

登录token验证

链接随机化

Request请求头验证

......

但这些验证对Puppeteer来说,基本无效。因为对于整个请求方式和行为判断上讲,用户的真实场景模拟会直接宣布以上拦截方案的死刑。

本文简单了解了Puppeteer的背景及整体架构,那肯定会有朋友问具体怎么使用呢?关注楷哥,我们继续交流探讨。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • Puppeteer[https://github.com/puppeteer/puppeteer] 是 Chrom...
    明么阅读 1,766评论 0 1
  • 前言 最近想玩一下node的爬虫,发现crawler的爬取功能十分受限,特别是在现在满大街都是vue,angula...
    xurna阅读 3,350评论 0 1
  • 木偶也是有心的~😜 背景 目前负责的几十多个页面管理系统平台,产品发版迭代频繁,除了本业务线会修改逻辑代码,其他业...
    迷途de小书童阅读 293评论 0 2
  • 模拟浏览器操作神器Puppeteer初探 介绍   刚接触到puppeteer,并不是用来做爬虫,只是想做一个后台...
    懒癌程序员阅读 703评论 0 4
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,227评论 0 13