Python Selenium、ダウンロードが完了したかどうかを確認しますか? 質問する

Python Selenium、ダウンロードが完了したかどうかを確認しますか? 質問する

ダウンロードを開始するために 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

おすすめ記事