StudioXのアクティビティ

UiPath StudioXのアプリ/Webアクティビティ【UI要素取得】

2021/10/13

UI要素とは、(厳密な定義とは違いますが)ここでは"UI要素=アプリ/Webを構成する部品"と考えておけば十分でしょう。

UI要素 = アプリ/Webを構成する部品

例えば、ボタン、テキストボックス、画像、テーブル、メッセージボックスなど、画面上に見えているものは全てUI要素として捉えられます。

アプリ/Webで、どのような画面表示に遷移したかにより、その後の処理をどうするか切り分けたい事は多くありますよね。

その場合まずは、切り分ける要となるUIを特定し、対象のUIの状態を調べる必要があります。

UI要素取得のアクティビティでは、UIの有無、UIの属性、UIに記載されている文字列など、様々な情報を取得できるわけです。

この記事では、以下のアクティビティについて解説します。

記事編集時のStudioX - ver2022.4.3

UI要素取得のアクティビティ

  • アプリのステートを確認
  • 属性を取得
  • テキストを取得
  • 表データを抽出
  • 繰り返し(各UI要素)

アプリのステートを確認

UI要素が存在するかどうかを検証し、自動化したアプリが特定のステートであることを確認します。検出されたステートに基づき一連のユーザー定義のアクションが実行されます。(ガイドはこちら)

指定したUI要素が、表示されたか(もしくは消滅したか)を判定します。

また、その結果により後続処理の流れを切り分けます。

ここでは、以下の項目について解説します。

  • 画面上でターゲットを指定
  • [待機対象]と[秒]
  • ブランチを切り替え
  • [ターゲットが出現]と[ターゲットが出現しない]
  • 入力要素
  • 出力要素
  • 実行前の待機時間
  • 結果

画面上でターゲットを指定

表示/消滅したかどうかについて、チェックしたいUI要素を指定します。

例えば、今日の天気を調べて、晴れアイコンが表示されるかをチェックする場合は、以下のような流れになります。

予め、Googleで"天気"を検索したページを開き、
リソースで指定しておきます。
[アプリのステートを確認]をリソースの内側に追加します。
[次で指定]をクリックします。
晴れのアイコンをクリックし、[確認]をクリックします。
(アンカーに"℃|℉"を指定しています。)
アイコンが指定されました。

サンプルでは、リソース内に追加していますが、実は、リソースの外側でも利用出来ます。

つまり、リソースで範囲を指定しなくていいという事ですが、他のアクティビティと組み合わせることになるため、結局はリソース内に追加するケースが多いでしょう。
おぐし

[待機対象]と[秒]

[待機対象]は、"出現する要素"と"消滅する要素"の2つから選択します。

[秒]は、UI要素が出現/消滅するまで待機する秒数を指定します。既定値は5秒です。

指定のサイトに移動した後、ローディングの時間が長いページとかありますよね。

例えば、ネット回線速度をテストするサイト"Fast.com"があります。

このサイトは、一定時間経過した後に結果が表示されるんですが、その計測時間は少なくとも10~20秒必要です。

そして計測が完了したら、下図のように"詳細を表示"というボタンが表示されます。

初期値の5秒だと、"詳細を表示"ボタンが表示される前にタイムアウトとなってしまいます。

このような時、待機時間を20秒などと指定すれば、UI要素が表示されるまで長くかかっても待機してくれるわけですね。

逆に、計測中に表示されているを指定する場合は、[待機対象]を"消滅する要素"とすれば同じ結果が得られます。

ブランチを切り替え

ターゲットのUI要素が、指定時間内に表示(消滅)した場合、または、表示(消滅)しなかった場合の、後続処理のグループ(シーケンス)の有無を切り替えます。

両方、または片方のグループ(シーケンス)に、必要なアクティビティを追加してください。

なお、表示(消滅)しなかったと判定されるのは、「[秒]に指定した時間を経過してもUI要素が表示(消滅)されなかった場合」となります。

ブランチのパターン

ブランチは4パターンあり、クリックすることで切り替わります。

  • ターゲットが出現(消滅)したときとしないとき両方
  • ターゲットが出現(消滅)したときのみ
  • ターゲットが出現(消滅)しないときのみ
  • どちらとも表示しない
ターゲットが出現(消滅)したときとしないとき両方

ターゲットが出現(消滅)したときのみ

ターゲットが出現(消滅)しないときのみ

どちらとも表示しない

どちらとも表示しない場合は、[出力要素]に記憶する名前を指定し、他のアクティビティで結果を活用します。

入力要素

他の、アプリ/Web系のアクティビティで参照したUI要素と同じものを利用したい場合に指定します。

この項目を使うためには、予め別のアプリ/Web系アクティビティの[出力要素]を指定しておく必要があります。

