ダウンロードを開始するために Selenium を使用しました。ダウンロードが完了したら、特定のアクションを実行する必要があります。ダウンロードが完了したことを確認する簡単な方法はありますか? (FireFox ドライバーを使用しています)
ベストアンサー1
最近この問題に遭遇しました。一度に複数のファイルをダウンロードしていたのですが、ダウンロードが失敗した場合にタイムアウトする方法を組み込む必要がありました。
コードは、ダウンロード ディレクトリ内のファイル名を 1 秒ごとにチェックし、完了するか、完了までに 20 秒以上かかると終了します。返されたダウンロード時間は、ダウンロードが成功したかどうか、またはタイムアウトになったかどうかを確認するために使用されました。
import time
import os
def download_wait(path_to_downloads):
seconds = 0
dl_wait = True
while dl_wait and seconds < 20:
time.sleep(1)
dl_wait = False
for fname in os.listdir(path_to_downloads):
if fname.endswith('.crdownload'):
dl_wait = True
seconds += 1
return seconds
これは、.crdownload 拡張子で終わる Chrome ファイルでのみ機能すると思います。他のブラウザでも同様の方法で確認できる可能性があります。
.crdownload
編集: 最近、拡張子として表示されない場合にこの機能を使用する方法を変更しました。基本的に、これも正しい数のファイルが表示されるまで待機するだけです。
def download_wait(directory, timeout, nfiles=None):
"""
Wait for downloads to finish with a specified timeout.
Args
----
directory : str
The path to the folder where the files will be downloaded.
timeout : int
How many seconds to wait until timing out.
nfiles : int, defaults to None
If provided, also wait for the expected number of files.
"""
seconds = 0
dl_wait = True
while dl_wait and seconds < timeout:
time.sleep(1)
dl_wait = False
files = os.listdir(directory)
if nfiles and len(files) != nfiles:
dl_wait = True
for fname in files:
if fname.endswith('.crdownload'):
dl_wait = True
seconds += 1
return seconds