PythonとSeleniumを使用して、ダウンロードが完了するまでの待機処理を実装する方法について説明します。この記事では、ダウンロードが完了するまでの待機処理の一例として、SeleniumとWebDriverを使用した方法を紹介します。
ダウンロード完了待機の必要性
Webページからファイルをダウンロードする際、ダウンロードが完了するまで待機する必要があります。しかし、WebDriverにはダウンロード完了まで待ってくれる機能は用意されていません。そのため、自分で待機処理を実装する必要があります。
実装方法
以下に、PythonとSeleniumを使用したダウンロード完了待機の実装方法を示します。
環境設定
まず、以下の環境を設定します。
- OS: Windows10
- Python: 3.8.3
- Selenium: 3.141.0
- ブラウザ: Google Chrome
- ChromeDriver: 83.0.4103.39
ダウンロード完了待機の実装
ダウンロードが完了するまで待機するための処理を実装します。具体的には、ダウンロードしたファイルの拡張子が .crdownload
である間はダウンロード中と判断し、.crdownload
以外の場合はダウンロード完了と判断します。
以下に、PythonとSeleniumを使用したダウンロード完了待機のコードを示します。
from selenium import webdriver
import os
import sys
import glob
import time
# Seleniumでダウンロード開始処理(ダウンロードリンクのクリックなど)
timeout_second = 10
for i in range(timeout_second + 1):
# ファイル一覧取得
download_fileName = glob.glob(f'{tmp_download_dir}\\\\*.*')
# ファイルが存在する場合
if download_fileName:
# 拡張子の抽出
extension = os.path.splitext(download_fileName[0])
# 拡張子が '.crdownload' ではない ダウンロード完了 待機を抜ける
if ".crdownload" not in extension[1]:
time.sleep(2)
break
# 指定時間待っても .crdownload 以外のファイルが確認できない場合 エラー
if i >= timeout_second:
# == エラー処理をここに記載 ==
# 終了処理
driver.quit()
# 一時フォルダの削除
shutil.rmtree(tmp_download_dir)
sys.exit()
# 一秒待つ
time.sleep(1)
# 以下 ダウンロード完了後の処理 正ダウンロードフォルダへの格納など
このコードは、ダウンロードが開始された後、指定したタイムアウト時間までダウンロードが完了するのを待つものです。ダウンロードが完了したら、待機を終了し、後続の処理を開始します。
以上が、PythonとSeleniumを使用したダウンロード完了待機の実装方法です。この方法を使用すれば、ダウンロードが完了するまでの待機処理を簡単に実装することができます。