例えば、サイト"Fast.com"で回線速度を測定する場合、をクリックすると測定が始まりますが、

その後、アイコンの状態を確認したい場合、以下のようになります。

つまり、[クリック]アクションの[出力要素]を"測定ボタン"という名前で保存し、[アプリのステートを確認]アクションの[入力要素]で同じアイコンを参照するため、"測定ボタン"を指定します。

[次で指定]をクリックし、同じUIを指定しても、確かに結果は同じです。

しかし、[入力要素]を使ったほうが、同じUIを指定していると明確に分かるという点で、メリットがあるでしょう。

出力要素

[アプリのステートを確認]アクションで指定したUIを、他のアクティビティで参照するため、名前を付けて記憶します。

実行前の待機時間

ステートを確認する前の待機時間を指定します。初期値は0.2秒です。

[秒]との違いですが、[秒]は、指定した時間UIの表示(消滅)を待つ時間です。

プロパティでは[タイムアウト]と表記されているので、そちらの方がニュアンスは伝わりやすいでしょうか。

対して[実行前の待機時間]は、処理を実行する前に、指定した秒数だけ待機するという意味になります。

結果

アプリのステータス判定の結果について、名前を付けて記憶します。

対象のUIが表示(消滅)した場合、指定した名前にはTRUEが代入されます。

逆に、対象のUIが表示(消滅)しなかった場合、指定した名前にはFALSEが代入されます。

ステータスの判定結果を、このアクション以外で参照したいときに、[結果]を利用するといいですね。

なお、ほとんどの場合、[If]アクションと一緒に使うことになるでしょう。

 

属性を取得

UI要素の、指定した属性の値を取得します。(ガイドはこちら)

UI要素には、例えば、たった1つのボタンだとしても、それに関連する色んな属性が含まれています。

対象となるUI要素の属性情報を取得するために、このアクティビティを使用します。

ここでは、以下の項目について解説します。

  • 画面上でターゲットを指定
  • 属性
  • 保存先
  • 入力要素
  • 出力要素
  • エラー時に実行を継続
  • タイムアウト
  • 実行前の待機時間
  • 実行後の待機時間

画面上でターゲットを指定

属性情報を取得するUI要素について、指定します。

[画面上でターゲットを指定]をクリックします。 属性を取得したい要素を選択します。
[確認]をクリックします。
要素が指定されました。

属性

取得したい属性名を指定します。

属性は、プルダウンから選択してください。

なお、属性名の横に、値が表示されています。(属性名"innerhtml"の横に値"Get Unicorn Name")

どんな値になるのかが分かるので、便利ですね。

なお、処理実行後に値が変化する場合がある点については、念頭に置いておきましょう。

