前提・実現したいこと
前にこちらのページで質問を投稿し、自己解決したのですが、新たに異なるエラーが出てきました。以下先程のページと被りますが一部再掲します。
AWSのLambda上でSeleniumやChromedriver, headless-chromiumを用いてGoogle formを毎日指定した時刻に自動入力するコードを開発しています。使用言語はPython 3.7です。
コードの作成に関してはこちらのQiitaのページのやり方にならいました。
ただ、自分の場合はログインが必要なFormを扱うため、
SeleniumでChrome起動→まずGoogleでログイン→その後Formのページへ移動し、自動入力の後ブラウザを閉じる
の流れに変えています。
レイヤーのアップロードは、linux環境に合わせるためCloud9経由で作成したzipをアップロードしました。この過程に関しては、こちらのページを参考にしました。
PATHの問題を無事解決し、テストを実行したところエラーが発生しました。
発生している問題・エラーメッセージ
AWS
1{ 2 "errorMessage": "Message: unknown error: 'ms' must be a double\n (Session info: headless chrome=64.0.3282.167)\n (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Linux 4.14.252-207.481.amzn2.x86_64 x86_64)\n", 3 "errorType": "WebDriverException", 4 "stackTrace": [ 5 " File \"/var/task/lambda_function.py\", line 17, in lambda_handler\n browser.implicitly_wait(1)\n", 6 " File \"/opt/python/selenium/webdriver/remote/webdriver.py\", line 1149, in implicitly_wait\n 'implicit': int(float(time_to_wait) * 1000)})\n", 7 " File \"/opt/python/selenium/webdriver/remote/webdriver.py\", line 424, in execute\n self.error_handler.check_response(response)\n", 8 " File \"/opt/python/selenium/webdriver/remote/errorhandler.py\", line 247, in check_response\n raise exception_class(message, screen, stacktrace)\n" 9 ] 10}
該当のソースコード
以下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!!') }
試したこと
引用符を「'」から「"」に、またその逆も試しましたが、変化はありませんでした。
"ms must be a double"でネット検索をかけてみましたが、英語のページが2つほどヒットするのみでした。その1つには、chromedriverのバージョンがchromeにマッチしていないというもので、あくまでもローカル環境を想定した問答のようで(初心者なので解釈が誤っているかもしれません)今回のケースとは異なりました。もう1つのページに関しては、正直あまり内容がよく理解できませんでした。
"a double"とはコードにおいてはどういう意味なのでしょうか。また、このエラーを解決するにはどの部分を変更すればよいのでしょうか。ほかにも考えられるエラーの原因やコードミスなど、なんでもアドバイスいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー