PhantomJSを使った処理を作っていたら、なんかうまくいかなかったので
Googleが作っているというnode.jsからchromiumを実行するモジュール「puppeteer」を使った時のメモ
インストール
実行環境はCentos7.3
まずはnpmコマンドでモジュールのインストールをします。
npm install puppeteer -g
このコマンドでpuppetterとchromiumがグローバルインストールされます。
しかし、これだけでは依存関係のすべてがインストールされるわけではないので、
足りないものがある場合は別途インストールする必要があります。
puppeteerがインストールされているディレクトリに移動して
依存関係の一覧と有無を確認します
cd node_modules/puppeteer/.local-chromium/linux-499413/chrome-linux
ldd ./chrome
このコマンドで出力される内容の内、not found になっているものをyum等を使ってインストールします。
インストールした後、もう一度同じようにコマンドを実行し、not found がなくなればOKです
実行
puppeteerをrootユーザーで実行する場合は
test.js
puppeteer.lunch()
ではエラーになるので
以下のように明示的に--no-sandboxのオプションを付ける必要がある
puppeteer.lunch({args: ['--no-sandbox']})
実際に使うとこんな感じ
screenshot.js
async function screenShot (url){
var puppeteer = require("puppeteer")
try{
const browser = await puppeteer.launch({ args: ['--no-sandbox'], timeout: 30000 });
const page = await browser.newPage();
await page.goto(url);
await page.screenshot({ "path": "path/to/png or jpg" });
await browser.close();
console.log("OK")
}catch(e){
console.log(e)
}
}
スクリーンショットを取ってくるサンプルです。
画面サイズの指定がないので、見切れたりするかも・・
ちなみに、puppeteerはPromiseベースなのでasync/awaitと相性がいいです。