🎃

AWS LambdaでSeleniumが動かないあなたへ

2022/10/23に公開

LambdaでSeleniumが動かない!

Python3.8では動かなかったり、バージョンが揃っていないと動かなかったり。。。
また動いたとしても色々なエラーが頻発。。。
正しく動かすための勘所がたくさんあったので、まとめました!

やること

バージョンを揃える

python: 3.7
selenium: 3.14.0
chrome-driver: 2.43
chromium: 1.0.0-55

pythonはlambdaのランタイムを変更
他のインストールは以下を見てください

レイヤーに適切にアップロード

Selenium

mkdir python
cd python 

pip install selenium==3.14.0 -t .
cd ../
zip -r ./python python.zip

※Python配下だとレイヤーでもLambdaが自動で読んでくれるそうなので
import seleniumのように記述できる

ChromeDriver

mkdir tmp
cd tmp

curl -SL https://chromedriver.storage.googleapis.com/2.43/chromedriver_linux64.zip > chromedriver.zip
curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-55/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip

unzip -o chromedriver.zip -d .
unzip -o headless-chromium.zip -d . 

rm chromedriver.zip
rm headless-chromium.zip

zip chromedriver.zip chromedriver headless-chromium

※レイヤーとして追加すると、lambdaではopt配下として読み込まれるので、
/opt/chromedriver、/opt/headless-chromiumとして読み込みます

適切にオプションを設定する

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

エラーメッセージ集(SEO用です)

・Message: session not created exception: Missing or invalid capabilities
・error while loading shared libraries
バージョンがちぐはぐな可能性あり

・unknown error: unable to discover open window in chrome
・WebDriverException: Message: chrome not reachable
**
オプションが適切でない可能性あり

・Message: Service /opt/chromedriver unexpectedly exited.
レイヤーへのインストールが適切でない、もしくはパスが違う可能性あり

Discussion