The Issue of the Day Before

在 Linux 上安裝 Puppeteer

spider -

安裝 nodejs v6.4.0 以上 → 安裝 Puppeteer → 安裝依賴套件與函式庫或字型。

Why

隱形斗篷是很多人的幻想,但無頭騎士卻是傳說。

在跟大神許願多次後,Chromev59 之後,支援無介面(headless)的模式,實現了看不見的夢想。 參見 Getting Started with Headless Chrome

為了不讓你的瀏覽器像無頭蒼蠅一樣亂飛, Google 還貼心提供 Puppeteer(操偶師) 來幫忙。

What

Puppeteer

Puppeteer 是使用 nodejs 開發一組高階 API ,可以用來的控制 Chrome 螢幕截圖,創建 PDF ,導航頁面以及獲取頁面信息。

ldd

一個 shell script。輸出程序所需的 share lib。語法:ldd [option]…​ file…​

How

安裝 nodejs

v1.18.1, Puppeteer required at least Node v6.4.0.

v1.18.1 to v2.1.0 required Node 8.9.0+.

v3.0.0 required Node 10.18.1+.

安裝 Puppeteer

$ npm install puppeteer
// Chromium downloaded to ./node_modules/puppeteer/.local-chromium/linux-xxxxxx

Puppeteer 同時會安裝一個與之搭配版本的 Chrome。最好不要任意更換。 該 Chrome 程式會放在 node_modules/puppeteer 目錄下的 .local-chromium/linux-<vaersion>/chrome-linux/chrome

安裝依賴套件與函式庫

如果不是安裝在視窗界面下,則你可能要再安裝一些相關圖型函式庫。

使用 ldd 來查閱相關依賴。

$ ldd ./node_modules/puppeteer/.local-chromium/linux-<version>/chrome-linux/chrome | grep not
/* maybe
libX11-xcb.so.1 => not found
libXcomposite.so.1 => not found
libXcursor.so.1 => not found
libXdamage.so.1 => not found
libXfixes.so.3 => not found
libXi.so.6 => not found
libXrender.so.1 => not found
libXtst.so.6 => not found
libcups.so.2 => not found
libXss.so.1 => not found
libXrandr.so.2 => not found
libasound.so.2 => not found
libpangocairo-1.0.so.0 => not found
libpango-1.0.so.0 => not found
libcairo.so.2 => not found
libatk-1.0.so.0 => not found
libatk-bridge-2.0.so.0 => not found
libgtk-3.so.0 => not found
libgdk-3.so.0 => not found
libgdk_pixbuf-2.0.so.0 => not found
*/

使用 sudo apt-file search <not found share lib>

可能需要的函式庫如下:

libx11-xcb1 - Xlib/XCB interface library
libxcomposite1 - X11 Composite extension library
libxcursor1 - X cursor management library
libxdamage1 - X11 damaged region extension library
libxi6 - X11 Input extension library
libxext6 - X11 miscellaneous extension library
libxtst6 - X11 Testing -- Record extension library
libcups2 - Common UNIX Printing System(tm) - Core library
libxss1 - X11 Screen Saver extension library
libxrandr2 - X11 RandR extension library
libasound2 - shared library for ALSA applications
libpangocairo-1.0-0 - Layout and rendering of internationalized text
libatk1.0-0 - ATK accessibility toolkit
libgtk-3-0 - GTK+ graphical user interface library
libatk-bridge2.0-0 - AT-SPI 2 toolkit bridge - shared library

查出相關依賴函式庫後,再逐一安裝,即可。

$ sudo apt-get install -y libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxext6 libxtst6 libcups2 libxss1 libxrandr2 libpangocairo-1.0-0 libatk1.0-0 libgtk-3-0 libatk-bridge2.0-0

或你可以試試下面的程式碼來幫助你完成。

postinstall
#!/bin/sh

sudo apt install -y apt-file
sudo apt-file update

find ./node_modules/puppeteer/.local-chromium -name *chrome -type f | \
xargs -r -i ldd {} | grep not | awk NF | awk '{print $1}' | \
xargs -r -i apt-file search {} | awk '{print $1}' | uniq | awk -F":" '{print $1}' | \
xargs -r -i sudo apt install -y {}

安裝字型

如果你的宣染後的截圖,中文的部分出現亂碼,可能是因為系統上沒有相關的字型。 可以使用 fc-list | grep <font-name> 檢查是否有網頁需要的字型。

如果沒有則找到網頁上宣告需要的字型檔,將之複製到執行系統上並執行 fc-cache -v -f 將字型載入 cache ,即可。

e.q. font-family: "微軟正黑體";

$ fc-list | grep 正黑
$ mkdir /usr/share/fonts/truetype/ms-font
$ cp MSJH.TTC /usr/share/fonts/truetype/ms-font
$ fc-cache -v -f /usr/share/fonts/truetype/ms-fonts
$ fc-list | grep 正黑
// /usr/share/fonts/truetype/ms-fonts/MSJH.TTC: Microsoft JhengHei,微軟正黑體:style=Normal,Regular,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
閱讀在雲端