属性 属性の意味
aaname Active Accessibility の名前です。ボタンの「送信」や編集ボックスの「名前」など、表示されているテキストを表します (String)。
aastate Active Accessibility のステートです。コントロールの現在の状態 (例: チェックボックスがオンになっているか)を識別します。コントロールの選択、フォーカス、および/またはその他の変更可能な機能の操作ができるかどうかを示します (String)。
accCtxInfo アクセシビリティのコンテキスト情報です (String)。
accessibleClass 要素のアクセス可能な Java クラスです (String)。
accessibleFullClass 要素のアクセス可能な完全修飾 Java クラスです (String)。
alt 画像が表示されない場合に表示される、画像の代替テキストです (String)。
app プロセス名 (例: chrome.exe、msedge.exe、java.exe) です (String)。
AppPath プロセスのフォルダーの完全修飾パスです (String)。例: C:¥Program Files (x86)¥Google¥Chrome¥Application
aria-label 現在の要素にラベルを付けるアクセシビリティ (ARIA) 文字列です (String)。主に、テキスト ラベルが画面上に表示されない場合に使用されます。
aria-role アクセシビリティ (ARIA) 要素のロールです (String)。例: アラート、ボタン、オプション、ラジオ ボタン、スクロールバー
automationId サポートされている要素の UI Automation プロパティです (String)。
baseClassName 要素の基になる Java の基本クラスです (String)。
checked HTML <input> 要素があらかじめ選択されていることを指定する属性です (Boolean)。
class HTML 要素のクラス名です (String)。
cls 要素の1つ以上の CSS クラス名を指定します。または、ネイティブ ウィンドウ ハンドルのクラス名を指定します (String)。
componentName 要素の基になる Java クラスです (String)。
cookie 現在の DOM に関連付けられている Cookie です。現在のドキュメントに存在する Cookie のすべての名前/値ペアを返します (String)。
css-selector (説明なし)
ctrlId ネイティブ ウィンドウ ハンドルを持つ要素の識別子です (String)。
ctrlName ネイティブ ウィンドウ ハンドルを持つ要素の名前です (String)。
editable 要素が編集可能かどうかを示します (Boolean)。
enabled 要素が有効化されているかどうかを示します (Boolean)。
foreground プロセスまたはブラウザー タブが前面にあるかどうかを示す属性です (Boolean)。
fullClassName 要素の Java クラスの完全修飾名です (String)。
hasFocus 要素のフォーカスがあるかどうかを示します (Boolean)。
helpText ヘルプ テキストの UIA プロパティを識別します (String)。
hwnd ネイティブ ウィンドウ ハンドルを取得します (Int32)。
id (説明なし)
innerHtml 開始タグと終了タグの間にある内容の値を持つ HTML 要素のプロパティです (String)。
innerText 指定した要素とすべての下位要素のテキスト コンテンツを返します (String)。
isJavaWindow 指定したウィンドウが Java Accessibility API を実装しているかどうかを確認します (Boolean)。
isleaf (説明なし)
isMDIChild (説明なし)
isUiPathJavaBridgeEnabled Java 拡張機能との通信が実行されているかどうかを示す属性です (Boolean)。
items コントロールの、選択可能なすべての項目の名前を含むリストを取得します (List)。
javaState Java のコントロールの、利用可能なすべてのステートを含むリストです (String)。例: enabled、visible、editable
labeledBy 要素のテキスト ラベルです (String)。例: コンボ ボックスの静的なテキスト ラベル
legacyAccHelp レガシのアクセシビリティのヘルプ機能の値です (String)。
name 要素のアクセス可能な名前です (String)。
onclick (説明なし)
outerHtml 要素 (下位要素を含む) を記述する、シリアル化された HTML フラグメントを取得します (String)。
outerText 指定した要素のテキスト コンテンツです (String)。
parentClass HTML 要素の親要素の、空ではない最初のクラス属性です (String)。
parentId HTML 要素の親要素の、空ではない最初のid属性です (String)。
parentName HTML 要素の親要素の、空ではない最初の名前属性です (String)。
PID プロセス識別子です (Int32)。
position 要素の位置です (Rectangle)。
readyState ドキュメントの読み込みステートです (String)。
relativeVisibility すべての親要素内における、要素の (部分的な) 可視性です (Boolean)。
role 要素のロールです (String)。例: ボタン、リンク
selectedItem ドロップダウン要素の選択された項目です (String)。
selectedItems (説明なし)
src 外部リソースの場所 (URL) です (String 型)。
subsystem セレクターの生成に使用されるサブシステムです (String)。レクターの第2階層のタグ: webctrl、ctrl、uia、java、silverlight、sap
tag HTML 要素の開始部分です (String)。例: <input>、<p>、<a>
text 指定した文字または文字列に関連付けられたすべてのフォント、スタイル、配置、およびその他の書式設定を指します (String)。
TID 要素を含むウィンドウを作成したスレッドの識別子です (Int32)。
title 要素に関する追加情報を示します (String)。マウスが要素場を移動したときのツールチップ テキストとして表示される場合が多いです。
url ブラウザー タブの URL を指定します (String)。
virtualName 要素のアクセス可能な仮想名です (String)。例: コンボ ボックスの静的なテキスト ラベル
visibility 要素が表示されているかどうかを指定します (Int32)
visible 要素が表示されているかどうかを示します (Boolean)。
visibleInnerText (説明なし)
wndExtSyles (説明なし)
wndStyles (説明なし)

値が取得できる属性は、UI要素によって変わります。

サンプルに、要素から取得される結果を以下にまとめました。

どんな情報が取得できるかの参考にしてください。

+ UI要素の属性情報例(クリックして展開します)

Webサイト上のボタン

サイト「Find Unicorn Name」の[Get Unicorn Name]ボタンについての情報一覧です。

属性 出力結果
aaname Get Unicorn Name
aastate enabled
app chrome.exe
AppPath C:\Program Files\Google\Chrome\Application
class submit-button set-font
cls Chrome_WidgetWin_1
cookie ai_user=lbXj5Oph6nEq/P3dfXXkKe|2022-06-30T06:58:49.382Z
css-selector body>div>div>button
foreground False
hasFocus False
hwnd 0xE0938
id getNameButton
innerHtml Get Unicorn Name
innerText Get Unicorn Name
isleaf 1
isMDIChild False
onclick getUnicornName()
outerHtml <button class="submit-button set-font" onclick="getUnicornName()" id="getNameButton" uipath_custom_id="5">Get Unicorn Name</button>
outerText Get Unicorn Name
parentClass button-container container
PID 9640
position (511, 700) - (736, 755)
readyState 1
relativeVisibility True
role element
selectedItems {}
subsystem webctrl
tag BUTTON
text Get Unicorn Name
TID 18280
title Find Unicorn Name
url https://www.rpasamples.com/findunicornname
visibility 1
visibleInnerText Get Unicorn Name
wndExtSyles 0x100
wndStyles 0x16CF0000

