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秒以内に作成されなかったことを意味します。つまりダウンロードが何らかの理由で失敗したことを意味します。
クレディセゾンのダウンロードでエラーが発生
2023-12-29 追記
クレディセゾンから外貨建て決済の適格請求書が発行されるようになったので、Power Automate for Desktopのフローに手を入れてそれをダウンロードするようにしました。ところがまさかのエラーでダウンロードしたファイルを見つけることができませんでした。
デバッグしたところ、なんとダウンロードされたファイルの作成時刻が、ダウンロード前に取得した現在時刻よりも古く、その結果ファイルが見つからないというエラーが生じていました。時空間にゆがみが生じているのか!?と思いました。
どうも、ダウンロードしたファイルの作成時刻は、Windows がファイルを作成した時刻ではなく、ダウンロードするファイル本来の作成時刻になっているようです。
おそらく、クレディセゾンが追加で適格請求書発行用のサーバーを用意して、そのサーバーの時刻が狂っているんだと思います。NTPクライアントの設定してくれ、と思いました。
これまでのダウンロードで問題なかったのは、私が処理しているサーバーはみんな正常な時刻を刻んでいたからなのでしょう。そう思うと、より大きいという条件ではうまくいかず以上でないとうまくいかなかったのもわかる気がします。
とりあえず CreationTime での比較ではなく、LastModifiedTime での比較に切り替えたところ、回避はできましたが、果たしてこれで万全なのかは不明です。
根本的な対策としては、作業開始時に、フォルダー中のファイルリストを取得して、そのリストに含まれないファイルを見つけたら、ダウンロードされたファイルとみなす、というのが正しいのかもしれません。
Powerautomate初心者です。
返信削除レコーダーの機能を使って社内の基幹システムで条件をいくつか選択し最後にExcelデータをダウンロードしたいのですがうまく行きません。
web環境はChromeです。
記載してあるとおりChromeでは保存できないのでしょうか。
社内で分る人もいないので教えていただけると幸いです。
Chromeでダウンロードできないのは、上の投稿に書いてある特定のアクションを使った場合です。Chromeでも「ブラウザーの自動化」にあるようなアクションを使ってダウンロードすることは基本的には可能なはずです。
返信削除実際に、私は、EdgeやFirefoxを使って業務でダウンロードしていますし、Chromeも基本的には同様です。
おそらくレコーダーで記録したフローに何かしらの問題(UI要素の制約が厳しすぎて、要素を指定できないとか、ページがその都度変化するため要素を指定できないなど)があるためだと思います。
とりあえずご返信まで。
ご返信ありがとうございます<(_ _)>
返信削除最後のダウンロードボタンがどうしても押せずエラーになってしまいます。
必要であれば画面のスクショを見ていただき
原因を教えていただけると幸いです。
返信が遅くなりすみません。旅行中でスマホから返信したつもりでしたが、帰宅して今朝PCで見たら、公開承認待ちのままとなっていました。
返信削除Webページをうまく操作できない現象には私も何度か遭遇しました。
よくある現象としては、UI要素がサーバー側でその都度作られるため、レコーダーで保存したUI要素とは一致せずボタンが押せないというものです。この場合は、保存したUI要素と実行時のUI要素を比較して相違点を調べ、制限を緩和するとか、変数を使って一致させるようにする必要があります。
ページによってはHTMLで構成されていないこともあります。その場合は仕方なく、ブラウザー自動化ではなく、「マウスとキーボード」の「マウスを画像に移動します」アクションや、「キーの送信」を使って対処したこともあります。
スクリーンショットを拝見すること自体は可能ですが、解決するには、上に書いたようにUI要素のセレクターで詳細を確認するなど地道な作業が必要になると思います。
業務でPower Automateを利用されるようでしたら、サポートサービスを提供するアサヒロボ研のような会社と契約するのも一つかと思います。
https://asahi-robo.jp/
私自身は、一度無料セミナーに参加したことがあるだけで、サービスの質については不明です。
ご返信ありがとうございます。
削除明日、UI要素を比較してみます!
アクション等も試してみます。
UI要素を調べるのは初めてだと容易ではないかもしれません。
削除私は次の本が参考になりました。
はじめてのPower Automate Desktop―無料&ノーコードRPAではじめる業務自動化
株式会社ASAHI Accounting Robot研究所 (著)
残念ながら、最近のバージョンアップでエディターの構成が変わりましたが、基本は同じなので、参考になるかもしれません。
私はアサヒロボ研とは何も関係がありませんが(笑)