Pulover’s Macro Creator で画像が出るまで待つ RPA を作る!

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

RPA を作る上で、ウィンドウが表示されるまで待つなら、画像が表示されるまでも待ちたいですよね? 特に、ウィンドウ自体が変わらないウェブサイトの操作などでは、画面の遷移を待つ場合などに画像の表示を利用することができます。

そこで、今回は画像が表示されていたらただクリックするだけではなく、そこから次の画像が表示されるまで待ってからクリックするという動作と、待つ動作に不可欠な「ループ」処理について解説します。

 

この記事の内容
  • Pulover’s Macro Creator で画像を見つけた際に、クリック以外の動作、より詳細な動作をさせる方法を学習します。
  • Pulover’s Macro Creator で画像が表示されるまで待つ動作を学習します。
  • 待つ動作のために、ループ処理・ループからの抜け出し方について学びます。

 

Pulover’s Macro Creator で画像が出るまで待つ RPA を作る!

下準備

今回もメモ帳を使用しますが、 RPA シナリオを作り直しますので、ファイルを新規作成しメモ帳をアクティブにするアクションを追加してください。

PMC ファイルは再利用しませんが、画像検索に使う画像を一部再利用しますので、まだ第8回をやっていない方は、画像をキャプチャするところまで進めるか、第8回を終わらせてきてください。

 

今回作成する RPA の全体像

  1. 「ファイル(F)」をメモ帳のウィンドウから探し出します。
  2. 画像の中心をクリックします。
  3. 「名前を付けて保存(A)」の画像が出てくるまで待ちます。
  4. 名前を付けて保存の中心をクリックします。

また、見つからなかった場合の処理なども学習します。

 

メモ帳からファイル(F)を探すアクションを追加

「イメージ/ピクセル検索/画像からテキストへ」ボタン(F7キー)を押して、アクション追加ダイアログを表示します。

これまでは、Pulover’s Macro Creator でスクリーンショットを作成していましたが、以前キャプチャーした画像ファイルがそのまま使えますので「…」ボタンをクリックします。

ファイル選択ダイアログが開きますので、前々回作成した画像を選択します。それから「画像の中心に座標を調整」にチェックをいれます(画像ではチェックが入っていませんが、入れてください)。

また、「If文を追加」にチェックが入っていることを確認して、「OKボタン」をクリックします。

If文込みで画像が作成されました。

 

後からIf文を追加 / 今回新しく作り直した理由

If文の「Windowがアクティブなとき / 非アクティブなとき」と同様に画像検索の編集ダイアログでは、後からIf文を追加することができません。

ただし、これも同様に、後から手動でIf文を追加することができます。

If文を手動で追加する場合の条件は「画像 / ピクセルが見つかった場合」「画像 / ピクセルが見つからない場合」となります。

あわせて確認しておきましょう。

 

画像の中心をクリックする

これまでは、画像検索の編集ダイアログで直接、クリックコマンドを実行していました。しかし、今回は「If文」の挿入を選んだためにクリックコマンドを追加していません。

どのようにクリックすればいいでしょうか?

実は、画像検索の編集ダイアログには、「出力変数」という項目があり、標準でFoundX, FoundY(見つかったX座標、見つかったY座標)が入力される仕組みになっています。

マウスアクションに使用するX座標、Y座標は、このFoundX, FoundY 変数 を見ることで解決します。

 

変数はクリップボードのようなもの

変数というのは、プログラミングにおいては基本の基本ですが、 RPA ではむしろ隠蔽 / 使っていることを意識させないように工夫されていることが多いようです。

RPAを使う上でのイメージとしては、「コピー&ペーストに使うクリップボードに、名前をつけて沢山もっておける」と理解していただければ大丈夫だと思います。

とはいえ、クリップボードとの違いは、変数の中身で「計算したり、文字を追加、編集したり」といったことが可能になる点です。ただ、今の段階ではそこまで考える必要もないと思います。

 

では、マウスのクリックアクションを追加していきましょう。追加された[EndIf]アクションを選択状態にします。マウスボタン(F2)を押して、マウスコマンドの編集ダイアログを表示します。

  • アクションを「移動してクリック」に変更
  • 座標のX に %FoundX% を入力
  • 座標のY に %FoundY% を入力

