💨
heroku 及びec2でnodejsのpuppeteerでheadless chromeを動かす時の注意点
ローカルでは動くのに何故かHerokuでは期待した要素のデータを取得してくれないため1日程度手間がかかった。同じように困っている人のためのtips。herokuで動かないのでawsでec2インスタンスを構築して、同様の問題が起こるのを確認してから修正したため、ec2インスタンスでも同様の問題が発生する。
ビルドパックをちゃんと入れているか?
ビルドパックの読み込み順は正しいか?
Heroku用の環境変数の判定を入れているか?
オプションを設定してるか?
ドキュメント読み込みをしているか?
postbuild(これは不要だった。
環境変数が設定されているか?
環境変数PUPPETEER_SKIP_CHROMIUM_DOWNLOADが設定されていて、trueに設定されていることを確認してください。これはHerokuでPuppeteerを使用する際に重要な設定です。
Copy code
heroku config:set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
これらの確認と修正を行った後、アプリケーションを再デプロイしてエラーが解消されるかどうかを確認してください。また、デバッグ情報を得るために、Puppeteerの起動オプションでdumpio: trueを設定することも検討してみてください。これにより、ブラウザプロセスからのすべての入出力がstdoutとstderrにダンプされます。
waitforsecondで要素を待つ
UserAgentを設定する(これが一番重要だった)
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134');
ViewPortで画面サイズを設定する
await page.setViewport({
width: 1440,
height: 680,
deviceScaleFactor: 1,
});
Discussion