アプリ上のラジオボタン

アプリ「UiPath ERPデモシステム」の[経理システム]ラジオボタンについての情報一覧です。

属性 出力結果
aaname UiPath ERPデモシステム
aastate チェックされています。フォーカスできます。
app uipathデモアプリ.exe
AppPath C:\Users\ogushi\Desktop
automationId (空白)
checked True
cls HwndWrapper[UiPathデモアプリ.exe;;4de31b6a-8973-41b9-a056-dddb5c1d3d82]
foreground False
hasFocus False
helpText (空白)
hwnd 0xC20C26
isMDIChild False
PID 2532
position (622, 248) - (722, 266)
relativeVisibility True
role radio button
subsystem aa
text checked
TID 13884
title UiPath ERPデモシステム
visibility 1
wndExtSyles 0x40100
wndStyles 0x16CA0000

自分で属性名の指定が可能

Webサイトの場合、HTMLというソース(テキスト)で記述されているのはご存知でしょうか。

例えば、[Get Unicorn Name]ボタンのHTMLソースは、以下のようになっています。

そして、HTMLソースのうち、赤字の部分が属性名に当たります。

<button class="submit-button set-font" onclick="getUnicornName()" id="getNameButton" uipath_custom_id="3">Get Unicorn Name</button>

属性名を、[+]-[テキスト]を選択して属性名を入力すると、それぞれの値を取得できます。

例えば、属性名に"uipath_custom_id"を指定すると、[保存先]には"3"が記憶されます。

保存先

取得した属性値について、記憶する名前を指定する、あるいは、保存先をクリップボードに指定します。

入力要素

他の、アプリ/Web系のアクティビティで参照したUI要素と同じものを利用したい場合に指定します。

この項目を使うためには、予め別のアプリ/Web系アクティビティの[出力要素]を指定しておく必要があります。

出力要素

[属性を取得]アクションで指定したUIを、他のアクティビティで参照するため、名前を付けて記憶します。

エラー時に実行を継続

チェックON(True)にすると、属性の取得が失敗しても、処理を継続します。

ストップさせたくない場合は、ON(True)にしておくといいでしょう。

タイムアウト

UI要素が表示されるのを待つ時間で、既定値は30秒です。

実行前の待機時間

一つ前のアクティビティから、[属性を取得]アクションを実行するまでの間に、待機する時間を指定します。

既定値は0.2秒です。

実行後の待機時間

[属性を取得]アクション実行後から、次のアクティビティへ処理が移るまでに、待機する時間を指定します。

既定値は0.3秒です。

テキストを取得

指定したUI要素からテキストを抽出します。(ガイドはこちら)

UI要素のテキストを抽出するアクティビティです。

ちなみに、[属性を取得]アクションでも、属性に"text"と指定すれば同等の情報を取得できます。

ただ、UI要素からテキストを取り出すケースが大半です。

基本的には[テキストを取得]アクションを使用し、その他の属性を取得したい場合に[属性を取得]アクションを使うと効率的でしょう。

ここでは、以下の項目について解説します。

  • 画面上でターゲットを指定
  • 保存先
  • スクレイピングメソッド
  • 入力要素
  • 出力要素
  • エラー発生時に実行を継続
  • タイムアウト
  • 実行前の待機時間
  • 実行後の待機時間
  • 文字情報

画面上でターゲットを指定

テキストを取得するUI要素を指定します。

[画面上でターゲットを指定]をクリックします。 テキストを取得したいUI要素を選択します。
ここでは、タイトルをターゲットにしました。
[確認]をクリックします。
ターゲットが指定されました。

保存先

取得したテキストについて、変数名やExcel、クリップボードなど、記憶する先を指定します。

スクレイピングメソッド

ひとつの要素に対して、テキストと言っても複数の候補があります。

その候補のうち、どのテキストを抽出するのかを、以下3つの候補から選択します。

  • 既定
  • テキスト属性
  • フルテキスト
  • ネイティブ

各項目の詳細

[既定]

[テキスト属性]と同じ結果を返します。

[テキスト属性]で値を取得できない場合は、[フルテキスト]の結果を返します。

[テキスト属性]と[フルテキスト]

この2項目は、ターゲットに指定した要素によって変化します。

通常のテキストボックスであれば、両者で取得する内容に違いはありません。

ですが、例えばチェックボックスやリストボックスを指定するときに、違いが現れます。

ここは、実際に例を示した方が早いでしょう。

