👔

WinActorでブラウザ操作

2021/06/20に公開

Webブラウザ(主にIE)操作のコツ

仕事でWinActorを構築してて、ある程度知識がついたので備忘です。
RPAのメリットはAPIの無いシステムを自動処理できることだと思ってるので、レガシーWebシステムの自動処理とかに使ってる人が多いんじゃないですかね。
ということで、Webブラウザ操作について共有します。
WinActorのバージョンはv7、OSはWin10使ってたはずです。

画面描画(モニター)は必須

何を思ったのか、場所を節約するためにデスクトップPCにモニター繋がないで、もしくはノートPCで画面を閉じて運用したらいいんじゃないか、と閃いた時期がありました。
結論から言うと、無理でした。

製品仕様を問い合わせたところ、ウィンドウ識別を行うノードやライブラリは画面描画していないとウィンドウ識別が行えずにエラーが発生するとのこと。

ついでに、私はPC2台持ちなのでリモートデスクトップ接続をして裏で自動処理を回し続けるってアイデアもありました。
リモデ画面を最小化したらうまくいかなくなったのでこちらも問い合わせてみました。
リモデ接続先でもWinActorを動かしっぱなしにできるっぽいですがちょいちょい制約がありました。

リモデ接続の場合

製品仕様を問い合わせたところ、以下の回答をもらえました。
リモデ接続でシナリオを実行する場合はリモート元のPCでリモート接続を切ったり、リモート画面を最小化するとエラーが発生するとのこと。
リモート画面を限りなく小さくして実行するなど、画面描画をさせておく必要があり、さらに解像度もリモート元に合わせる必要があるそうです。

「リモート画面を限りなく小さくして実行する」 については私が自分の環境で試した時は上手く動作しなかったので、結局リモデ接続でもフル画面描画して実行したほうがいいと思います。

ウィンドウ識別が正しく動作しないとき

大変よく起きます。以下の点を確認してみてください。

  • ブラウザの保護モード
  • ActiveXなどのプラグインが動的に読み込まれる
  • 毎回ウィンドウ名が変わる
  • タスクスケジューラのウィンドウ
  • IEが操作できない状態で頑張っている
  • Windows標準の通知

「ブラウザの保護モードがON」になっていないか

「ブラウザの保護モードがON」になっている状態だとウィンドウを掴めなくなります(IEの場合)。まずはここを確認すると良いと思います。信頼済みサイトに入っているか否かも一応チェックしたほうがいいです。

ActiveXなどのプラグインが動的に読み込まれるページではないか

次に、若干レアですが画面内にActiveXなどのプラグインが動的に読み込まれた場合も(恐らく)セキュリティ的な制約だと思われますが、ウィンドウを掴めなくなります。
ちなみにPDFを画面内に表示するようなやつもPDFはプラグインを介してロードされるので
同様の事象が発生します。
プラグインがロードされているかどうかは開発者モードで確認すると良いと思います。

毎回ウィンドウ名が変わっていないか

ウィンドウによっては検索ワードがウィンドウ名に入っていたりするため、設定時とウィンドウ名が変わっていないか確認してください。
ウィンドウ名が変動しているようであれば、ウインドウ識別ルールを緩くすることで動作不良を解決できる可能性があります。
参考サイト

タスクスケジューラのウィンドウが存在している

WinActorよりタスクスケジューラウィンドウのほうが強い権限で起動されるため、タスクスケジューラのウィンドウが前面にあるとWinActorのブラウザ等の画面情報を使用する操作が正常に動作しない可能性があります。
ちなみに、対策は以下の通りです。

  • シナリオの最初に「タスクスケジューラの画面(ウィンドウ)を最小化、または閉じる」動作を含んだシナリオを設定
  • あらかじめタスクスケジューラの画面(ウィンドウ)を閉じておく

IEが操作できない状態で頑張っている可能性

Webブラウザを立ち上げるときはIE起動の完了待ちを行い、その後ウィンドウ前面化の処理を行った方が良いです。以下のノードを使用します。

  1. IE操作(読込完了待ち)
  2. ウィンドウ前面化

ウィンドウ前面化の処理について、エミュレーションや画像マッチングを行う際には操作対象が前面に存在する必要があるため、ウィンドウ操作の処理を行う時には基本的に前面化の処理を入れておいて損はないと思います。

上記で解決しない場合に行った謎対策
起動しているはずのIEの存在をWinActorが永遠に認知してくれない挙動をしたことがありました。IE操作の前(IE起動直後)に一回画面の任意の場所をクリックする処理を入れるとウィンドウが取得可能な状態になり、解決したことがありました。

