RPA 実践編 コツや基本機能が一通り分かる複数アプリを操作する

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

ファイルのアップロードを待機する

RPAでChromeなどのWebブラウザを操作する場合など、インターネットやLANにアクセスする際に注意しなければいけないのは、ネットワークの状況により処理の待ち時間が大幅に変わることがあるということです。

CSVファイルの場合、それほどアップロードに時間がかかることはないので、通常の一時停止でも問題ありません。ただ、やり方として、時間がかかる処理を待つ考え方を解説します。

今回のcsvjson.comのページでは、ファイルのアップロードが始まると、「+Select a file…」ボタンの表示が、

上図のようにアップロードの進捗状況になります。残念ながら、Convertボタンの外観は変わらないため、この表示を利用することにします。

フローチャートとしては上記のような流れになります。「+Select a file…」ボタンに戻っているか判断した後、改めて次にクリックするConvertボタンを探してクリックする、というのが今までやってきた流れと異なります。

操作対象と違うものを判断基準にする

ここまで本ブログでは、画像検索などでは、「操作対象=監視対象」でした。

しかし、実際にはダイアログが非アクティブになる / 消えるといった、普段意識していない判断基準も利用しています。

SaaSのシステムや、ゲーム(利用規約には気をつけましょう)での RPA 利用では、普段意識しないところで「判断」している場合も多いので、思うように RPA が作成できないときは、一度手を止めて、作業内容をなんども手で行い、画面の変化に気を配って観察する癖をつけるといいでしょう。

なお、どうしようもない場合は、「一時停止の時間を長めにとる」というのも一つの選択肢ですし、業務を効率化するはずの RPA 作りで、必要以上にこだわって時間を使いすぎるのも非効率です。臨機応変な判断を心がけましょう(もし、スマートな RPA を作るのが楽しくなったら、プログラミングを学んでみるといいでしょう)。

では、 RPA を作成していきます。「+Select a file…」ボタンの画像を探すアクションはすでにできていますので、コピー&ペーストでWinWaitCloseの後に新規に追加しましょう。更に、WinWaitCloseと画像検索アクションの間に、一時停止を300ミリ秒ほど追加します。これは、(ほぼないですが)「+Select a file」ボタンがアップロードの進捗状況に変化する前に、RPAが認識してしまうことを防ぐためです。

アクション/コマンドの並び

次に、コピーしてきた画像検索のアクションをダブルクリックして、編集ダイアログを表示します。

検索する画像の条件は変わらないので、そのままとします。

注意すべき点は、見つかった場合「Break」とする点。これは、クリックなど操作を「何もしないで」以降のループをスキップしてしまう(次のアクションに行く)ということを意味しています。そのため、「…まで繰り返し」に「見つかったら」を意味する「Found」を設定する意味もないので、チェックを外しています。

見つかった場合continue でもよい

「…まで繰り返し」にFoundを設定していた場合は、実は「見つかった場合」の処理がなんであれ、ループはその回で終了します。ですので、コピーしてきたものを活かす場合には、見つかった場合を「Continue」にするだけで、「…まで繰り返し」の設定は変えなくても問題ありません。

色々なやり方があるというのと、「見つかった場合にはすぐに次の処理に行く」と明確にするため、ここではBreakを使っています。

「繰り返し」や「遅らせる」はネットワークの遅延があるため、少し長めにとるといいでしょう。今回は、テキストファイルのCSVなので最長で5秒(5000ミリ秒)となっていますが、画像ファイルの場合には最長で10~20秒に設定してもいいでしょう。

 

続いて、Convertボタンをクリックする部分を作ります。が、ここは難しいことはなく、「イメージ/ピクセル検索/画像からテキストへ」ボタン(F7キー)を押して、新規に画像検索アクションを追加します。

Convertボタンは常時クリックできる状態ですので、特別「繰り返し」に設定はしていませんが、完璧を目指す場合は何回か繰り返してもいいでしょう。

 

最後に、Downloadボタンのクリックを作って行きます。

