質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

954閲覧

AWS LambdaでSelenium+Headless-chromiumでの操作を実行しようとしたところ、AWS LambdaのChromeのバージョンが古いというエラーが発生した

XinCii

総合スコア35

0グッド

0クリップ

投稿2022/02/22 08:48

編集2022/02/22 08:59

前提・実現したいこと

前にこちらこちらで質問を投稿し、解決したのですが、新たに異なるエラーが出てきました。以下先程のページと被りますが一部再掲します。

AWSのLambda上でSeleniumやChromedriver, headless-chromiumを用いてGoogle formを毎日指定した時刻に自動入力するコードを開発しています。使用言語はPython 3.7です。
コードの作成に関してはこちらのQiitaのページのやり方にならいました。

ただ、自分の場合はログインが必要なFormを扱うため、
SeleniumでChrome起動→まずGoogleでログイン→その後Formのページへ移動し、自動入力の後ブラウザを閉じる
の流れに変えています。

レイヤーのアップロードは、linux環境に合わせるためCloud9経由で作成したzipをアップロードしました。この過程に関しては、こちらのページを参考にしました。
PATHの問題を無事解決し、また ChromeDriverのバージョンを2.43に変更してレイヤーをアップロードした後、テストを実行したところエラーが発生しました。

発生している問題・エラーメッセージ

AWS_Lambda

1{ 2 "errorMessage": "Message: session not created: Chrome version must be >= 69.0.3497.0\n (Driver info: chromedriver=2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d),platform=Linux 4.14.252-207.481.amzn2.x86_64 x86_64)\n", 3 "errorType": "SessionNotCreatedException", 4 "stackTrace": [ 5 " File \"/var/task/lambda_function.py\", line 16, in lambda_handler\n browser = webdriver.Chrome('/opt/python/bin/chromedriver', options = options)\n", 6 " File \"/opt/python/selenium/webdriver/chrome/webdriver.py\", line 73, in __init__\n service_log_path, service, keep_alive)\n", 7 " File \"/opt/python/selenium/webdriver/chromium/webdriver.py\", line 99, in __init__\n options=options)\n", 8 " File \"/opt/python/selenium/webdriver/remote/webdriver.py\", line 268, in __init__\n self.start_session(capabilities, browser_profile)\n", 9 " File \"/opt/python/selenium/webdriver/remote/webdriver.py\", line 359, in start_session\n response = self.execute(Command.NEW_SESSION, parameters)\n", 10 " File \"/opt/python/selenium/webdriver/remote/webdriver.py\", line 424, in execute\n self.error_handler.check_response(response)\n", 11 " File \"/opt/python/selenium/webdriver/remote/errorhandler.py\", line 247, in check_response\n raise exception_class(message, screen, stacktrace)\n" 12 ] 13}

該当のソースコード

以下AWS Lambda上でのソースコードです。
一部個人情報を含む部分については省いていますのでご了承下さい。

import json from selenium import webdriver import time import random def lambda_handler(event, context): body_temp = str(36 + random.randint(1,7)/10) url1 = 'https://www.google.com/accounts?hl=ja-JP' options = webdriver.ChromeOptions() options.binary_location = '/opt/python/bin/headless-chromium' options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--single-process') options.add_argument('--disable-dev-shm-usage') browser = webdriver.Chrome('/opt/python/bin/chromedriver',options = options) browser.implicitly_wait(1) browser.get(url1) G_ID = browser.find_element_by_id('ID') G_ID.send_keys('USERNAME') G_Enter = browser.find_element_by_class_name('CLASSNAME') G_Enter.click() G_PW = browser.find_element_by_id('PW') G_PW.send_keys('PASSWORD') G_Enter.click() time.sleep(3) G_Enter = browser.find_element_by_class_name('CLASSNAME') G_Enter.click() time.sleep(2) body_temp = str(36 + random.randint(1,5)/10) url2 = '<Google FormのURL>'+body_temp browser.get(url2) time.sleep(2) try: F_Continue = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[3]/div[2]/a/span/span') F_Continue.click() except: pass time.sleep(1) Send_Button = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[3]/div[2]/a/span/span') Send_Button.click() time.sleep(2) browser.close browser.quit return { 'statusCode': 200, 'body': json.dumps('Form submission success!!') }

試したこと

AWS Lambdaに装備されている古いバージョンのchromeに合わせると、必然的にChromeDriverはv.2.42以前になり、前の質問に逆戻りです。こちらのQiitaのページと版は同じはずなのですが、上のページではこのようなエラーは出ていないようです。
Chromeをレイヤーとしてアップロードを試みましたが、容量過多のためできませんでした。AWS LambdaのChromeのバージョンを新しくするには、こちらのgithubのページのように、カスタムのレイヤーをアップロードするしかないのでしょうか。
ほかにも考えられるエラーの原因やコードミスなど、なんでもアドバイスいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/02/23 00:46

「毎朝5時にGoogle Formに自動回答したい」の記事では serverless-chrome v1.0.0-55 (chromium 69.0.3497.81 (stable channel) for amazonlinux:2017.03) を入れてます。 それに対して、「Cloud9でLambdaレイヤーをサクッとつくる(スクレイピング環境構築」の記事では v1.0.0-37 (chromium 64.0.3282.167 (stable channel) for amazonlinux:2017.03) を入れてます。 (後者の記事の方が新しいのに、なぜ古い chromium を使ってるんだろう…。)
XinCii

2022/02/23 08:49

前回から引き続きコメントありがとうございます。確かに後の記事の方が古いですが、もしかしたら前者のバージョンで纏めると50MBをオーバーしてしまうから諦めたのではないかと思います(僕もwinで圧縮するとオーバーしましたがCloud9経由で圧縮すると何故か50を下回りました)。 ただいずれの場合でも Chrome version must be >= 69.0.3497.0\n のエラーは出る(はず)なのにそのような表記がないですね(つまりエラーが出なかったということなのでしょうか)。 なぜ僕の場合だけエラーが出るのでしょうか?何が違うのかよくわかりません。
guest

回答1

0

自己解決

一向に解決策が浮かばないので、この方法自体を諦めてPuppeteerでのスクレイピングに切り替えたところ成功しました。

投稿2022/04/14 08:49

XinCii

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問