puppeteer實戰系列-介紹及安裝(一)

前言

Puppeteer 是一個 Node 庫,它提供了一個高級API來控制DevTools協議上的Chrome或Chromium。 Puppeteer默認運行無頭,但能夠配置爲運行完整(非無頭)Chrome或Chromiumlinux

用處

能夠在瀏覽器中手動執行的大多數事情均可以使用 Puppeteer 完成!如下是一些能夠入門的示例:git

  1. 生成頁面的屏幕截圖和PDF
  2. 爬取SPA應用,並生成預渲染內容(即 SSR 服務端渲染)
  3. 自動化表單提交,UI測試,鍵盤輸入等
  4. 建立最新的自動化測試環境。使用最新的 JavaScript 和瀏覽器功能直接在最新版本的Chrome中運行測試
  5. 捕獲網站的時間線跟蹤,以幫助診斷性能問題
  6. 測試Chrome擴展程序

安裝及部署

本地 MacOS :github

yarn add puppeteer
複製代碼

down不下來就試試換源,推薦 nrm 工具chrome

yarn global add nrm
複製代碼

nrm use taobao
複製代碼

Centos 7 : 須要安裝如下依賴,確保任務能夠正常執行,相關字體依賴是解決截圖後中文亂碼問題的。(更多運行上的問題也能夠查看此連接docker

yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc
複製代碼

再設置npm

const browser = await puppeteer.launch({
  args: [ '--no-sandbox', '--disable-setuid-sandbox' ]
})
複製代碼

Docker :瀏覽器

官方推薦使用 args參數:--disable-dev-shm-usage 默認狀況下,Docker運行一個/dev/shm共享內存空間爲64MB 的容器。這一般對Chrome來講過小,而且會致使Chrome在渲染大頁面時崩潰。要修復,必須運行容器 docker run --shm-size=1gb 以增長/dev/shm的容量。從Chrome 65開始,使用--disable-dev-shm-usage標誌啓動瀏覽器便可,這將會寫入共享內存文件/tmp而不是/dev/shmbash

注⚠️: 在某些狀況下(尤爲在Docker中)很難正確終止Chrome。若是你遇到不少殭屍Chrome進程,那麼 dumb-init 值得一試。對於PID = 1的進程有特殊處理,less

最後 若是仍是down不下來puppeteer,那麼請戳這裏下載Chromium,放入對應的環境或者項目裏。 再設置 .npmrc 跳過下載 Chromium工具

puppeteer_skip_chromium_download = true
複製代碼

再啓動瀏覽器

const options = {
  headless: true,
  timeout: 0,
  args: [ '--no-sandbox', '--disable-setuid-sandbox' ],
  ignoreHTTPSErrors: true
};

const platform = os.platform().toLocaleLowerCase();

// 你所存放的路徑
if (platform === 'linux') {
  options.executablePath = path.join(__dirname, '../../../chrome-linux/chrome');
}

const browser = await puppeteer.launch(options);
複製代碼

Have fun !

相關文章
相關標籤/搜索