ファイルのダウンロード完了を知る方法


#1

Chromeでcsvファイルをダウンロードし、EXCELで開こうとしています。

ダウンロード完了を判定するのにPath Existを使うと、ダウンロードが始まった瞬間に「ファイルが存在する」と判定してしまう為、不完全なファイルを開こうとしてエラーになってしまうのですが、ダウンロードが完了した時点でファイルを開いても大丈夫と判定するには、どうすれば良いでしょうか。


#2

あー、これ難しそうですねー。
画面下部のダウンロードバーにファイル名/画像が表示されるのですが、ダウンロードが終了しても消えないし、表示も変わらないのですね。

ちなみに、エラー画面のスクリーンショットを貼って貰うことはできますか?

正当では無いように思いますが、とりあえずの案としては以下①②③を思いつきました。
他の方のアイディアも聞きたいです。

① エラーが特定のコードを示しているのであれば、そのコードが出ている間は
[Retry Scope]アクティビティを使ってファイルオープンを繰り返す、
という方法は取れませんか?
https://activities.uipath.com/lang-ja/docs/retry-scope

② ダウンロードが終了したらダウンロードバーを自動的に閉じるChrome拡張を使って
ダウンロードバーが消えるのを[wait element vanish] アクティビティで待つ方法は
取れませんか?
https://activities.uipath.com/docs/wait-ui-element-vanish

【 ダウンロード完了後にバーを非表示にできるChrome拡張「Always Clear Downloads 2」が便利】
https://love-guava.com/chrome-always-clear-downloads/

vb.net の File.Open命令を使用してファイルを開こうとして、例外が出たらリトライ、
例外が出なかったら次に進む、という方法はできますか?(@honoka さま、いかがですか?)


#3

yukino様
回答ありがとうございます。

エラー画面のスクリーンショットを撮ろうと思って再度動かしてみたのですが、不思議な事に再現しない(エラーにならない)状態になりました。

先ほどは、ダウンロードが完了しないうちにファイルが存在すると判定して次の処理へ進み、CSVファイルを処理するExcel Application Scopeの方ではファイルが無いと判断して勝手に新しいファイルを作り、シート名が違うのでエラー終了・・・という流れでした。
(先にファイルが作られるため、ダウンロードしたファイルの方が(1)という名前になる。)

今は、ちゃんとダウンロードが終わってからファイルを開く処理が動いているみたいです。

尚、Excel Application Scopeには「Create File」という項目が存在し、チェックを外しておけばファイル新規作成は回避できるはずなのですが、私のUiPathでは項目が存在しません。それも謎です。


#4

呼ばれて飛び出て何とやら……

Chromeでcsvファイルをダウンロードし、EXCELで開こうとしています。

Chromeは、基本的にユーザードキュメントの「Download」フォルダに否応為しにDLしてしまうのですよね。いつも難儀しています。

2つ問題点があって、

  1. ダウンロードしたファイル名が固定できない

ここからして面倒です。私の場合、どうしても必要なら、Downloadフォルダのファイル一覧をダウンロード前に取得しておき、ダウンロード開始してから差分を見ることで、ファイル名を取得する、といった手法をとることはあります。
やっていることが半ば、VB.NETのプログラミングに近いので、あまりお勧めはできないのですが……。

ダウンロードのリンクがJavaScript等で動的に処理されるケースだと使えませんが、ファイルが静的にあってダウンロードできるシステムなら、対象リンクをClick text等で右クリックし、メニューから「名前をつけて保存」のダイアログを開かせることで、こちらの意図したファイル名に(強制的に)することができます。

  1. ダウンロード完了のタイミングが掴みにくい

これも同じで、1)の方法をとる場合は、定期的にファイルのサイズを監視し、前回、チェックしたときとファイルサイズが同じだったらダウンロード完了とみなす、みたいな処理をすることはあります。

一応、上2つの方法を纏めたサンプルを作成してみました。確実とは言い難いですが、割と手軽なロジックにはなる……といいなぁ、ぐらいの感じです。
Main.xaml (11.6 KB)

尚、Excel Application Scopeには「Create File」という項目が存在し、チェックを外しておけばファイル新規作成は回避できるはずなのですが、私のUiPathでは項目が存在しません。それも謎です。

UiPath.Excel.Activitiesのバージョンが古い可能性があるので、Manage Package画面(UiPath StudioでCtrl+Pを押すと出ます)から、バージョンアップできないか確認してみてください。


#5

Honoka様
サンプルシナリオまで作って頂き、ありがとうございます。

ファイルサイズの変化でダウンロード完了を判定する方法は思いつきませんでした。
また、ダウンロードフォルダパスは設定ファイルに記述して対応していましたので、パスを取得する処理は大変助かりました。
ダウンロードするファイル名は予め分かっているので、ダウンロード前に同名ファイルを削除して対応しています。

Create Fileに関しては、ご指摘の通りExcelアクティビティの更新があり、適用したら使えるようになりました。