LoginSignup
6
5

More than 3 years have passed since last update.

aws lambdaでPython + Selenium + Headless Chromium

Last updated at Posted at 2020-12-21

Lambdaでスクレイピングを定期実行してDynamoDBに貯めるアプリケーションを作っています。

早速ググるとたくさん記事が出てくる。ありがたい。
こちらの記事を参考にさせていただいてトライしていたが、2日くらいハマってしまったポイントがあったのでメモ。

   こちらのchromedriver_linux64.zip

cloud9(AmazonLinux)から持ってくる image.png

lambdaレイヤーはPython3.6
当然lambdaのランタイムも3.6

ハマりポイント

何度もバージョンを確認したが、lambda上で以下のエラー
Chrome failed to start: exited abnormally\n (unknown error: DevToolsActivePort file doesn't exist)

以下の記事など、オプションにいくつか追加することで直るという意見が多い。
https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t

記事ではjavaコードだが、Pythonに直して、

options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")

しかし

別のエラーが発生
unknown error: unable to discover open window in chrome

結局、上記のいくつかに加え、この記事の
options.add_argument("--single-process")
を足すことで解決した。 
https://stackoverflow.com/questions/60229291/aws-lambda-ruby-crawler-selenium-chrome-driver-unknown-error-unable-to-discov

options.add_argument("--headless")に加えて、最終的にトラブルシューティングとして追加したオプション設定はこちら

options.add_argument("--single-process")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")

 ハマりポイント もう一個

lambdaにレイヤーをアップロードする際、
headless-chromeというdirにheadless-chromeとchromedriverおいてzip化したのだが、7zipでやるとexecutable may have wrong permission みたいなエラーで動かず。
色々見てると、windowsのzipだと、デプロイパッケージがうまく動かないらしいので、wslのubuntuでzip化したら。この問題は解決した。

備考

スクレイピングの方法について、Cloud Funtion + Typescript Puppeteerとも迷ったが、

  • 書かなければいけないスクレイピングの件数が非常に多く、スクレイピングコードを快適に書けることを重視したい
  • Ajaxを使ったサイトからも正しく情報を取得したい
  • AWS勉強したい ということで、個人的に単純明快に扱えると感じたSeleniumをlambda上で動かすことにしました。
6
5
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
6
5