原文地址:zhangzippo.github.io/posts/2019/…javascript
相信你們在使用puppeteer的時候會遇到各類各樣的問題,好比本來在mac上跑的好好的卻發如今centos/docker上遭遇各類各樣的問題, 這裏把我所遇到的坑跟你們說一下。html
首當其中就是安裝的問題了,這個在mac上沒什麼問題,這裏介紹在centos上的問題,puppeteer含有兩個包puppeteer VS puppeteer-core,什麼區別呢?簡單來講就是puppeteer = api+chromeium(最新),puppeteer-core = only Api,官方是這麼說的:java
puppeteer-core
與puppeteer
不一樣的地方:node
puppeteer-core
在安裝時不會自動下載 Chromium。puppeteer-core
忽略全部的PUPPETEER_*
env 變量.
當你本身安裝chromeium的時候,在啓動(puppeteer.launch())的時候須要指定chromeium的啓動路徑,固然本身安裝存在更新的問題,可能因爲更新不及時致使與puppeteer的api不匹配的狀況,因此咱們推薦直接安裝puppeteer。而後呢,當你在centos上安裝的時候毫無疑問的會報錯。由於缺乏chromeium啓動的依賴,本人在centos6和7上都遇到了坑,下面是官方列舉的centos上的所需依賴:linux
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-miscgit
只須要一頓 yum install 就好。固然事情可能不是這樣的,當你啓動chromeium時(推薦在服務器上測試的時候先進入到node_modules/puppeteer/.local-chromium/linux-496140/chrome-linux/chrome目錄下執行./chrome進行測試,能成功運行表明經過puppeteer的api調用也能成功)你可能會遇到例如:github
error while loading shared libraries: libpangocairo-1.0.so.0: cannot open shared object file: No such file or directory 這樣的錯誤,提示你缺乏的是一個so文件,你能夠在執行文件目錄下執行這個命令進行查看缺乏哪些依賴: ldd chrome | grep not 命令執行後會顯示你當前缺乏的依賴,當你不知道對應的.so在哪一個包中的時候執行這個命令: yum provides | grep xx.so.0chrome
找到對應的包進行yum install 安裝,注意32仍是64位的,不要裝錯。當ldd chrome | grep not 結果爲空時表明全部依賴都已經安裝,本人在centos6.5上測試時,安裝了全部依賴依然提示缺乏某個依賴,查了一下,居然發現存在於firefox的包中,很是費解,segmentfault.com/a/119000001… 這篇文章的做者與我遇到一樣的問題解決了,然而我相同作法後依然沒有解決,仍是沒法啓動chrome,並且chrome要依賴別的瀏覽器的包實在有點兒...後來google了一下好像是6.5版本對於chrome的支持有限,遂我換成了centos7.6,繼續,安裝很順利..沒什麼坑。其餘可能遇到下載chromium失敗的狀況,這個在.npmrc指定一下下載源docker
PUPPETEER_DOWNLOAD_HOST = npm.taobao.org/mirrorsnpm
你覺得安裝完就沒坑了?no,no,no。啓動還能坑你一回,若是你直接啓動會報這個錯誤:
No usable sandbox! Update your kernel or see chromium.googlesource.com/chromium/sr… for more information on developing with the SUID sandbox. If you want to livedangerously and need an immediate workaround, you can try using --no-sandbox.
啥意思呢?就是你正常應該將chrome運行在一個沙盒中,可是你沒配置,對應的網址和puppeteer的文檔中有寫怎麼操做建立沙盒,下面這個:github.com/GoogleChrom…
然而我照着作並不行,仍是報錯,因而採用planB 加 --no-sandbox,官方的例子是:
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
複製代碼
咱們測試的時候能夠執行 ./chrome --no-sandbox --disable-setuid-sandbox 而後若是你是直接執行./chrome (js中的例子默認headless=true )你又會看到這個錯誤:
Gtk-WARNING **: 23:01:03.809: cannot open display 我不太熟悉linux,但這個意思就是說你不能打開一個圖形界面,別去百度了,若是你也是linux小白。咱們在後面加上 --headless 就能夠了,到此啓動也沒問題了。
啓動都沒問題了還有什麼坑呢?我這裏在使用時遇到一些問題,與你們共勉吧,若是你也遇到的話注意排查問題。
可能後面還會遇到不少坑,慢慢看吧.....