爬蟲界的掃地僧患亿?一文帶你了解Puppeteer的前世今生

?大數(shù)據(jù)時(shí)代臂拓,衍生出了許多跟數(shù)據(jù)相關(guān)的公司和行業(yè)厚脉。在這個(gè)數(shù)據(jù)為王的時(shí)代,每個(gè)人都必須掌握一手獲取數(shù)據(jù)的能力胶惰!

01

什么是Puppeteer?

Puppeteer 是一個(gè) Node 庫傻工,它提供了一個(gè)高級(jí) API 來通過 DevTools 協(xié)議控制 Chromium 或 Chrome。我們來看看Puppeteer單詞原本的意思:


Puppete 的原意為木偶,即很多90后小時(shí)候聽的木偶奇遇記的故事里面講述的那個(gè)說謊后鼻子會(huì)變長(zhǎng)的“小孩”中捆。根據(jù)這個(gè)單詞的意思鸯匹,我們就很清楚的明白Puppeteer的執(zhí)行原理就是像操縱木偶的人一樣,通過各種方式(接口)進(jìn)行操縱瀏覽器幫你執(zhí)行各種操作的工具泄伪。

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


02

Puppeteer 能幫我們具體做什么臂容?

簡(jiǎn)單來說科雳,你能在瀏覽器里做的大部分事情,Puppeteer都可以做脓杉!像打開標(biāo)簽頁糟秘,打開百度,輸入搜索關(guān)鍵詞球散,點(diǎn)擊搜索尿赚,點(diǎn)擊下一頁....等等你的日常操作行為都能模擬,其它的你不常使用的楷哥也整理了一些:

生成頁面 PDF

抓取 SPA(單頁應(yīng)用)并生成預(yù)渲染內(nèi)容(即“SSR”(服務(wù)器端渲染))

自動(dòng)提交表單蕉堰,進(jìn)行 UI 測(cè)試凌净,鍵盤輸入等

創(chuàng)建一個(gè)實(shí)時(shí)更新的自動(dòng)化測(cè)試環(huán)境

使用最新的 JavaScript 和瀏覽器功能直接在最新版本的Chrome中執(zhí)行測(cè)試

捕獲網(wǎng)站的timeline trace,幫助你分析該網(wǎng)站的性能問題

測(cè)試瀏覽器的自動(dòng)化擴(kuò)展

03

Puppeteer 為什么可以做到控制瀏覽器屋讶?

Puppeteer之所以可以幫助我們做這么多冰寻,首先我們需要分析下Puppeteer的整體架構(gòu):

我們可以從圖中看到Puppeteer將瀏覽器分為了幾個(gè)部分:Browser(瀏覽器),Context(上下文),Page(頁面或標(biāo)簽)皿渗,Workers(工人)等部分斩芭,他們之間的關(guān)系是:

Puppeteer 使用 DevTools 協(xié)議 與瀏覽器進(jìn)行通信。

Browser 實(shí)例可以擁有瀏覽器上下文乐疆。

BrowserContext 實(shí)例定義了一個(gè)瀏覽會(huì)話并可擁有多個(gè)頁面划乖。

Page 至少有一個(gè)框架:主框架〖吠粒可能還有其他框架由 iframe 或 框架標(biāo)簽 創(chuàng)建琴庵。

frame 至少有一個(gè)執(zhí)行上下文 - 默認(rèn)的執(zhí)行上下文 - 框架的 JavaScript 被執(zhí)行。一個(gè)框架可能有額外的與 擴(kuò)展 關(guān)聯(lián)的執(zhí)行上下文仰美。

Worker 具有單一執(zhí)行上下文迷殿,并且便于與 WebWorkers 進(jìn)行交互。

04

Puppeteer VS Puppeteer-core咖杂?

Puppeteer從v1.7.0開始庆寺,每個(gè)版本都會(huì)發(fā)布兩個(gè)包:

Puppeteer

Puppeteer-core

Puppeteer是瀏覽器自動(dòng)化的產(chǎn)品。安裝后翰苫,它會(huì)下載一個(gè)版本的 Chromium,然后使用Puppeteer-core 驅(qū)動(dòng)工作。作為最終用戶產(chǎn)品奏窑,Puppeteer支持一堆方便的 PUPPETEER* env 變量來調(diào)整行為导披。Puppeteer-core 是一個(gè)核心庫來幫助驅(qū)動(dòng)任何支持 DevTools 協(xié)議的東西。Puppeteer-core 在安裝時(shí)不會(huì)下載 Chromium埃唯。作為一個(gè)庫撩匕,Puppeteer-core 是完全是通過其編程接口驅(qū)動(dòng)的并忽略所有PUPPETEER* env 變量。

總結(jié)一下墨叛,Puppeteer-core 與Puppeteer不同的地方:

