puppeteerってすごい便利だよね。
chromeが開発してるし、nodejsから簡単に操作できる。
チュートリアルみても、数行で動かせちゃうこの楽さ(*´∀`*)!!
1 2 3 4 5 6 7 8 9 10 11 |
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); console.log("クローリング完了!!!") })(); |
これで動いちゃうらしいから、最高だーー!!と思うでしょ。
でも、実際チュートリアルを見ながらコード書いてみると
めちゃくちゃエラー、とにかくエラー(´・ω・`)。
公式のトラブルシューティングを追っかけても
解決しないことが多々あるようで。
今回は僕が引っかかったところの突破方法を残しておきます。
概要
よくあるエラー
代表的なエラーとしてあるのが、
- 権限が正しく設定されていない
- --no-sandboxモードで起動していない。
- 依存パッケージが不足している。
公式のトラブルシューティング
権限が正しく設定されていない
まず最初に権限の設定をしていない場合、さっさと変更しちゃいましょう。
workdirからchrome-linuxに移動してください
1 |
cd node_modules/puppeteer/.local-chromium/linux-536395/chrome-linux/ |
移動したらこの一行を実行してくださいな。
1 |
sudo chown root:root chrome_sandbox && sudo chmod 4755 chrome_sandbox && export CHROME_DEVEL_SANDBOX="$PWD/chrome_sandbox" |
これで権限問題は解決します。
--no-sandboxモードで起動していない。
次によく見られるのが、--no-sandboxモードで起動していないことです。
これは、チュートリアルでは書いていないものの、基本的に書いたほうがいいところなので、
先ほどの、nodejsの方のコードを修正します。
launch()の中にargsを設定してください。
1 2 3 4 5 6 7 8 9 10 |
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({args: ['--no-sandbox']}); //<-ここ!! launch()の中に引き数追加してね。 const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); console.log("クローリング完了!!!") })(); |
モードの変更はこれでオッケー。
依存パッケージが不足している。
最後に意外と多いのが依存パッケージ不足です。
chrome headressは結構使用するパッケージが多いです。
なので、一気にいれときましょ。
1 |
sudo yum -y 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 |
入れるの多いっ!!笑
これで基本的におーけーらしい。
問題は僕の環境ではこれじゃまるで解決しなかった。
結局chromeは起動せず(´・ω・`)
なんか解決策をさぐりに、chromeのgithubをごそごそ。ネットをごそごそ。
意外な原因: Headress-Chromeが古い
これだぁぁぁぁぁ!!
最終的に解決に繋がったのは、
最新のheadress-chromeをインストールすることでした。
最新のrpmを追加したことで問題なく起動するようになりました。
1 |
sudo yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm |
良かったよかった。
これで楽しいクローリングライフを満喫できるね!
じゃあね〜〜〜。