上記のように設定します。Pulover’s Macro Creator では変数の中身の読み出しを指示するときに%で囲むルールがあります。

これで、X座標がFoundXの中身、Y座標がFoundYの中身、という意味になります。そして、それぞれの中身は、画像検索のアクションで設定されているということになります。

また、マウスのLeft Move & Click アクションが、If文の間にあり、画像が見つからなかったときは実行されないことも確認してください。

 

画像が見つからなかったら終了する

このままだと、画像が見つからなかった場合はIf文の続きがそのまま実行されてしまいます。ウィンドウをアクティブにしたのに、ファイル(F)が見つからない、というのはなんらかの異常自体であることが想像できます。

ということで、ユーザーにダイアログで見つからなかった旨を通知して、そのまま RPA の実行を停止するアクションを追加します。ここまでのチュートリアルの復習ですね。

 

[Else]の追加

[EndIf]を選択した状態でIf文ボタン(F10)を押します。

「加える」セクションの中の「Else」ボタンを1度だけクリックして、「キャンセル」をクリックしてダイアログを閉じます。

 

メッセージボックス(ダイアログ)の追加

同じく[EndIf]を選択した状態でメッセージボックスボタン(Shift+F5)を押します。

メッセージボックスの内容は、今回はテストなので適当でも構いませんが、ここでは実際の運用を想定して分かる様に設定してみます。

まず、タイトルははっきりとエラーであると分かる様に、「エラー」と書きます。アイコンも、「エラー」にします。

メッセージには、「エラーの内容」と、「OKをクリックしたら何が起きるか」を記載します。

ボタンは、メッセージボックスが閉じたら必ず RPA の実行を停止する予定なので、「OK」にしておきます(複数のボタンがあると、押すボタンによって動作が変わるのではないか? とユーザーに誤認させる恐れがあります。)。

入力が終わったら、OKでダイアログを閉じます。

メッセージボックスの復習はこちら

 

中断処理(RPA のシナリオから抜ける)の追加

RPA から強制的に終了するには、returnアクションを活用するのでした。

[EndIf]を選択した状態で「実行/ファイル/その他」ボタン(F8)を押します。

「実行/ファイル/その他」の編集ダイアログが表示されたら、

  1. 「フィルター」アイコンをクリックし、フィルターを表示します
  2. 「その他」を選択状態にします。
  3. コマンドから「Return」を選択します。
  4. OKボタンをクリックして、アクションを追加します。

フィルターを利用しなくても、「すべて」のまま、Return を探し出してOKでも構いません。ただ、「実行/ファイル/その他」ダイアログのコマンドは数が多いので、先にフィルターである程度絞っておくと、探しやすいです。

 

プログラミングでも頻出の処理

この「If文で条件を判断し、条件を満たしていたら / 満たしていなかったら Returnで実行を終了する」という処理はプログラミングでも頻出します。

いやいや、アプリケーションはそんなすぐに終了したりしないよ? と思うかもしれません。それはその通りですが、プログラミングや、もう少し複雑なRPA になってくると、「関数」と呼ばれる仕組みを利用するようになります。

その「関数」も実は「Return」をすると、プログラムや RPA ではなく、その関数を強制的に終了するという効果があります。その最後の段階が「プログラムや RPA を終了する」という行為になります。

私たちが普段利用しているプログラムは、そうした開始や終了が複雑に組み合わさって構成されています。

不必要な入れ子(ネスト)は避ける

実は、今回は[Return]がなくてもほぼ同じ機能をもつ RPA が作成できます。気づいたあなたは鋭いですね。

そう、最初のIf文の中に、次の画像の検索やクリックの処理を書けばいいのです。

しかし、そうすると、If文の中が大きくなり、If文が多重になってしまいます。Pulover’s Macro Creator では*の数で、どの段階のIf文で実行されるアクションかを示してくれますが、それでもみづらかったり、誤解したりでバグのもととなります。また、[Else]と最初のIf文が離れてしまうので、メッセージボックスの表示をまとめて見ることが難しくなります。

そのため、できるだけIf文やElseの中身は簡潔に記載するようにしましょう。これもプログラミングと共通の内容になります。

