前提・実現したいこと
前にこちらやこちらで質問を投稿し、解決したのですが、新たに異なるエラーが出てきました。以下先程のページと被りますが一部再掲します。
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のページのように、カスタムのレイヤーをアップロードするしかないのでしょうか。
ほかにも考えられるエラーの原因やコードミスなど、なんでもアドバイスいただけますと幸いです。
。
回答1件
あなたの回答
tips
プレビュー