Windows標準の通知は全てオフとなっているか

Windowsの通知はWinActorより上位権限で実行されるためWinActorの動作に干渉する可能性があります。
そのため、トースト通知等が来ると予期せぬところで操作対象がそのトースト通知にすり替わことがあります。

諦めも肝心

100回に1度くらい処理が失敗して、原因がさっぱりわからない場合もあります。
そんな時は諦めましょう。あなたの時間がもったいないです。
てことで、根本的な原因追及はやめて以下の対策をしてみてください。

  • 実行速度を遅くする
  • HTML取得をやめて画像マッチングにする

スロー実行の設定を入れる

Webブラウザ操作の箇所だけスロー実行の設定を0から2に変更したすると全くエラーが起きなくなったこともあります。
ブラウザの読み込み速度なんてそんなものなので割り切ってスロー実行しちゃうのも一つの手だと思います。
そっちのほうが最終的に安定稼働し、処理速度も上がる場合があります。

とはいえ、スロー実行なんかせずブラウザ操作に失敗したらリトライすればいいやんと思う方もいると思いますので、ご参考までに以下の体験を記載しておきます。

あるシナリオは操作に失敗したら5秒間隔で10回同じブラウザ操作をするような仕組みにしていました。
しかし、それでも「不測のエラーにより継続ができません。」といったエラーが発生する状況でした。
そのシナリオに対して、スロー実行の設定をしたところエラーがぱったり無くなりました。

ブラウザ操作は人間ぐらいの操作速度で実行するのが一番だと思います。
「スロー実行の設定」ライブラリは、実行スピードを変更したい箇所に入れるとその箇所以降の各ノードを実行する前に待機時間を設けてくれます。
設ける待機時間は0~10の値で設定でき、実行速度の値が1増えるごとに0.1秒ずつ待機時間が増える仕様です。

HTMLの取得をやめる

どうしても動作が不安定な場合はHTML情報を取得して、Webブラウザ操作をすることをやめてもいいと思います。
どんなサイトだと安定稼働するとかは一概に言えるものではないらしく(製品的にそれでいいのか?)サイトの構造に大きく影響するらしいです。
HTMLの取得+操作ができるサイトにも関わらず、画像マッチングのほうが確実に動作する場合もあるそうです。
ただ、せっかくHTMLが使えるならそっち使いたいですよね、、、

ブラウザ操作が急にうまくいかなくなった

今まで1か月ぐらい、順調に動作していたのに急に動作が不安定になったということもあると思います。
その場合は、Windowsアップデートを行った後じゃないかを確認してください。
Windowsアップデート後に急に動作が不安定になることもあります。
メジャーなアップデートどころかパッチ適用しただけで不安定になることもありました。
RPAを動かす端末は完全に独立させて、Windowsの自動更新とかは全部切った方がよさそうです。
個人利用とか小規模利用の場合は都度シナリオ修正すればいいと思いますが、大々的に使っちゃってる場合は急にエラーが発生する場合があるので気を付けてください。

安定稼働のために

シナリオの動作自体を軽くするということも一つの手だと思います。
ということで、シナリオサイズを簡単に削減する方法もいくつか紹介しておきます。
動作を軽くすることで「不測のエラーにより継続ができません。」のエラーが解決することもあります。
上記のエラー自体はWinActor内部で想定外のエラーを検出した際に出力するものであり、その原因については様々な可能性があるらしいですが、メモリ不足の可能性もあるっぽいです。

不要なイメージファイルを削除

イメージ管理のアイコンをクリックし、「未使用イメージ名削除」を実行すると、シナリオファイルのサイズが削除した画像分、軽くなります。
いつの間にか結構溜まっていたりするので、確認してみてください。

ウィンドウ識別のキャッシュクリア処理を追加

ループがたくさんあるシナリオを実行すると、ウィンドウ識別のためのキャッシュがどんどん溜まっていくため「ウィンドウ識別クリア」ライブラリをループの初めに追加した方が良いです。

ターゲット枠の表示をしない

初期設定では処理対象をオレンジ色の枠で囲んでから処理を行うため、その設定をオフにします。
オフにする方法
メイン画面>設定>オプション>ターゲット枠を表示する のチェックを外す

動作を軽くするために、当時の自分は以下のサイトを参考にしてた気がするので、あげておきます。
参考サイト

以上、RPAのシナリオを作るうえで参考になればと思います。
いろいろ書きましたが、RPAは心臓に悪いので嫌いです(笑)

Discussion