Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python Selenium】ファイルを自動ダウンロードする方法|Chromeで自動保存する設定

Seleniumで業務自動化をしていると、必ず出てくるのがこの処理です。

✔ レポートを自動ダウンロード
✔ PDFを自動保存
✔ CSVを毎日取得

この記事では、

  • ダウンロードフォルダの指定方法

  • Chromeで確認画面を出さずに保存する方法

  • PDFを自動保存する方法

  • ダウンロード完了を待機する方法

を、実務で使える形で解説します。


1️⃣ Seleniumでダウンロードを自動化する基本設定

Chromeは通常、

「保存しますか?」

という確認ダイアログを出します。

これを無効化します。


🔹 ダウンロードフォルダを指定するコード

 
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os

download_path = os.path.abspath("downloads")

options = Options()

options.add_experimental_option(
    "prefs",
    {
        "download.default_directory": download_path,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing.enabled": True
    }
)

driver = webdriver.Chrome(options=options)

 

これで:

✔ 指定フォルダに保存
✔ 確認画面なし
✔ 上書き許可

になります。


2️⃣ ダウンロードボタンをクリックする

 
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
download_btn = wait.until(
    EC.element_to_be_clickable((By.ID, "download"))
)

download_btn.click()

 


3️⃣ ダウンロード完了を待機する方法(重要)

Seleniumはダウンロード完了を自動では待ちません。

Chromeはダウンロード中、

 
ファイル名.crdownload

という拡張子になります。

これを監視します。


🔹 完了待機コード

 
import time
import os

def wait_for_download(path, timeout=30):
    seconds = 0
    while seconds < timeout:
        files = os.listdir(path)
        if any(file.endswith(".crdownload") for file in files):
            time.sleep(1)
            seconds += 1
        else:
            return True
    return False

wait_for_download(download_path)

 

これで、

ダウンロード完了まで待機

できます。

download_path は、
Seleniumでダウンロードしたファイルが保存されるフォルダのパスです。

例えば次のようなパスになります。

 
C:\Users\user\selenium_project\downloads

 

このフォルダの中に、Seleniumでダウンロードしたファイルが保存されます。
今回のコードでは、このフォルダを監視して .crdownload が無くなる=ダウンロード完了 を判定しています。

 


4️⃣ PDFを自動保存する方法

通常ChromeはPDFをブラウザ表示します。

自動保存するには設定が必要です。


🔹 PDF自動保存設定

options.add_experimental_option(
    "prefs",
    {
        "download.default_directory": download_path,
        "download.prompt_for_download": False,
        "plugins.always_open_pdf_externally": True
    }
)

 

これでPDFは直接保存されます。


5️⃣ ヘッドレスモードでダウンロードする場合

ヘッドレスでは追加設定が必要です。

 
options.add_argument("--headless=new")

 

さらにCDP設定:

 
driver.execute_cdp_cmd( "Page.setDownloadBehavior", {"behavior": "allow", "downloadPath": download_path} )

 

※ Selenium4以降で使用可能。


6️⃣ よくあるエラーと原因

❌ ダウンロードされない

→ default_directoryが絶対パスでない

❌ headlessで動かない

→ setDownloadBehavior未設定

❌ element not interactable

→ 明示的待機不足


7️⃣ 業務自動化でよくある活用例

✔ 経理レポート自動取得
✔ EC売上CSV取得
✔ 取引履歴PDF保存
✔ 官公庁データ定期取得

タスクスケジューラと組み合わせると完全自動化できます。


まとめ

Seleniumでのダウンロード自動化は、

  1. Chrome設定(prefs)

  2. 明示的待機

  3. 完了監視

この3点が重要です。