Downloadボタンは、CSVからJSONファイルへの変換作業が完了するまでクリックできないように色が薄くなっています。

よほど大きなCSVファイルをアップロードする場合を除き、通常の一時停止アクションでも問題ないです。

しかし、ここでは「繰り返し」「遅らせる」「Found まで繰り返し」を設定して、指定画像が見つかるまで定期的(300ミリ秒ごと)にチェックして、見つかったらクリックするという処理にします。

注意点というほどではないですが、Download の準備ができていない状態は、色が薄くなっているだけですので、変形の数値にある程度大きい値を入れていると誤動作することがあります。ちょっとのズレのために、変形の数値にいつもある程度の数字をいれている人は、ここでは注意しましょう。

この設定で、画像が見つかったらクリックまで行えますので、ブラウザでの作業はここまでとなります。

 

ファイルのダウンロードの完了を待つ

さて、少し難しいのがダウンロードの完了待ちです。

Chromeではダウンロードしたファイルがブラウザ下部に表示されますが、ダウンロードの完了については、ファイルのアイコンが点滅することで表示され、ダウンロード中は進捗を示す円がアイコンの部分に表示されます。

そこで、ファイル名やアイコンが完全に一致するまで待つというのが一つの手段です。

上図のように、アイコンと画像が静止していれば完了したと判断できます。

ただ、少し正確性に欠けるので、ここでは違う手段を用います。

実はChromeでは(大体のブラウザでそうですが)、ダウンロード中は、別のファイルがダウンロードフォルダに一時ファイルとして作成されます。そして、ダウンロードが完了したあと、改めて正しいファイル名にリネームされて、ダウンロード完了となります。

さて、本記事ではダウンロード前に、ファイル名が混乱しないように元々「csvjson.json」ファイルが存在していた場合は削除する、という処理を行っていました。

今度は逆に、「csvjson.json」ファイルが存在するまで待つ、とすればダウンロードの完了をスムーズに待機できそうですね。

ただ、If文では1度しかファイルがあるかないかをチェックできません。そこで、画像検索では自動的に追加されていた「繰り返し(ループ)」処理を手作業で追加することにします。

ループを追加する

ループボタン(F9)キーをクリックして、ループダイアログを表示します。

 

ループダイアログでは、「繰り返し」の回数に10を入力します。ループの種類は、ループのままで構わないので、このままOKボタンをクリックします。

すると、上図のように[LoopStart]と[LoopEnd]が追加されます。このLoopStartとLoopEndの中を、指定回数(今回は10回)繰り返すことになります。画像検索のように、一時停止を自動で追加する機能はありませんので、手動で一時停止を追加します。

LoopEndを選択した状態で、300ミリ秒~1秒ほどの一時停止を、ループの最後に追加しておきましょう(必ず、LoopStartとLoopEndの間にあることを確認します)。

次に、ファイルが存在しているかを確認するIf文を作成します。今回は、もともとファイルがある場合に削除するアクションを追加しているので、それをコピーしてきましょう。

[Pause]アクションの上にペーストすると、このような状態になります。ただし、これではせっかくダウンロードしたファイルを削除してしまいますので、FileDeleteアクションを削除します。選択してDeleteキーで、その行のアクションは消えますね。

削除すると、EndIfが選択された状態になりますので、その状態で「ループ」ボタン(F9キー)を押します。

表示されたループダイアログで、「ブレイク」ボタンをクリックします。すると、ループダイアログが消え、Breakアクションが追加されます。

本記事の画像検索の部分でも触れましたが、「Break」は、その行に到達すると、それ以降何もせずループ(繰り返し)を終了してループの後からアクションを実行する効果があります。通常は、今回のようにIf文と一緒に使います。でないと、ループを書く意味がそもそもないですからね。

今回は、csvjson.jsonファイルがない間は、一時停止をして、最大10回はファイルが存在するかしないかチェックします。途中で、csvjson.jsonファイルが見つかった場合は、If~EndIfの間が実行されるのでBreakアクションが実行されます。Breakアクションでは以後のループの全てをスキップするので、一時停止を無視し、残りのループ回数がいくつ残っていてもループを終了します。

