UiPathでCookie Clickerに挑戦する

目次

  1. UiPathとは
  2. Cookie Clickerとは
  3. クッキーのクリック
  4. クリックをループさせる
  5. まとめ

こんにちは。karintomania(twitter)です。
UiPathは通常、業務の効率化に使われますが、
今回はCookieの生産性向上に使ってみます。

UiPathとは

最強のRPAツールです。(適当)
数あるRPAツールの中でもGartnerが発表したRPAツールレビューで
最高評価を取得したとのこと。強い。
UiPathの他にはBlue PrismやAutomation Anywhereなどが高評価を得ている。
なおWinActor(NTT)は最低評価の模様

Cookieをクリックして作る。
それだけのゲームです。
注意
この記事を書くまですごくシンプルなゲームだと思っていたのですが、
レベルが上がっていくと大量生産のために工場が出てきたり、お婆さんがアポカリプスするとか、転生するとか訳わからんことになっていくらしいです。
ひとまずその辺りは自動化のスコープ外としておきます。

クッキーのクリック

早速UiPathにクッキーをクリックさせてみます。
UiPathがクッキーを認識するかみてみます。

しっかり認識されました。これで効率化できそうです。
これができないと、どうにもならないので。
実際の業務では、一部認識しないソフトを触らないといけないことはザラにありました。
ぶつける先のない怒りを沈めながらSend Hotkeyなどで実装しましょう。

ロボットを実行すると最初の1クリックをしてくれました。
最初のクッキーを焼くと貰える称号、wake and bakeももらえています。
おそらくこれが初めてクッキーを焼いたロボットなのでは無いでしょうか。

とはいえ、これだけでは到底生産が間に合いません。もっと効率化しましょう。

クリックをループさせる

Whileアクティビティの中に先ほどのクリックアクティビティを配置することで、
連打させることができます。
いったん、ループ条件にtrueを入れて無限ループさせてみます。
実際に業務などでループをさせる際は終了条件をしっかり書きましょう(真面目)

実行してみます。
お、エラーが出てますね。

エレメントが見つからなくてエラーになっています。
セレクタに0 cookiesという文言が入ってしまっています。
修正しましょう。

1
2
3
4
5
// 変更前
title='0 cookies - Cookie Clicker'

// 変更後
title='* - Cookie Clicker'

セレクタ内に動的な要素が入らないように気をつけましょう。

改めて実行するとうまくいっているようです。

ただ、少し遅いですね。高速化してみます。
まず、思いつくのはWaitForReadyプロパティです。
一度クッキーをクリックしたらそれ以降、クッキーの表示を待つ意味は無いので、Noneに設定します。

また、要素を探すのにかかっている時間をなくすためにElemet Scopeアクティビティを使ってクッキーエレメントの中身だけ見るようにさせます。

Click Typeプロパティもダブルクリックにしてみます。
これによって単純に二倍速でクリックできるはずです。

スクショは撮り忘れたのですが、Simulate clickをONにすると
画面を最小化したりしていてもClickを続けてくれます。
便利なので設定しておきましょう。

さて、調整の結果はどうでしょうか。
うん、多少早くなったみたいです。
でもまだ早くできそうですね。

注意深くプロパティを見てみます。

delay time プロパティキターーーー

これはデフォルト200msに設定されています。
ご丁寧にもbefore,afterまであります。
これが設定されている以上、何をしても無駄な努力。
こいつを0に設定してあげましょう。

さて、実行です。
違いは出るでしょうか。

段違いで早いです。
もう、嬉しかったのでGIFにしてみました。

というわけでUiPathに最速でクリック連打させるためには、
delay timeプロパティを設定しよう、ということでした。

まとめ

クッキー生産の自動化、というかただの連打なのですが、
それだけでも以下のテクニックを使いました。
おさらいしてみます。

  • Whileアクティビティによるループ
  • セレクタから動的な要素を排除すること
  • Wait for Readyプロパティによる待ち時間削減
  • Element Scopeプロパティによる高速化
  • Click typeの変更
  • Simulate click
  • Delay before/after

ちなみにDelayアクティビティを使うのがダサいからって、
このDelay beforeプロパティで代替すると
保守とかで大変なことになるからダメ、絶対!!

今日はこの辺で。