LoginSignup
10

More than 3 years have passed since last update.

RPAの画面要素分解機能でいろいろなアプリの画面を分解してみた

Last updated at Posted at 2020-12-16

RPAが画面を操作する仕組み

RPAで画面操作の自動化をする手段として一般的に用いられているのが「画面要素分解」「UI要素分解」「セレクター」「UIタグ」などと呼ばれている手法です。主要なRPAベンダーではたとえばUiPathAutomation Anywhereなどがこの方法に対応しています。(WinActorは画像認識による方法であり、標準ではこの方法はサポートしていません)

この「画面要素分解」の手法は、Windows のAPIを使っているため、対応しているどのRPAツールでもほぼ同じように分解できます(できるハズです)。

MSAAとUI Automation

Windowsで実装されている「画面要素分解」のAPIにはMSAA (Microsoft Active Accessibility)UI Automationがあります。UI AutomationはMSAAの後継にあたるAPIです。これらは元々スクリーンリーダーや音声合成ソフトウェア等に対応するためのソフトウェアのアクセシビリティ(支援テクノロジー)を標準化するために生まれたAPIですが、この仕組みを使うことで画面操作をする際のUI要素を抜き出すこともできるのです。

UiPathでは「デスクトップレコーディング」においてUIフレームワークとしてMSAAとUI Automationの両方に対応しています。既定の状態ではMSAAを使うようになっており、場合に応じてUI Automationも選択できるようになっています。レコーディング中に F4 キーで切り替えることができます。
image.png
image.png
UI ExplorerでもUIフレームワークを選択することができます。
image.png

Automation Anywhereの場合、A2019の「ユニバーサルレコーダー」ではTechnology TypeはMSAA一択です。v11ではUI Automationを含めいくつかの他の手法にも対応していたので選択肢が狭まっています。
image.png

MSAAとUI Automationの動作の違い

この2つのAPIですが、実際に使ってみて画面要素分解を行ってみると、動作が違う部分があります。

以下はUWP (Universal Windows Platform)で作られたMicrosoft StoreアプリをUI Automation/MSAAでUI要素分解してみた例です。UI Automationでは右上の最小化、最大化、閉じるボタンがそれぞれ認識されている一方、MSAAだと3つの領域がひとまとまりで認識されています。
image.png

これはどのRPAツールで試すかによっても違うことがあります。特にブラウザーの場合は特別なプラグインが必要な場合もあるため、動作が違うようです。

また、試す回や手順などによって動作が異なってくる対象アプリもあるようで、一部動作不安定なところもある可能性があります。

Windows SDKのInspectで同等の機能が試せる

MSAAやUI AutomationはRPAツールのレコーダーで実際に使うことができるが、同じAPIはWindows SDKに含まれているInspect.exeというツールで再現できる。
入手方法は以下の記事を見てください。

Inspect.exe のインストール (Windows SDK)
image.png

Inspect.exeを起動している間は、マウスカーソルを置いている部分の画面要素が分解され、黄色い枠でハイライトされます。
Inspect.exeツールのウィンドウの左上のドロップダウンでMSAAかUI Automationかを選ぶことができます。

様々なアプリを試してみる

せっかくなので、Inspect.exeを使って、さまざまなアプリで画面要素分解がきちんとできるかどうかを試してみました♪

電卓

Windows付属の標準アプリでUWPです。MSAAでは右上の最大化、最小化、閉じるボタンが分解できないことを除いて問題なく要素分解できます。「常に手前に表示」モードになっているときは、黄色い枠が電卓ウィンドウの下に隠れてしまうため、黄色いハイライトが表示されなくなりますが、Inspect.exeのウィンドウの中を見ると、それぞれのボタンにマウスカーソルをホバーさせると、正常に要素が分解されていることがわかります。
image.png

メモ帳

Windows付属の標準アプリですが、こちらはWin32アプリで、しかもレガシーな部類です。本体のエディットコントロール、メニュー、ダイアログボックスなど、一通り問題なく要素分解可能です。
image.png

ワードパッド

Windows付属の標準アプリで、Win32アプリですが、リボンなども実装されています。リボンのタブやボタンなども含め大方問題なく画面要素分解できますが、リッチエディットコントロールの上の「ルーラー」は、つまみまで分解できないため、ここをRPAで操作するのは難しそうです。
image.png

ペイント

こちらもWindows付属の標準アプリで、Win32アプリ、リボンも実装されています。こちらはリボンの中のカラーパレットとキャンバスの中は完全にカスタムドローイングで、中身は要素分解できません。
image.png

また、ここで使われている色の編集ダイアログボックスも、Windowsの標準ダイアログボックスではあるのですが、カラーパレットの指定部分は分解できないようです。
image.png

エクスプローラ

