🎃
AWS LambdaでSeleniumが動かないあなたへ
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