不正アクセスと間違われず大量POSTを自動化
とあるOTAの管理画面で、1か月分のカレンダーに料金を入力するフォームがあるんですが、31個のテキストフィールドすべてにいちいち金額を入力しなければならないという、効率なんてまったく考えられていないフォームになっています。
しばらくは、金額をコピーしたあと、左手はCtrlとTabに、右手はVに指を置きCtrl+V、Tab、Ctrl+V、Tab、…と31回繰り返していたのですが、さすがにあほらしくなってきたので、自動化することにしました。
Windows 11 には最初から「Power Automate」というRPA1ツールが入っていますので、これを使います。
スタートメニューから「Power Automate」を検索すると、以下のようなアプリが表示されますので、クリックして起動します。
「+新しいフロー」で空のフローを作成します。
31回のループを作ります。左のアクションから「ループ」>「Loop」を真ん中の「Main」にドラッグし、以下のように設定します。
キー入力のアクションは、「マウスとキーボード」>「キーの送信」です。これを Loop と End の間にドラッグします。
「キーの送信」の設定は、まず「テキストをハードウェアキーとして送信します」をチェックします。「送信するテキスト」に以下のコードを記入します。
{Tab}{ControlKey}({V})
これで31回の Tab、Ctrl+V のループが出来上がるのですが、実際に何度か動かしてみると、WAF らしきものに不正アクセスと間違えられ、しばらくシャットアウトされてしまいました。
幸い、数分経つとまたアクセスできるようになったので事なきを得ることができましたが、運営側に解除してもらうようなことにでもなったらちょっと大変でした。
そこで、ループの間隔を大きくしてみたのですが、それでもだめでした。
このフォームは1つのテキストフィールドを変更すると、Ajax で変更をPOSTしているので、結果的に一定間隔でPOSTしていることになり、ボットみたいなのだと思われてるのかも、と考え、ランダムなウェイトを挟んでみることにしました。
まず、乱数を変数 RandomNumber
にセットする「変数」>「乱数の生成」を「キーの送信」の上にドロップします。100~300ミリ秒のウェイトにするため、乱数の範囲は100~300にします。
次に「フローコントロール」>「Wait」を「乱数の生成」の下にドロップし、「期間」に以下を記入します。
%RandomNumber / 1000%
Wait は秒数なので、100~300ミリ秒にするには、1000で割る必要があります。また、数式を入力する場合は%で囲む必要があります。
最終的な編集画面は以下のようになっています。
このスクリプトを実行すると、WAF に捕まることもなくなりました。
なお、実行は以下の手順で行う必要があります。
- カレンダーの1日に金額を記入
- Ctrl+A Ctrl+C で金額をコピー
- Alt+Tab で Power Automate をフォアグラウンド化
- 「実行」ボタンクリック
- Alt+Tab でカレンダーをフォアグラウンド化
- スクリプトが終わるまで待つ
これで指がつりそうになることが回避できました。
- Robotic Process Automation ↩︎