LoginSignup
2
2

More than 3 years have passed since last update.

Puppeteerを2系から3系にアップデートしたらError: Failed to launch the browser process!

Posted at

Puppeteerメモです。

Heroku上で利用していたPuppetterのバージョンを2系->3系にアップデートしたらエラー発生。

Puppetterのバージョンを2系->3系にするとChromiumのバージョン違いで動かないっぽい

Heroku上のログ

Error: Failed to launch the browser process!
2020-05-27T21:22:10.217234+00:00 app[web.1]: /app/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libgbm.so.1: cannot open shared object file: No such file or directory

Heroku上でインストールされているChromiumを更新する

https://github.com/puppeteer/puppeteer/releases

Puppetterのv3.1.0ではChromium 83.0.4103.0 (r756035)を利用していると、Big changesと書かれていて、内部で利用するChromiumのバージョンが違う模様です。

最初にインストールしたときはPuppetterのv2系だったので、その時に対応していたバージョンのChromiumがHeroku側に残ったままになってるんだと思います。

bildpackを再ビルド

$ heroku buildpacks:add jontewks/puppeteer

その後デプロイしなおす(git push heroku master)と再度ビルドされてHeroku上のChromiumも更新されてこれで問題なく利用できるようになりました。

その他メモ

その他触っててでたエラーをメモ的に残しておきます。

TimeoutError: Navigation timeout of 30000 ms exceeded

タイムアウト。
デフォルトだと30秒待ってくれるみたいだけど、それ以上かかる場合もありそう。

page.goto()のオプションで{waitUntil: 'networkidle'}を指定するっぽいけど更にエラーが

Error: ERROR: "networkidle" option is no longer supported. Use "networkidle2" instead

なるほど

page.goto(url, {waitUntil: 'networkidle2'})

でうまくいった。

Error: Evaluation failed: TypeError: Cannot set property 'value' of null

こんな雰囲気でiPhoneでのページ閲覧エミュレートをしてましたが、

const devices = require('puppeteer/DeviceDescriptors');
const iPhone = devices['iPhone X'];

省略

await page.emulate(iPhone);

これもv2->3にあげたらError: Evaluation failed: TypeError: Cannot set property 'value' of nullとエラーが発生し、うまく動作しなくなってしまいました。

これパッと調べても原因や解決策がわからなかったので、iPhoneでのエミュレートを泣く泣く断念。

今回やりたかったのはデスクトップエミュレートでもなんとかなったのでよかったけど、必要になったらまた調べないと...

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2