●サンプル1

ターゲットの種類 チェックボックス
サンプル
[テキスト属性] unchecked
[フルテキスト] メインメニュー

●サンプル2

ターゲットの種類 リストボックス
サンプル
[テキスト属性] Select your birth month
[フルテキスト] Select your birth month
January
February
March
April
May
June
July
August
September
October
November
December
[ネイティブ]

※リモートデスクトップ機能が使えない環境の為、検証が出来ていません。

ネイティブは、リモートデスクトップ上の要素をターゲットとした際に、有効となります。

独自の機能で、書式や文字の座標が同時に抽出でき、そしてその結果は[文字情報]に指定した変数に記録されます。

[検証結果をプレビュー]を利用すると確認しやすい

スクレイピングメソッドで、どの項目を選択すれば目的の値を取得できるかは、[検証結果をプレビュー]を利用すると確認しやすいでしょう。

[検証結果をプレビュー]は、[テキストを取得]のメニューから起動します。

プレビュー画面を開くと、ドロップダウンリストから、スクレイピングメソッドの項目を選択して、プレビューがリアルタイムに確認できます。

また、適切な結果になったら、[保存して閉じる]をクリックすればプロパティの[スクレイピングメソッド]へ反映してくれるので、便利ですね。

入力要素

他の、アプリ/Web系のアクティビティで参照したUI要素と同じものを利用したい場合に指定します。

この項目を使うためには、予め別のアプリ/Web系アクティビティの[出力要素]を指定してください。

出力要素

[テキストを取得]アクションで指定したUIを、他のアクティビティで参照するため、名前を付けて記憶します。

エラー発生時に実行を継続

チェックON(True)にすると、属性の取得が失敗しても、処理を継続します。

タイムアウト

UI要素が表示されるのを待つ時間で、既定値は30秒です。

指定時間内にUI要素を取得できない場合、エラーとなります。

実行前の待機時間

一つ前のアクティビティから、テキストを取得するまでの間に、待機する時間を指定します。

既定値は0.2秒です。

実行後の待機時間

テキストを取得した後から、次のアクティビティを実行するまでに、待機する時間を指定します。

既定値は0.3秒です。

文字情報

※リモートデスクトップ機能が使えない環境の為、検証が出来ていません。

[スクレイピングメソッド]がネイティブの場合、テキスト以外に座標位置など複数の値を抽出できます。

その、得られた複数の値を保存する際に、[文字情報]に名前を指定して記憶します。

表データを抽出

アプリおよびWebページから表形式データを抽出します。(ガイドはこちら)

RPAソフトにあって、スクレイピングにないもののひとつが、構造化データを簡単に抽出できる事です。

構造化データとは、「決まった構造で記述されたデータ」という事です。

例えばExcelで作る表は、最も分かりやすくシンプルな構造化データですね。

その他、身近な構造化データと言えば、Googleでワード検索した結果でしょう。

Google検索は、"URL","タイトル","タイトル"という決まった構造で表示されますよね。

つまりこれも、構造化データです。

[表データを抽出]アクションでは、上記をはじめとする、様々な構造化データをデータテーブルとして抽出します。

ここでは、以下の項目について解説します。

  • 画面上でターゲットを指定
  • 抽出先
  • ページ間の待機時間
  • 入力モード
  • [抽出数の制限]と[項目数]
  • 結果を追加
  • エラー発生時に実行を継続
  • タイムアウト
  • 実行前の待機時間
  • 実行後の待機時間

画面上でターゲットを指定

抽出する対象となるアプリ/Webを指定します。

例えば、Googleの検索結果をデータ抽出したい場合は、以下のような流れになります。

なお今回は、URLとタイトルを抽出することにしましょう。

まずは、URLの指定から。

予めGoogleの検索結果を開き、リソースで指定しておきます。
ここでは、"RPA"を検索した結果を抽出します。
[表データを抽出]をリソースの内側に追加します。
(名称が、[次で指定]に変わります。)
[次で指定]をクリックします。
[データを追加]をクリックします。 URLのエリアをクリックします。
すると、自動的に判断して類似個所が青枠で表示されます。
[選択を終了]をクリックします。
列が追加されました。
[設定]をクリックします。
[列名]に"URL”と入力し、[保存]をクリックします。 列名が更新されました。

続いて、同じような手順で、タイトルを指定しましょう。

[データを追加]をクリックします。 タイトルのエリアをクリックします。
すると、自動的に判断して類似個所が青枠で表示されます。
[選択を終了]をクリックします。
列が追加されました。
[設定]をクリックします。
[列名]に"タイトル”と入力し、[保存]をクリックします。

Webサイトでは、データが複数ページに跨ることがよくありますよね。

Google検索の場合は、以下のようにページを移動するボタンが設置されています。