ブレイクではなく、コンティニューだったら?

Breakアクションに対し、コンティニューアクションの場合は、「その回のループ内の残りのアクションを全てスキップして、ループの先頭に戻る」処理となります。このとき、ループの回数は増加します。

今回の例で言うと、ファイルが見つかった後はファイルは存在し続けますので、一度ファイルが見つかったら、以後はPauseは実行されないで[LoopStart]に戻りますので、人間の感覚ではBreakとの違いが分からない程度には高速にループが終了して、以後の処理が継続します。従って、あんまり違いがないと言えます。

とはいえ、ループの回数を「0」にした場合は、ループは自動で終了しなくなるので、 ファイルが見つかっても RPA が自動で終了しなくなってしまいます。また、そこまでしなくても数千回のループともなれば、体感でBreakとの違いが分かるくらいにもなります。

興味がある方は、置き換えて試して見てもいいでしょう(ただし、強制終了なども起こり得るので、ファイルの保存はお忘れなく)。

 

外部のコマンドラインツールを利用する

FTP経由でのファイルアップロードには、WinSCPのコマンドライン機能を利用します。GUIを操作する RPA を作成すると、この記事が長くなりすぎてしまう、といった問題もありますが、 RPA からコマンドラインのツールを利用できると、有償の Power Automate (Desktopではない)のように外部ネットワークと連携しやすくなるためです。

そこで、一旦、Pulover’s Macro Creator から離れて、WinSCPをダウンロードします。

WinSCPをダウンロードしたら、まずは GUI でアップロードに利用するログイン情報を作成します。ここでは、仮に「rpa_test」とします。設定の名称は日本語でもいいですが、誤動作防止のために半角ローマ字とします。

本記事の主題ではないので、WinSCPの細かな操作については割愛します。外部ツール連携のイメージだけつかんでください。

そうしたら、任意のフォルダに winscp_rpa.txtファイルを作成します。ファイル名も、適当で大丈夫です。作成したら、内容をメモ帳などで編集します。

option batch on
option confirm off
open rpa_test
option transfer binary
put D:\downloads\csvjson.json /example.com/your_directory/cors/test.json
close
exit

openの後ろには、先ほど WinSCPで作成したアップロード用のログイン情報です。本来、WinSCPのテキストからのバッチ駆動ではGUIで設定したログイン情報の使用は推奨されていません。が、 RPA に組み込むことを考えると、むしろGUIと共用できた方がいいと考えてこうしています。

続いて、putの行ですが、スペースで区切って左側が、RPAでダウンロードしてきたjsonファイルのパスとなり、右側がアップロード先と、そのファイル名となります。

これで、接続してファイルを一つアップロードする処理が記述されたことになります。

準備が整ったので、 Pulover’s Macro Creator に戻りましょう。

RPA の末尾に、「実行 / ファイル / 文字列 / その他」ボタン(F8キー)を押してRunアクションを追加します。

  • コマンドは「Run」
  • ターゲットは「winscp /console /script=”先ほどWinSCPのコマンドを記載したテキストファイルのパス”」
  • winscpにパスが通っていない場合は、LibreOffice や Chrome と同様に、フルパスでwinscp.exeの場所を記載する

以上でファイルアップロードの準備は完了です。

RunコマンドのTarget が、Libre OfficeやChromeのときより複雑になっています。これにはそれぞれ意味があります。/console には、GUIではなくCUI(キーボードを叩いて操作する)モードで起動する、という意味があります。/script には、更に続くテキストファイルに記載された、CUIのコマンドリストに従って操作を実行する、という意味があります。

一見、WinSCPにしか使えない RPA のように思えますが、 AIで有名な Python をPCで動かす場合にもこのRunコマンドが使用できます。そして、AIだけでなく、Pythonを利用して、ネットワークサービスに、ブラウザを経由しないで直接指示を出すことも可能です。そのため、先進的な RPA の利用のときにこういった使い方があると覚えておくと便利です。

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

最新の記事