簡單介紹Puppeteer
Puppeteer是一個Node庫,它通過DevTools協議提供高級API來控制Chrome或Chromium。Puppeteer默認以無頭方式運行,但可以配置為有頭方式運行。Puppeteer中文”木偶”,很貼切,它可以使用node程序來模擬人操作瀏覽器的行為,比如點擊某個按鈕等。
Puppeteer可以做什么
在瀏覽器中手動執行的大多數操作都可以使用Puppeteer完成!例如:
- 生成頁面的屏幕截圖和PDF。
- 抓取SPA(單頁面應用程序)並生成預渲染內容(即“SSR”(服務器端渲染))。
- 自動化表單提交,UI測試,鍵盤輸入等。
- 創建最新的自動化測試環境。使用最新的JavaScript和瀏覽器功能直接在最新版本的Chrome中運行測試。
- 捕獲時間線跟蹤 您的網站,以幫助診斷性能問題。
- 測試Chrome擴展程序。
官網(入門一定要看的)
https://pptr.dev
一定使用async await來寫異步,這樣會更簡潔
我的應用場景
我老婆有一份list,list中有1000個item左右,每個item需要在網站中搜索,點擊進入詳情,然后切換tab,點擊進入另一個詳情,然后得到某些信息。如果手動操作,大概操作完一個需要3分鍾左右,累計需要3000分鍾(50小時),每天投入1-2小時(大量重復的操作非常無趣,而且累)。我見此情景,分析了下系統,發現很難使用一些ajax的接口就達到目的,看來系統本身做了一些處理。所以我打算使用Puppeteer來幫老婆完成這個工作,大概花了2-3天時間,對Puppeteer有了一些初步的了解,並且爬取了第一步的數據。我打算分步驟抓取數據,遞進的去得到最終的一份清單。
幾個我用到的對象的關系

遇到的一些問題
1. 安裝問題
完整安裝:npm i puppeteer --save 需要設置下淘寶鏡像源

+ puppeteer_download_host = https://npm.taobao.org/mirrors
2. ElementHandle類型的對象click方法不管用處理方法

啟動代碼如下

小結
Puppeteer總體來說非常好用,只不過是用過程中需要不斷去看文檔熟悉接口,是用來爬取各種網頁內容的”利器”。這次我也支持接觸了Puppeteer的以小部分功能而已,以后爭取能夠在更多合適的場景去使用它。