Puppeteer-core 在安裝時(shí)不會(huì)自動(dòng)下載 Chromium

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

大多數(shù)情況下止毕,你可以使用Puppeteer來進(jìn)行實(shí)際的應(yīng)用開發(fā),而如果是考慮下載及打包速度問題或者正在構(gòu)建一個(gè)DevTools協(xié)議頂部的產(chǎn)品庫漠趁,這時(shí)你可以選擇使用Puppeteer-core來進(jìn)行開發(fā)扁凛。

05

爬蟲掃地僧?為什么闯传?

了解了Puppeteer的背景及功能谨朝,很多朋友都會(huì)猜到為什么Puppeteer被稱之為爬蟲界的掃地僧了吧?因?yàn)槠淠M的是真實(shí)用戶的操作甥绿,從打開標(biāo)簽頁字币,到輸入關(guān)鍵詞,甚至在輸入過程中模擬用戶打字速度的這種精細(xì)操作都會(huì)嚴(yán)重混淆服務(wù)端風(fēng)控服務(wù)的判斷共缕,那一般的風(fēng)控系統(tǒng)會(huì)從幾個(gè)方面進(jìn)行反爬蟲洗出?

接口調(diào)用頻次限制

同IP的訪問頻次

驗(yàn)證碼

登錄token驗(yàn)證

鏈接隨機(jī)化

Request請(qǐng)求頭驗(yàn)證

......

但這些驗(yàn)證對(duì)Puppeteer來說,基本無效图谷。因?yàn)閷?duì)于整個(gè)請(qǐng)求方式和行為判斷上講翩活,用戶的真實(shí)場(chǎng)景模擬會(huì)直接宣布以上攔截方案的死刑。

本文簡(jiǎn)單了解了Puppeteer的背景及整體架構(gòu)蜓萄,那肯定會(huì)有朋友問具體怎么使用呢隅茎?關(guān)注楷哥,我們繼續(xù)交流探討嫉沽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辟犀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绸硕,更是在濱河造成了極大的恐慌堂竟,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻佩,死亡現(xiàn)場(chǎng)離奇詭異出嘹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)咬崔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門税稼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烦秩,“玉大人,你說我怎么就攤上這事郎仆≈混簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵扰肌,是天一觀的道長(zhǎng)抛寝。 經(jīng)常有香客問我,道長(zhǎng)曙旭,這世上最難降的妖魔是什么盗舰? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮桂躏,結(jié)果婚禮上钻趋,老公的妹妹穿的比我還像新娘。我一直安慰自己沼头,他們只是感情好爷绘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著进倍,像睡著了一般土至。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猾昆,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天陶因,我揣著相機(jī)與錄音,去河邊找鬼垂蜗。 笑死楷扬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贴见。 我是一名探鬼主播烘苹,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼片部!你這毒婦竟也來了镣衡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤档悠,失蹤者是張志新(化名)和其女友劉穎廊鸥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辖所,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惰说,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缘回。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆视。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡典挑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啦吧,到底是詐尸還是另有隱情搔弄,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布丰滑,位于F島的核電站,受9級(jí)特大地震影響倒庵,放射性物質(zhì)發(fā)生泄漏褒墨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一擎宝、第九天 我趴在偏房一處隱蔽的房頂上張望郁妈。 院中可真熱鬧,春花似錦绍申、人聲如沸噩咪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胃碾。三九已至,卻和暖如春筋搏,著一層夾襖步出監(jiān)牢的瞬間仆百,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工奔脐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俄周,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓髓迎,卻偏偏與公主長(zhǎng)得像峦朗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子排龄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Puppeteer[https://github.com/puppeteer/puppeteer] 是 Chrom...
    明么閱讀 1,799評(píng)論 0 1
  • 前言 最近想玩一下node的爬蟲波势,發(fā)現(xiàn)crawler的爬取功能十分受限,特別是在現(xiàn)在滿大街都是vue涣雕,angula...
    xurna閱讀 3,403評(píng)論 0 1
  • 木偶也是有心的~?? 背景 目前負(fù)責(zé)的幾十多個(gè)頁面管理系統(tǒng)平臺(tái)艰亮,產(chǎn)品發(fā)版迭代頻繁,除了本業(yè)務(wù)線會(huì)修改邏輯代碼挣郭,其他業(yè)...
    迷途de小書童閱讀 314評(píng)論 0 2
  • 模擬瀏覽器操作神器Puppeteer初探 介紹 ??剛接觸到puppeteer迄埃,并不是用來做爬蟲,只是想做一個(gè)后臺(tái)...
    懶癌程序員閱讀 736評(píng)論 0 4
  • 漸變的面目拼圖要我怎么拼逞怨? 我是疲乏了還是投降了者疤? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜叠赦。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,246評(píng)論 0 13