Puppeteer使おうとしたらエラーに悩まされたので解決策【Ubuntu】

Puppeteer Error!!!!!

結構色々調べて解決しようと思ったんだけどなかなかできなかったので(パカ)

ここにまとめて最初からやり方を書いておきます。

環境

・Ubuntu 20.04 LTS
・Apache2 サーバー
・nodejs : v10.19.0
・npm : 6.14.4

Ubuntu20を使っていますがUbuntu18.でも同じように行けると思います。

動作確認後日本語フォントのインストールまでをします。

Apach2のインストール

説明のために新しくUbuntuサーバーを立てたのでApacheのインストールから行っていきます。

既にインストールされている方は少し飛ばしてください。

と、その前に

sudo su
passwd root
passwd ubuntu
sudo apt -y update
sudo apt -y upgrade

一応パスワード設定とupdateとupgradeをしておきます。

それでは

sudo apt -y install apache2

これでApacheのインストール完了

ブラウザからドメインにアクセスしましょう。

デフォルトページを確認出来ると思います。

npmのインストール

nodejsのインストールですね!

npmをインストールしたら自動的にnodejsもインストールされるのでnpmのインストールだけで大丈夫です。

sudo apt -y install npm

これで

npm -v
nodejs -v

とするとバージョンが表示されていると思います。表示されたらOKです。

Puppeteerのインストール

さていよいよパペティアのインストールですね!

まずはPuppeteerをインストールするディレクトリに移動します。

cd /var/www/html

大体ここら辺ですかね?

しっかり移動できたら

sudo npm install puppeteer

このコマンドでpuppeteerをインストールします。

方法は問いませんがmain.jsファイルを作って。

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('http://google.co.jp');
    await page.screenshot({path: 'example.png'});

    await browser.close();
})();

これを記述しておいてください。

あとURLはhttps://だとエラーが出るのでhttp://に変えましょう。

試しにこれで実行してみます。

node main.js

と実行しましょう。

すると

(node:34206) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!
/var/www/html/node_modules/puppeteer/.local-chromium/linux-818858/chrome-linux/chrome: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

こんなエラーが出るかと思います。

「libnss3.soが無い!」と言われているので

必要なモジュール等をインストールします。

sudo apt -y install ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils

これをコピペでそのまま実行すればOKです。

そして

node main.js

でまた実行します。

またまたエラー!

UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process![1204/060416.551539:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

とのことで--no-sandboxを付けなければいけないみたいですね!

ソースを以下のように変更

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
    const page = await browser.newPage();
    await page.goto('http://google.co.jp');
    await page.screenshot({path: 'example.png'});

    await browser.close();
})();

でまた実行

node main.js

エラー

UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, open 'example.png'

パーミッションエラーですね。

sudo node main.js

で実行。

できました!

ただ文字化けしているのでこれも直しましょう!

文字化けを直す

sudo apt install 'fonts-takao-gothic'

以上です。

ふう

実際にやったときもっとエラー出たキタするんだけど思ったより少なかったな。

まあ他にもエラーを思い出したら説明すると思うのでよろしくお願いします。

コメント

タイトルとURLをコピーしました