問題
Selniumを使用して特定のサイトからファイルをダウンロードするアプリケーションを作成し、AWS Lambdaにデプロイする際、問題が発生する。
ダウンロードディレクトリが作業ディレクトリと一致しない
ということだ。
ダウンロード先を/tmpに指定する
作業ディレクトリであるtmpにダウンロード先を指定する方法は、様々な海外サイトなどに掲載されているが、2023年8月現在、うまく動かなかったので、うまくいった方法を示す。
python
def startupchrome():
#オプションの追加を行う
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument("--no-sandbox")
options.add_argument("--single-process")
options.add_argument("--disable-dev-shm-usage")
#ダウンロードする場所の変更
prefs = {"browser.downloads.dir": "//tmp//", "download.default_directory": "//tmp//", "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
options.binary_location = "/opt/headless/python/bin/headless-chromium"
#ブラウザの定義
browser = webdriver.Chrome(
"/opt/headless/python/bin/chromedriver",
options=options
)
browser.command_executor._commands["send_command"] = (
"POST",
"/session/$sessionId/chromium/send_command",
)
params = {
"cmd": "Page.setDownloadBehavior",
"params": {"behavior": "allow", "downloadPath": '/tmp'},
}
data = browser.execute("send_command", params)
return browser
この関数はseleniumのdriverを返却する。