前提・実現したいこと
lambda上でheadlesschromeを使ってseleniumで操作したいのですが、
上手くいきません。
環境構築はこちらを参考にしました。
バージョン等もこちらと同じです。
https://qiita.com/ichihara-development/items/5e61c3424b3176bc6096
ローカルでは動作しているのですが、
lambda上で実行しようとするとエラーが出ます。
send_keysメソッドが動作していない(?)様に見えるのですが。。
ちなみにローカルはPython 2.7.16で、
lambdaはPython 3.7です。
色々と調べた際、
chrome-driverのバージョンが古いせいでset_keysが対応しないという記事をいくつか見かけましたが、
現状headless-chrominiumのバージョンが最新のchromeのバージョンに追いついていないので、
対応させる事は不可能なのでしょうかね。。
何か分かる方いれば宜しくお願いします。
発生している問題・エラーメッセージ
Test Event Name selenium Response { "errorMessage": "'dict' object has no attribute 'send_keys'", "errorType": "AttributeError", "stackTrace": [ " File \"/var/task/lambda_function.py\", line 39, in lambda_handler\n driver.find_element_by_name(\"user_password\").send_keys(\"XXXXXX\")\n" ] } Function Logs START RequestId: XXX Version: $LATEST [ERROR] AttributeError: 'dict' object has no attribute 'send_keys' Traceback (most recent call last): File "/var/task/lambda_function.py", line 39, in lambda_handler driver.find_element_by_name("user_password").send_keys("XXXXXX") END RequestId: XXX REPORT RequestId: XXX Duration: 39112.18 ms Billed Duration: 39113 ms Memory Size: 256 MB Max Memory Used: 256 MB Init Duration: 301.10 ms Request ID a68d20b9-adcd-48a9-ac2a-3a031fcae879
該当のソースコード
# -*- coding: utf-8 -*- import time import subprocess from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import requests import json from selenium.webdriver.common.keys import Keys def lambda_handler(event, context): options = webdriver.ChromeOptions() options.add_argument("--headless") options.add_argument("--disable-gpu") options.add_argument("--single-process") options.add_argument("--ignore-certificate-errors") options.add_argument("--no-sandbox") options.add_argument("--homedir=/tmp") options.binary_location = "/opt/headless/python/bin/headless-chromium" #ブラウザの定義 driver = webdriver.Chrome( "/opt/headless/python/bin/chromedriver", options=options ) # 対象サイトに移動 driver.get('https://test') time.sleep(3) # ユーザーネーム driver.find_element_by_name("user_id").send_keys("XXXXXX") # パスワード driver.find_element_by_name("user_password").send_keys("XXXXXX") driver.quit()
あなたの回答
tips
プレビュー