Selenium Chrome Driverのダウンロードフォルダの指定が効かない
2023年に入ってからSeleniumでダウンロードフォルダを指定しても有効にならなくなった。
download.default_directoryは、ヘッドレスモードでは使えるようだが、そうでない場合には反映されないようになったようだ。
対策
chrome driverのインスタンス作成後に1回だけPage.setDownloadBehaviorを設定すればいいらしい。
ただし、setDownloadBehaviorはDeprecatedになっている。
t.py
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
download_dir = "c:\\test\\" #ダウンロードフォルダ
chrome_service = ChromeService(executable_path= 'C:\\chromedriver\\chromedriver.exe')
driver = webdriver.Chrome(service=chrome_service)
driver.get('http://google.com')
#ここから
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
driver.execute("send_command", params)
#ここまで
#この後ダウンロードする
起動時のオプションでadd_argument("--headless=new")にするといいとかいう記載もあったが、ヘッドレスでないときはどうすればいいのかは不明。
正式な対処法が分かるまでは、Page.setDownloadBehaviorを使うしかなさそうである。