【Excel VBA×Selenium】ファイルのダウンロード完了を待つ方法|crdownloadが消えるまで確認する
みなさんこんにちは。
Excel VBAとSeleniumでファイルをダウンロードした直後、ファイルを開けず困ったことはないでしょうか。
今回は、Chromeの一時ファイル.crdownloadを確認し、固定のWaitに頼らず完了を待つ方法をご紹介したいと思います。
ダウンロード中のcrdownloadとは
Chromeはダウンロード中に.crdownloadを作る場合があります。完了すると通常のファイル名になります。小さいファイルでは、一時ファイルを確認できないこともあります。
今回はSelenium公式テストページの「File 1」を使用します。

サンプルコード
マクロを記述したブックを保存してから実行してください。参照設定には「Selenium Type Library」が必要です。
Option Explicit
Sub WaitChromeDownload()
Dim driver As New Selenium.ChromeDriver
Dim folder As String, target As String
Dim deadline As Date, finished As Boolean
'保存済みブックの横に専用フォルダを作る
If ThisWorkbook.Path = "" Then
MsgBox "先にブックを保存してください。": Exit Sub
End If
folder = ThisWorkbook.Path & "\DownloadTest"
If Dir(folder, vbDirectory) = "" Then MkDir folder
target = folder & "\file_1.txt"
'古いファイルによる完了の誤判定を防ぐ
If Dir(target) <> "" Then Kill target
If Dir(folder & "\*.crdownload") <> "" Then
MsgBox "一時ファイルが残っています。": Exit Sub
End If
On Error GoTo ErrProc
'Chrome起動前に保存先を指定する
driver.SetPreference "download.default_directory", folder
driver.SetPreference "download.prompt_for_download", False
driver.SetPreference "download.directory_upgrade", True
driver.Start "chrome"
'Selenium公式ページからダウンロード開始
driver.Get "https://www.selenium.dev/selenium/web/downloads/download.html"
driver.FindElementById("file-1").Click
'30秒を上限に、完成ファイルと一時ファイルを確認
deadline = DateAdd("s", 30, Now)
Do
If Dir(target) <> "" And _
Dir(folder & "\*.crdownload") = "" Then
finished = True
Exit Do
End If
If Now >= deadline Then Exit Do
driver.Wait 200
DoEvents
Loop
'成功またはタイムアウトを通知する
If finished Then
MsgBox "ダウンロード完了:" & target
Else
MsgBox "30秒経過:完了を確認できませんでした。"
End If
ExitProc:
On Error Resume Next
driver.Quit
Exit Sub
ErrProc:
MsgBox "エラー:" & Err.Description
Resume ExitProc
End Sub
完了判定とタイムアウト
完了条件はfile_1.txtがあり、.crdownloadがないことです。ほかのダウンロードと混ざらない専用フォルダを使います。

DateAddで期限を30秒に設定し、超過した場合は処理を終了します。
実行結果と注意点
正常に終了すると「DownloadTest」フォルダ内にfile_1.txtが保存され、完了メッセージが表示されます。

誤判定を防ぐため古い同名ファイルは削除します。タイムアウトした場合はChromeのダウンロード状況を確認してください。
なお、
は別の記事でも紹介しています。
最後に
いかがでしたでしょうか。今回は、.crdownloadと完成ファイルの有無を組み合わせ、ダウンロード完了を待つ方法をご紹介しました。少しでも参考になれば幸いです。
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。
そんな方はいつでもお気軽にご相談ください。
また、本ブログからご依頼いただいた方については割引特典がございますので、
ご不明点と合わせてメッセージをいただけると幸いです。
業務の流れをまるごと自動化します Excel・Web・Teams・SaaSで業務全体を自動化Webスクレイピング以外にもWebアプリの開発サービスも出品しております。
こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、
お気軽にご相談ください。
スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?