※もっと綺麗に書こうとする場合は、If文を「画像が見つからなかった場合」にすることも可能です。この場合はIf文とEndIfの間に、メッセージボックスとReturnを書き、EndIfの後にクリック操作を書くこともできます。ただ、そうすると「画像を探して見つかったとき」と頭で考えるのと逆になってしまい、混乱しがちなので避けた方がいいでしょう。

 

画像が表示されるまで待機する

Windows 10では通常、クリックしてからメニューが表示されるまでアニメーションでフェードインしてきます。

このフェードインの時間を見積もってSleepを入れてもいいですが、安定動作のためには表示されるまで待ちたいですよね。その方が通常、適当な時間を見積もるよりも RPA の動作も早くなりますし。

ということで、まずはアクションリストでなにも選択していない状態で、「イメージ/ピクセル検索/画像からテキストへ」ボタン(F7キー)を押して、アクション追加ダイアログを表示します。

  1. キャプチャーボタンをクリックして、「名前をつけて保存」メニューのスクリーンショットを作成します(背景が青くならないように気をつけてください)
  2. 「If文を追加」にチェックを入れます。
  3. 「画像の中心に座標を調整」にチェックを入れます。
  4. 「変形」に10を入力します。
  5. 「…まで繰り返し」にチェックを入れます。
  6. 「遅らせる」を100ミリ秒に設定します。
  7. OKボタンをクリックしてアクションを入力します。

これで、「名前をつけて保存」が表示されるまで、 RPA の実行を停止して待機します。

「遅らせる」の数値には要注意

表示される画像を待つ処理は今回の場合、正確に言うと、100ミリ秒(0.1秒)に1回、画像があるかどうか検索しています。何故かというと、画像の検索はPCにとってそれなりに負担がかかるため、ある程度の間隔をあけないとフリーズしたりする恐れがあるからです。

そのため、「遅らせる」の数値を小さくすれば RPA が機敏に動作しますが、その分PCに負担がかかり、余計な電気代を使ったり、そもそも目的の画像が表示されるまでが長くなってしまう場合があります。あまり小さな数値を入力しないようにしましょう。

 

If文の中に、マウスのクリック処理を追加する

さっきと全く一緒ですね。「マウス」編集ダイアログから入力してもいいですし、先ほど入力したマウスアクションをコピーしてきてもいいです。

FoundXとFoundYの座標をクリックするアクションを、今追加されたIf文の中に入れましょう。

変数は上書きされる

画像検索などで、同じ変数名を利用した場合、その前に入っていた中身(数値や文字)は消えて、新しいものに上書きされます。これもクリップボードのようですね。

 

実行して動作を確認する

ここまでできたら、「停止」のショートカットキーが設定されていることを確認して、 RPA を実行してください。

どうでしょう? きちんと「名前を付けて保存」ダイアログが表示されたでしょうか?

表示されなかった方は、「停止」のショートカットキーを押すか、ツールバーコントロールからRPA の実行を停止してください。それから、2回目の画像検索編集ダイアログの、「変形」に入力された数値を大きくして試してみてください。

不安定な画像検索

メモ帳の「名前を付けて保存」などのメニューはマウスカーソルがのって選択される前と、された後では、非選択状態でも微妙に見た目が違うようです。

そのため、多少の誤差は許容する「変形」の数値を入れています。

このように、画像検索は不安定な要素が存在しているので、おかしいな? と思ったら変形の数値をあげてみましょう。

 

画像が見つからなかったときに対処する

上記で上手く動作した方は、「変形」の数字をゼロにして RPA を実行してみてください。おそらく、今度は「名前を付けて保存」ダイアログが表示されずに RPA がとまってしまうと思います。「停止」のショートカットキーなどで、RPAの実行を停止してください。

もし、変形の数値を0にしても、やっぱりRPAがきちんと最後まで動く方は、一回、全然違う画像を検索するようにしてください。

今回の「微妙に違う」問題のように、なんらかの原因で画像がいつまで経っても表示されない場合があります。そのときに、誰かが気づいてとめるまで、 RPA が画像を探し続けたままフリーズしたようになっていたら困りますよね。