タスクバーやスタートメニュー、デスクトップやフォルダなどのエクスプローラウィンドウの中に表示されるアイコンなどの要素はばっちり分解してくれます。ただし、スタートメニューなどは表示されるのに少し時間がかかるため、RPAで画面操作したときに動作が安定するかどうかは微妙なところです。

Microsoft Excel

Excelといえば、Microsoft Office (もしくはOffice 365 / Microsoft 365)に含まれる代表的なアプリケーションですね。マイクロソフトがアクセシビリティにも力を入れて開発しているアプリなので、細かいところまで画面要素分解が可能に作られています。

MSAAとUI Automationを使ったときの違いですが、実はスプレッドシートはMSAAを使うとひとつのキャンバスのように認識されます。
image.png

しかし、UI Automationを使うと、なんとセルの一つ一つまで分解が可能となっています。Excelのスプレッドシートの中身を触る際にはUI Automationが必須となってきます。もっとも通常はRPAツールではExcel関連のアクティビティからExcelのCOM Object Modelを通して操作する方が安定性が良いですが♪
image.png

また、数式バーの左上の部分は、MSAA/UI Automationのいずれでも分解できない部分がありました。
image.png

ちなみに、ExcelをはじめとしたMicrosoft Officeアプリで使われているカラーパレットは、ひとつひとつの色まで要素分解できる構造になっています。
image.png
さすがに、このUIの先にあるダイアログボックスになると、カスタムドローイングの部分が出てくるようですが。
image.png

Microsoft Word

Excelと同じく、文書部分はMSAAでは分解されず、UI Automationだと段落単位くらいでコンテンツも認識して分解します。
ワードパッドと同じく、ルーラー部分はこれ以上分解できないようです。
その他はだいたい要素分解してくれます。

Microsoft Outlook

こちらもかなりの部分が画面要素分解可能です。MSAAだとメール一覧のリストや、メール本文 (読み取り専用/編集可能エディットコントロール)は、ひとつのコントロールとして認識され、中身までは分解できません。UI Automationを使うと、リストの中の項目の一つ一つや、メール本文の段落単位 (箇条書き、ハイパーリンクのカタマリの認識を含め)でコンテンツも分解の認識をします。

Microsoft Teams

こちらもチャットの中のコンテンツ (吹き出しの中に書いた表のセルの一つ一つ etc.)まで、要素分解が可能です。タイトルバーのところに文字がないのでウィンドウタイトルがどれなのか迷いますが、" XXXXX | Microsoft Teams"のようなウィンドウタイトルになっているのがそうで、スレッドのタイトルになっていたりします。
image.png

Zoom

Zoomはホームページダイアログは特に問題なく要素分解できる。
image.png

会議中のウィンドウは、下のツールバーがマウスがホバーしたときにのみ表示される仕組みになっているため、MSAAだとマウスをツールバーエリアをホバーさせてもツールによっては取れないことがある (Inspect.exeだと取れない、UI Explorerだと取れる)。

MSAAの場合
image.png

UI Autmoationにするときちんと取ることができた。
image.png

Internet Explorer

ブラウザーのページキャンバスの中身はMSAAだとアプリケーション (UI Explorer etc.) によっては取れないことがあるようです。inspect.exeでは取れていました。UI Automationでは、ブラウザーのページキャンバスの中身のコンテンツもHTMLコントロールの単位で分解して取得できます。ツールバーやタブは問題なく分解できます。

Firefox

Internet Explorerとほぼ同じですが、MSAAでもUI Automationでは、ブラウザーのページキャンバスの中身のコンテンツもHTMLコントロールの単位で分解して取得できます。ツールバーやタブも問題なく分解できます。

Chrome / Edge (Chromium版)

Firefoxと同じです。ツールバーやタブも問題なく分解できます。

Adobe Acrobat Reader

1年前のビルドでは、UI要素分解ができないコントロールが多かったAdobe Acrobat Readerですが、2020年12月現在の最新のビルドでは、きちんと掴めるようになっていました。(ただ、試す回によっては赤い部分が相変わらずつかめない場合があり、動作が不安定である可能性があります。)
image.png
image.png

参考:(1年前の記事)
【UiPath】アンカーを使ったコントロールの指定についてもう一度解説!

Lotus Notes (IBM Notes 9.0 Social Edition)

メニュー、タブ、ツリービューなど、基本的な要素はある程度要素分解できる。リッチエディットコントロールに貼られている添付ファイルも要素分解できるため選択が可能です。ただし、ツリービューでの選択など、実際にRPAで動かしてみると思い通りに動かない箇所もあるため、RPAで動作をさせるには工夫が必要になる場合があるようです。

image.png
: MSAA、UI Automationとも分解可能
: UI Automationで分解可能、MSAAは不可。
: いずれでも分解できない

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10