Power Automate Desktopでブラウザでダウンロードしたファイルを処理する
Power Automate Desktopを使って自動化する作業の一つはWebサービスだと思います。例えば私は銀行の明細照会や送金等の自動化を試みています。
そういう作業をしていて必要になって来るのがダウンロードしたファイルの処理です。例えば口座明細ファイルを保存するとか請求書を印刷するとかです。
ダウンロードされたファイル名がわかっているのであれば簡単ですが、実際には毎回違うなんだかよくわからない暗号コードのようなファイル名が付けられて落ちてくるという事は結構あります。
ファイル名が確定しなければアクションで指定してみようがないので困ります。今回はそういうファイルの処理方法について書いてみたいと思います。
画像はクリックすると拡大できます。
ダウンロードアクションを使用する
Power Automate Desktopにはそのものズバリの「Webからダウンロードします」や「Webページのダウンロードリンクをクリックします」が用意されています。
しかし、残念ながらこれはChromeではつかえません。実行するとエラーが発生し「Chrome を使用したファイルのダウンロードはサポートされていません。オートメーション ブラウザーの使用を検討してください」と言われてしまいます。
そうなんだ、では、とEdgeやIE(Internet Explorer)を指定しても同様です。オートメーションブラウザーってなんなのと思ったら、IEの起動モードの一つでした。
それではと、これを使ってみるとオートメーション用にすべてを削ぎ落した画面が表示され、これでは動かないサイトがありました。
また、IEのサポート終了が来年2022年6月に迫っているというのもひっかかります。
ダウンロードフォルダーを空にする
ではどうするかと検索してみると、次のページではダウンロードする前にダウンロードフォルダーをクリアするという荒業を使っている方がいます。
Power Automate Desktop:ファイル名がわからないファイルをコピーする方法
いやこれ、私なんかはダウンロードフォルダーをデスクトップに設定しているので絶対に使えない方法です。
ブラウザのダウンロードフォルダーを一時的に作ったフォルダーに変更して元に戻すなんて言う方法も考えられますが、処理途中でエラーが発生するとそのままになってしまうため使い勝手が良くなさそうです。
時刻で選別する
というわけで私が仕方なく使っているのは時刻を使ったファイルの特定です。要するにダウンロード開始時刻より後からできたファイルはダウンロードしたファイルとみなすという事です。
具体的には次の通りです。みずほの帳票サービスから為替手数料のファイルをダウンロードしています。
- Chromeを起動してページに移動します。
- ログインボタンを押します。
- 契約番号を入れます。
- ユーザーIDを入れます。
- パスワードを入れます。
- ログインボタンを押します。
- 帳票照会メニューのボタンを押します。
- 帳票照会ボタンを押します。
- ダウンロード開始前に現在時刻を取得します。
- ダウンロードリンクをクリックします。
- ループ開始 5秒間待たせるために0から5まで1ずつカウントアップします。
- 1秒間待機
- デスクトップフォルダーのパスを取得します。
- デスクトップフォルダー内のファイルコレクション(リスト)を取得します。
- ファイルコレクションの最初のファイルを取り出します。
- ファイルの作成時刻がダウンロード開始時刻以上であれば。
- ファイルが完全に書き込まれるまで待機します。
- ファイルを印刷します。
- メッセージを表示します。
- ファイルを移動します。
- フローを終了します。
- IfのEnd
- ループのEnd
- ファイルが見つからなかったというメッセージを表示
手順15の前に見つかったファイル数が0より大きいかチェックする必要がありました。具体的には Files.Countが0より大きいかどうかです。いずれ修正します。
手順14補足
デスクトップにあるファイル情報を取得する際に、PDFファイルのみを取得対象として、取得結果を作成時刻を降順で並び替え、最新の(最後にできた)ファイルを最初に取得できるようにします。
「フォルダー内のファイルを取得」アクションなどで取得されるファイルデータの集まりをコレクションと呼びます。
手順16補足
本来、ファイル作成時刻が開始時刻より1ミリ(1/1000)秒でも後であれば、「以上(>=)」ではなく「より大きい(>)」でいけるはずですが、何故かうまく行かないので以上を使っています。いずれ原因を調べてみます。
手順19補足
普通に考えるとファイルを削除した後にメッセージを表示するべきですが、先日、印刷かなにかの処理をした後にすぐ削除しようとしたところ前のアクションがファイルを捕まえているらしく失敗したことがあります。
メッセージを表示してファイル解放までの時間稼ぎをする、いい加減な対処方法です。
「ファイルを待機します」アクションにファイルが解放されるというオプションがあればそれを使いたいところです。
次のアクションで、エラー発生時には再試行するというのも一つかもしれません。
手順20補足
ファイルをデスクトップにあるRecylceBinという名前のフォルダーに移動しています。
本当はゴミ箱に入れたいのですが、アクションが用意されていないのでこれでしのいでいます。VBAでは(実際にはWindowsのAPIらしい)ゴミ箱への移動ができているので、Power Automate Desktopでもできるはずですが、見当たりません。
「ファイルの削除」アクションを使うとゴミ箱にも入らずにサクッと消えてしまい、後からもう一度見てみたいという時に困ることになります。
と書いたところで、他の言語を呼び出せばできるんでね?、と思ったのでシステムカテゴリーのアクションを見たら「VBScriptの実行」アクションがあるではないですか。サクッと実装できました。
Power Automate Desktopでファイルをゴミ箱に送る
手順24補足
ファイルが見つかった場合には印刷して削除してフローを終了するので、ここまで来たという事はファイルが5秒以内に作成されなかったことを意味します。つまりダウンロードが何らかの理由で失敗したことを意味します。
コメント
コメントを投稿
間違いがあればコメントを頂けるとありがたいです。