ということで、「何秒か待っても画像が見つからなかったら、エラーを表示する」処理を追加しましょう。

「Continue, Continue」となっているアクション(2回目の画像検索のアクション)をダブルクリックして、編集ダイアログを表示します。

  1. 「…まで繰り返し」のチェックを外します。
  2. 「見つかった場合」をBreakにします。
  3. 「繰り返し」を10~30くらいにします。
  4. 変形を0にするか、画像を全然メモ帳と関係ないものに差し替えます。

 

[Else]とメッセージボックスを追加する

今回も画像が見つかったらコピー、何も見つからなかったらその旨を通知したいですね。

さきほどと同じ手順でElseとメッセージボックスを追加するか、コピー&ペーストで追加しましょう。

特殊なアクションに思える[Else]ですが、If文との対応関係があっていれば、コピー&ペーストで問題なく動作します。

 

実行して動作を確認する

「変形」や画像ファイルを調整して、絶対に見つからない状態で実行すると、「ファイル」をクリックしてメニューが表示されてから、1~3秒後にメッセージボックスが表示されて見つからない旨が通知されるはずです。

また、変形の値や画像ファイルを戻せば、きちんとクリックされることが分かります。

このように、一定時間経っても望む結果が得られないときに中断して次の処理に進むことを、タイムアウトと言います。

 

「…まで繰り返し」と「繰り返し回数とBreakの組み合わせ」

「…まで繰り返し」はずっと待つ

最初に設定した「…まで繰り返し」と、「Found」の組み合わせは、

  1. 「指定された画像を探して」
  2. 「画像が見つからなかったら100ミリ秒待って」
  3. 「もう一度画像を探すために1に戻る」

をずっと繰り返してしまいます(実は画像が見つかっても見つからなくても100ミリ秒待っているのですが…)。

 

繰り返し回数とBreakの組み合わせ

繰り返し回数の場合は、

  1. 「指定された画像を探して」
  2. 「指定された画像が見つかっているか? を判断して」
  3. 「指定された画像が見つかっていたら、強制的にループを終わり、以後を実行しない」
  4. 「100ミリ秒待って」
  5. 1ずつ数えていって、
  6. 指定回数数え終わっていたら終了する。数え終わっていなかったら1に戻る

という処理になっています。

この「指定された画像を見つかっているか判断して、見つかっていたら強制的にループを終わる」というのが、「見つかった場合のBreak」です。

RPAの実行を強制的に中断したり、今後出てくる関数を中断するアクションが「return」だと説明しましたが、このように「繰り返し」の場合にはReturn ではなくて Breakを使用します。

これもプログラミングと同じ考え方なので、覚えておくと作れる RPA の幅が広がります!(もちろん、プログラムを覚えたくなったときにも役に立ちます)

 

実は、Pulover’s Macro Creator ならBreakを使わなくてもできる

通常のプログラミング言語などでは、上記のように考えるのが一般的です(あと、Breakを紹介したかったので書きました)。

ただ、Pulover’s Macro Creator とその元となったAutoHotkeyでは、「…まで繰り返し、ただし、上限回数を設定する」という書き方が簡単にできるようになっています。

Pulover’s Macro Creator では上図のように、「まで繰り返し」と、「繰り返し」の数字を同時に設定するだけです(繰り返し回数が1のときは、特別に処理されています)。

 

おわりに

とうとう、If文、変数、ループ、画像検索と高機能な RPA を作成するのに必要な要素がそろいました。これらの概念になれておくと、プログラミングを学習する足がかりにも充分すぎるほどの知識になっていると思います。

とはいえ、メモ帳などのかんたんなアプリケーションで機能ごとに解説していますので、「業務レベルで複雑なものを開発するとなると、イメージが湧かない」という方もいるかと思います。

この後は、複雑な機能の紹介などはしばらくお休みして、実際に RPA として動作させられるようなサンプルを用意できれば、と考えています。

プログラミングと違って、 RPA で困るのは、業務と密接に関わっていて表に出せなかったり、使っているアプリケーションが特殊だったりして全ての環境で動作しないことが多いことです。

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

1件のフィードバック

コメントを残す

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

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

最新の記事