2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonとSeleniumを使用した自動ダウンロードの実装方法

Posted at

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を入力してください。")

まとめ

このスクリプトは、自動化されたウェブブラウジングを通じてファイルをダウンロードし、ダウンロードが完了するまで待つことができます。これにより、定期的なデータ収集やバックアップなどのタスクを効率化することが可能です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?