次のページへ移動するリンクを指定することで、ページを遷移しながらデータを抽出できるようになります。

[次へボタン]をクリックします。 Webサイトの、次のページへ移動するリンクを指定します。
[選択を終了]をクリックします。
"次へボタン"が追加されました。
[保存]をクリックします。

表データ抽出のもうひとつの方法

上記手順では、リソースを追加した後に[表データを抽出]アクションを追加する流れでした。

もう少しスマートな方法が用意されており、それがリボンからの起動です。

リボンにある[表抽出]を使うと、対象となるアプリ/Webのリソースを自動的に生成します。

試しに、URLだけを指定してみましょう。

[表抽出]をクリックします。 [データを追加]をクリックします。 URLのエリアをクリックします。
すると、自動的に判断して類似個所が青枠で表示されます。
[選択を終了]をクリックします。
(列名の編集は省略しました。)
[保存]をクリックします。
[次へボタン]を指定しないとメッセージが表示されます。
今回は設定を省略ます。[続行]をクリックします。
リソースと[表データを抽出]が
作成されました。

抽出先

取得した表データについて、記憶する名前を指定します。

[抽出先]は、データテーブル型として保存されます。データテーブルの編集はUiPath StudioXの共通アクティビティ【データテーブル】を参考にしてください。

ページ間の待機時間

複数ページが存在する場合、次のページを読み込むまでに待機する時間を指定します。

既定値は0.3秒です。

入力モード

表データを抽出する際に、どの制御を利用するか指定します。

制御には、以下の4つがあります。

  • アプリ/ブラウザーと同一
  • ハードウェアイベント
  • シミュレート
  • ウィンドウメッセージ

アプリ/ブラウザーと同一

リソースに指定した入力モードと同じ制御にします。

特別な理由がない限り、この設定で支障ないでしょう。

ハードウェアイベント

どのアプリ/Webにも対応できる、最も汎用的な制御です。

実際に人が操作するクリックや入力操作が自動化されるようなものなので、対象のアプリ/Webが、アクティブ(画面の前面)な必要があります。

シミュレート

Webの操作、Javaアプリの操作に強い制御です。

最も処理が高速で、画面がアクティブでなくとも動作します。

ただし、互換性が最も低く、ショートカットキーによる操作が出来ません。

Chromium API

Webの操作のうち、ブラウザーがEdge、Chromeの場合に対応している制御です。

"ハードウェアイベント"がOSを経由してブラウザーへ命令を送るのに対し、"Chromium API"はブラウザーへ直接命令を送ります。

その分安定しており、また、対象のアプリ/Webがバックグラウンドにあっても動作します。

ウィンドウメッセージ

アプリケーションの操作に強い制御です。

[ハードウェアイベント]とは違い、アプリがアクティブでなくとも操作できます。

汎用性と処理速度いずれも、[ハードウェアイベント]と[シミュレート]の中間と考えればいいでしょう。

[抽出数の制限]と[項目数]

抽出するレコード数またはページ数について、上限を指定します。

[抽出数の制限]は、以下3つから選択します。

  • 最大行数
  • 制限なし
  • 最大ページ数

例えば、[抽出数の制限]を"最大行数"、[項目数]を"10"とした場合、10レコード目までデータ抽出します。

[抽出数の制限]を"最大ページ数"、[項目数]を"10"とした場合は、10ページ目までのデータを抽出します。

"制限なし"は、表データすべてを抽出します。

なお、初期値は[抽出数の制限]が"制限なし"、[項目数]が"0”です。

結果を追加

[抽出先]に指定した名前を複数個所で使うとき、チェックONにしておくと、後者の[表データを抽出]でデータを取得した時に、データが追加できるようになります。

例えば、"RPA"の検索結果のタイトル3つ、"RDA"の検索結果のタイトル3つを、1つのデータテーブルに記憶させる場合で考えてみましょう。

RPAとRDAは、だいたい同じ意味の単語です。
おぐし

"RPA"の検索結果で表示されるタイトルは、以下3つです。

