Lambda(AWS) ✕ seleniumを利用して、下記の関数コードでスクレイピングを実行した。(Lambdaの設定詳細は割愛)
from selenium import webdriver import os os.environ['HOME'] = '/opt/' def lambda_handler(event, context): options = webdriver.ChromeOptions() options.add_argument("--headless") options.add_argument("--disable-gpu") options.add_argument("--hide-scrollbars") options.add_argument("--single-process") options.add_argument("--ignore-certificate-errors") options.add_argument("--window-size=880x996") options.add_argument("--no-sandbox") options.add_argument("--homedir=/tmp") options.binary_location = "/opt/headless/python/bin/headless-chromium" #headless-chromiumへのPATHは、ご自身の環境に応じて設定して下さい。 browser = webdriver.Chrome("/opt/headless/python/bin/chromedriver", options=options) #choromedriverへのPATHは、ご自身の環境に応じて設定して下さい。 browser.get("https://www.google.com/") title = browser.title print(title) print(browser.page_source) browser.close() return 'ok'
すると、printしたかったtitleが空白。
page_sourceが下記のように空っぽのHTMLで返ってきた。
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
解決方法
optionに下記を追加して下さい。
options.add_argument('--disable-dev-shm-usage')
どうやら、Chromeがメモリ不足でクラッシュしてしまっているようです。(Lambdaの設定でメモリは十分に高くしていても関係ないようです。)
メモリ保持場所を/dev/shmの代わりに/tmpディレクトリを使うことができる設定です。
参考;
https://qiita.com/yoshi10321/items/8b7e6ed2c2c15c3344c6
追加したコード
from selenium import webdriver import os os.environ['HOME'] = '/opt/' def lambda_handler(event, context): options = webdriver.ChromeOptions() options.add_argument("--headless") options.add_argument("--disable-gpu") options.add_argument("--hide-scrollbars") options.add_argument("--single-process") options.add_argument("--ignore-certificate-errors") options.add_argument("--window-size=880x996") options.add_argument("--no-sandbox") options.add_argument("--homedir=/tmp") options.add_argument('--disable-dev-shm-usage') options.binary_location = "/opt/headless/python/bin/headless-chromium" #headless-chromiumへのPATHは、ご自身の環境に応じて設定して下さい。 browser = webdriver.Chrome("/opt/headless/python/bin/chromedriver", options=options) #choromedriverへのPATHは、ご自身の環境に応じて設定して下さい。 browser.get("https://www.google.com/") title = browser.title print(title) print(browser.page_source) browser.close() return 'ok'