Lambdaでselenium実行 / 空のHTMLがreturn|

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'

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です