RPAホールディングス株式会社(旧・オープンテクノロジーズ ...
RPAとは:自動化できる業務やツール、事例、AIとの違いを解説
RPAとは?基本から導入の進め方までまとめて解説 - WinActor

そして、"RDA"の検索結果で表示されるタイトルは、以下3つです。

RPAをRDA|使い分けのポイントと活用シーンの違い - sweeep ..
RDA - Wikipedia
アトマイザー/RDA 商品一覧です|BEYOND VAPE JAPAN ...

このとき、2つ目の[表データを抽出]の[結果を追加]をチェックONにすることで、両方のタイトルがデータテーブルに書き込まれます。

抽出先(data)に書き込まれる値

RPAホールディングス株式会社(旧・オープンテクノロジーズ ...
RPAとは:自動化できる業務やツール、事例、AIとの違いを解説
RPAとは?基本から導入の進め方までまとめて解説 - WinActor
RPAをRDA|使い分けのポイントと活用シーンの違い - sweeep ..
RDA - Wikipedia
アトマイザー/RDA 商品一覧です|BEYOND VAPE JAPAN ...

このときチェックOFFのままだと、"RPA"のデータが上書きされ、"RDA"の結果のみになります。

もちろん、設計によってはチェックOFFとする場合もあります。

エラー発生時に実行を継続

チェックON(True)にすると、表データの抽出が失敗しても、処理を継続します。

タイムアウト

抽出する対象が表示されるのを待つ時間で、既定値は30秒です。

指定時間内に取得できない場合、エラーとなります。

実行前の待機時間

一つ前のアクティビティから、表データを抽出するまでの間に、待機する時間を指定します。

既定値は0.2秒です。

実行後の待機時間

表データを抽出した後から、次のアクティビティを実行するまでに、待機する時間を指定します。

既定値は0.3秒です。

繰り返し(各UI要素)

構造化された一連のUI要素を反復処理します。(ガイドはこちら)

Web上の構造化されたデータに対して、1要素ずつアクション(クリックや入力など)を行います。

構造化データとは、「決まった構造で記述されたデータ」という事ですが、詳しくは[表データを抽出]アクションで解説しています。

処理としては、[表データを抽出]アクションと似ていますね。

ここでは、以下の項目について解説します。

  • 画面上でターゲットを指定
  • フィルターを設定
  • ページ間の待機時間
  • 入力モード
  • [抽出数の制限]と[項目数]
  • エラー発生時に実行を継続
  • タイムアウト
  • 実行前の待機時間
  • 実行後の待機時間

※[フィルターを設定]は、[画面上でターゲットを指定]で指定した後に表示されます。

以下のサンプルサイトで2列目の文字が"A"で始まる行のチェックボックスをONにする流れをサンプルに、解説進めていきます。

サンプルサイトは、アクティビティが動作するよう作ったものです。アクティビティが正しく反応しないパターンもあるので、使えない時は割り切った方がいいでしょう。

[繰り返し(各UI要素)]と[表データを抽出]との使い分け

解説の頭で、「[表データを抽出]アクションと似ている」とお伝えしました。

では、[繰り返し(各UI要素)]と[表データを抽出]の違いとは何でしょうか。

結論、何か処理をする必要があるか、もしくはデータの読み取りが目的なのか、です。

細かく違いを見ていきましょう。

まず違うのが、[繰り返し(各UI要素)]は、UI要素に対して処理(チェックONや入力)ができることです。

例えば、「1行ずつ並んでいるチェックボックスをONにしていく」みたいなことが出来ます。

その他、[繰り返し(各UI要素)]は、アクティビティ自体が繰り返し処理の機能を持っていますので、別途アクティビティを用意する必要がありません。

対して[表データを抽出]アクションは、抽出したテキストがデータテーブルに格納されます。

そのため、値を取り出すためには別途[繰り返し(データ テーブルの各行)]アクションが必要ですよね。

簡単に、2つの特徴をまとめました。

繰り返し(各UI要素) 表データを抽出
各行に対して、クリックなどアクションを実行することが可能。 各行の、テキスト読み取る。(読み取り専用)
アクションを実行するターゲットは1項目のみ。値の読み取りは、複数項目を取得可能。 複数項目を取得できる。
繰り返しの機能があるので、このアクティビティだけで完結する。 全値がデータテーブルに保存されるため、この後データテーブルの処理が必要。
対象は、Webのみ。 対象は、アプリとWeb。

最初に結論をお伝えしましたが、使い分けはシンプルです。

データの読み取りのみであれば、[表データを抽出]アクションが使いやすいです。

各行のUI要素に対して、編集(チェックON/OFFや入力など)が必要なら、[繰り返し(各UI要素)]を使用しましょう。

画面上でターゲットを指定

処理する対象となる項目を指定します。

その前に、リソースを使い、操作する対象のサイトを指定する必要があります。

予め対象のURLを開き、リソースで指定しておきます。 [繰り返し(各UI要素)]をリソースの内側に追加します。
(名称が、[次で指定]に変わります。)
[次で指定]をクリックします。
[UI要素を追加]をクリックします。 チェックボックスをクリックします。
すると、自動的に判断して類似個所が青枠で表示されます。
[選択を終了]をクリックします。
列が追加されました。

続いて、同じような手順で2列目を追加します。

これは、[フィルターを設定]を解説する為に追加しました。

[ラベルを追加]をクリックします。 2列目をクリックします。
すると、自動的に判断して類似個所が青枠で表示されます。
[選択を終了]をクリックします。
列が追加されました。
[保存]をクリックします。

フィルターを設定

処理する対象を絞り込むために、フィルター条件を指定します。

[フィルターを指定]をクリックすると、[UI要素をフィルター処理]画面が表示されますので、条件を作成しましょう。

[追加フィルター]をクリックすると、[フィルター]画面が表示されますので、条件を作成しましょう。

フィルターの種類

[+追加]で複数の条件を作成したときに、複数の条件をすべて満たすものが対象なのか、条件のいずれかを満たすものが対象なのかを選択します。

[すべての条件に一致]は、追加した条件全てに当てはまる行が対象となります。

[いずれかの条件に一致は、追加した条件に1つ以上当てはまる行が対象となります。

フィルターする項目

フィルターのターゲットとなるフィルターする項目]は、[画面上のターゲットを指定]で選択した項目中から指定します。

[フィルター条件]と[フィルターの値]

項目をフィルターする条件と値を指定します。

ページ間の待機時間

複数ページが存在する場合、次のページを読み込むまでに待機する時間を指定します。

既定値は0.3秒です。

入力モード

表データを抽出する際に、どの制御を利用するか指定します。

制御には、以下の4つがあります。

  • アプリ/ブラウザーと同一
  • ハードウェアイベント
  • シミュレート
  • ウィンドウメッセージ

アプリ/ブラウザーと同一

リソースに指定した入力モードと同じ制御にします。

特別な理由がない限り、この設定で支障ないでしょう。

ハードウェアイベント

最も汎用的な制御です。

実際に人が操作するクリックや入力操作が自動化されるようなものなので、対象のWebがアクティブ(画面の前面)な必要があります。

シミュレート

Webの操作、Javaアプリの操作に強い制御です。

最も処理が高速で、画面がアクティブでなくとも動作します。

ただし、互換性が最も低く、ショートカットキーによる操作が出来ません。

Chromium API

Webの操作のうち、ブラウザーがEdge、Chromeの場合に対応している制御です。

"ハードウェアイベント"がOSを経由してブラウザーへ命令を送るのに対し、"Chromium API"はブラウザーへ直接命令を送ります。

その分安定しており、また、対象のWebがバックグラウンドにあっても動作します。

ウィンドウメッセージ

アプリケーションの操作に強い制御です。

このアクティビティでは、使用をお勧めしません。

[抽出数の制限]と[項目数]

処理の対象とするレコード数またはページ数について、上限を指定します。

[抽出数の制限]は、以下3つから選択します。

  • 最大行数
  • 制限なし
  • 最大ページ数

例えば、[抽出数の制限]を"最大行数"、[項目数]を"10"とした場合、10レコード目までデータ抽出します。

[抽出数の制限]を"最大ページ数"、[項目数]を"10"とした場合は、10ページ目までのデータを抽出します。

"制限なし"は、構造体データすべてを抽出します。

なお、初期値は[抽出数の制限]が"制限なし"、[項目数]が"0”です。

エラー発生時に実行を継続

チェックON(True)にすると、エラーになっても、処理を継続します。

タイムアウト

データの読み取り処理を待つ時間で、既定値は30秒です。

指定時間内に取得できない場合、エラーとなります。

実行前の待機時間

一つ前のアクティビティから、繰り返し処理を実行するまでの間に、待機する時間を指定します。

既定値は0.2秒です。

実行後の待機時間

繰り返し処理の実行後から、次のアクティビティを実行するまでに、待機する時間を指定します。

既定値は0.3秒です。

アクティビティサンプル

フィルターを「2列目(現在のラベル_1)が"A”から始まる」とし、その対象をチェックONするサンプルです。

[繰り返し(各UI要素)]内に、[チェック/チェック解除]アクションを追加しました。

上記アクティビティで、処理を実行した結果がこちらです。

まとめ

アプリ/Webの中には、情報を抽出しやすいものから、抽出が難しいものまで様々あります。

しかし、ここで紹介してきたアクティビティのプロパティを試行錯誤することで、ほぼ全ての情報・データを抽出できるようになるはずですよ。

まとめます。

まとめ

  • [アプリのステートを確認]はリソースの指定が不要。
  • [属性を取得]では、画面上に表示されていない情報(属性)も取り出すことが可能。
  • [表データ抽出]は、リボンにある[表抽出]が便利。
  • [繰り返し(各UI要素)]は、構造化されたオブジェクトを取得し、アクションが必要な際に使用する。

この記事で、何か1つでも新しい発見が得られたのなら、僕もうれしいです。

-StudioXのアクティビティ

© 2024 おぐしログのRPA入門