RPA体験談【実践編:UiPathのFind Children(子要素を探す)を使って範囲内の全てを処理する】

Find Children(子要素を探す)のアクティビティについて説明します。

ここで範囲を指定して、範囲内の処理に進みます
(処理:GetAttribute:表示名や行番号・列番号を取得や クリックなど)

2020/9/19追記
久しぶりにFindChildren(子要素を探す)を作ろうと思ったら、すっかり忘れていて
このブログを見たのですが、色々わかりにくかったので追記・修正しました。
———————————————————-
2020/9/19追記
こういう時に使うイメージです。
枠で囲まれた範囲を順番に参照して特定の行のアイコンをクリックするときなどに使います。

———————————————————-

説明をみると「指定した範囲とフィルター条件に従って、子の UI 要素のコレクションを取得します。」と書いてあります。
なんのこっちゃ。

範囲を決めて、全てを順番に処理していく処理です。
さらになんのこっちゃ。

事例で説明した方がわかりやすいですね。
どんな時に使うかというと(私の事例ですが)

(例1)単純に全てを処理する
(例2、3)データが2層構造になっているケース(第1表がヘッダー情報で、第2表が明細になっている)で
(例2)全ての行のデータを処理する
(例3)必要な行のデータを処理する

うーん、やっぱり、わかりやすくない。
というわけで、イメージで表示します。

【イメージ】

(例1)全てのデータをダウンロード

(例2)はスクレイピング

(例3)は承認ボタンを押下する

 

※(例2)の様に「第1表」が1行ずつの表示なら、最後の行の行番号が取得できれば、
ForNextで1行ずつ処理しても同じことができるので、ケースバイケースかとは思います。
(スピードはどちらが速いかはわかりませんが)
最後の行番号はスクレイピングか、URLを開いた直後にショートカットSendHotKey(例えば、ctrl+tab)でも取れる(時もある)と思います。
例3の様に行によっては「編集ボタン」が無いケースではFindChildrenが真価を発揮すると思います。

【作成方法】

さて、例を示したところで、実際のコーディングについてです
———————————————
2020/09/19追記
以下に必要なことは書いてあるんですが、実際に作ってみると見落としによる抜けがあり、何度も直す羽目に陥りました。
(自分で「わかりにくいんだよ!」とツッコむ感じです。)
そんな訳で、事例と作成手順のみを最後に書いておきます。
———————————————

設定箇所:FindChildren(子要素を探す)アクティビティの設定箇所は、以下の4箇所です。
Filter:範囲の中での抽出箇所
Selector:URLも含めた範囲全体
Scope:FIND_CHILDREN もしくは FIND_DESCENDANTS
※Children子供は、すぐ下の階層、descendant子孫は、それ以下の階層を示します。
(他にもFIND_PROCESS等もあるますが、選択肢は、この二択だと思います)。
Children:これからForEachで回す範囲名。この変数タイプは、「IEnumerable<UiElement>」となるので、プロパティ画面上で右クリックで設定するのが一番楽だと思います。

 

その後の処理
For Each(繰り返し(コレクションの各要素))
Find Childrenで選択した範囲を順番に処理
その中で、Get Attributeとか Clickとかを実施

For Eachの設定方法はこんな感じです。
TypeArgumentを UiPath.Core.UiElementにするのを忘れないでください。

例えばの例ですが、以下の様に Find Children と For Each と GetAttribute等のアクティビティを組み合わせます。
【Filterの入力内容と ForEachの例】(↓クリックすると拡大します)

Find Childerenの中の
・Selectorを何にするか?
・Filterを何にするか?
・FIND_CHILDRENなのか、FIND_DESCENDANTSなのか?
を細かく調べるには、Ui Explorerを使います。

使い方の詳細については次回↓に掲載します。
RPA体験談【実践編:UiPathのUiExplorerでUi要素の詳細を調べる】

 

 

 

 

———————————————
2020/09/19追記
作成手順を一から順番に書いておきます。

こんな事例です。

UiPathの作成方法

1.UiExploreで準備

Ui要素を取得してメモ帳等に貼り付けておく
①FindChildrenする範囲のUi要素を取得
②文字を取得する要素を「v」してUi要素を取得(列番号が必要)
③クリックする列(この場合はラジオボタン)を「v」チェックして、Ui要素を取得(要素全体が必要)

UiPath上の処理

2.テスト用に文字列を比較する変数を作り代入しておく

例:test = D名簿書込権限

 

3.FindChlidren(子要素を探す)の作成

3_1.FIND_CHILDRENのアクティビティをセット
3_2.Selector:1の①の要素を貼り付ける
3_3. Filter:文字を取得する列を指定する
<webctrl tableCol=’2′ tag=’TD’/>
【Filterの入力内容と ForEachの例】に記載した式を参考に
 1②で確認した列番号を組み合わせて入力
3_4.Scope
 とりあえずFIND_CHILDRENを選択
(最終的には FIND_DESCENDANTSでした)
3_5.Children
 ここで 変数を作る(変数の型に注意)
 elementsとする(これは何でも良いが…)
 右クリックしてCreateVariableで 「IEnumerabel<UiElement>」を指定

 

4.ForEachの作成

4_1.ForEachのアクティビティをデザイナーパネルにセット
※他にも 同じような ForEachrow等あるので間違えないように
4_2.ForEach には「td」 inには「elements」と入力
4_3.TypeArgument は UiPath.Core.UiElementを選択
4.4.Bodyの中の本体には
GetAttribute(属性を所得)を二つ作る
・Attributeは
 一つ目は ”aaname” (表示されている名称
 二つ目は ”tableRow” (行番号)
・Elementは「td」
・Result は String型の変数を適当に作る
※どちらも属性を取得の中の青文字が「Element is td」になっていることを確認

 

5.動作確認

FindChildren と ForEachをつなぎ、ちゃんと動いているか確認するために、GetAttributeの後に MsgBoxをつけて確認する。

 

6.動作補正

動いているのが確認できなかったら、とりあえず FIND_CHILDRENをFIND_DESCENDANTSに変えてみる

 

7.ラジオボタンをクリックする動作を追加

ちゃんと動いていたら、ラジオボタンをクリックする動作を追加していく

7_1.Ifアクティビティ

test変数とaanameで表示されている文字を比較して同じだったら
ラジオボタンをクリック
このラジオボタンのSelectorは、以下のように式を書く
1③でラジオボタンのSelectorを取得しているので、その中のtableRowの部分を変数に置き換える。
tableRow='” + m_tableRow + “‘tag=TD’/>”
(ダブルクォーテーションを忘れずに)

7_2.Breakアクティビティ

ラジオボタンをクリックした後はLoopを抜けて良いのでBreakする

 

動作確認して問題なければ、FIND_CHILDREN部分は終了なので「変更」「削除」ボタンをクリックなどの動作に進む。

 

図にするとこんな感じです。

———————————————

 

 

RPA体験談【目次(主にUiPath)】

↑日記の目次を作りました。

 

 

次へ 前へ