PythonとSeleniumを使用した自動ダウンロードの実装方法
この記事では、PythonとSeleniumを活用して、特定のウェブサイト(例としてGigaFile便を使用)からファイルを自動でダウンロードする方法を詳しく解説します。特に、ダウンロードプロセスが完了するまでプログラムが終了しないようにする方法に焦点を当てます。
はじめに
ファイルの自動ダウンロードは、定期的なバックアップ作業やデータ収集など、多くの業務自動化タスクで役立ちます。PythonのSeleniumライブラリを使用すると、ブラウザ操作を自動化し、このようなプロセスを簡単に実装できます。
環境設定
このスクリプトを実行する前に、以下の環境が整っている必要があります。
- Python 3.x
- Seleniumライブラリ
- ChromeDriver(Google Chromeと互換性のあるバージョン)
スクリプトの解説
以下に、主要なステップごとにスクリプトを解説します。
1. 必要なライブラリのインポート
import sys
import time
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
2. ダウンロード完了の監視
.crdownload
拡張子を持つファイルがダウンロードフォルダに存在しなくなるまで監視します。
def wait_for_download_completion(download_folder):
while True:
download_files = [f for f in os.listdir(download_folder) if f.endswith('.crdownload')]
if not download_files:
print("全てのダウンロードが完了しました。")
return True
time.sleep(1)
3. ダウンロード処理の実装
ブラウザを操作して指定されたURLからダウンロードを開始します。
def download(url):
global driver
options = Options()
options.page_load_strategy = 'eager'
options.add_experimental_option("prefs", {
"download.default_directory": download_folder,
"download.prompt_for_download": False,
})
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get(url)
element = driver.find_element("xpath", "//button[text()='まとめてダウンロード']")
driver.execute_script("arguments[0].scrollIntoView();", element)
element.click()
time.sleep(5)
4. メイン関数
コマンドラインからURLを受け取り、ダウンロードプロセスを開始します。
if __name__ == "__main__":
if len(sys.argv) > 1:
url = sys.argv[1]
download_folder = "ダウンロードフォルダのパス"
download(url)
wait_for_download_completion(download_folder)
else:
print("URLを入力してください。")
まとめ
このスクリプトは、自動化されたウェブブラウジングを通じてファイルをダウンロードし、ダウンロードが完了するまで待つことができます。これにより、定期的なデータ収集やバックアップなどのタスクを効率化することが可能です。