FindChildrenアクティビティを使ったワークフロー作成方法

明日から社内サイトにExcelファイルを順番にアップロードしてチェックさせ、チェック完了したファイルをダウンロードするワークフローを作成予定です。
添付画像は、ファイルをダウンロードする社内サイトのイメージです。

1.やりたいこと
Downloadボタンの左に「チェック完了」という文字列が表示されていれば、ダウンロードOKなので、最初にすべての行が「チェック完了」であることを確認したうえで、上から順番にDownloadボタンをクリックしていきたいです。なお、Downloadボタンをクリックしても子画面は開きません。直ちにダウンロードが始まります。

2.悩んでいること
FindChildrenアクティビティを使えばできそうなのですが、最初にすべての行が「チェック完了」であることを確認したうえで、上から順番にDownloadボタンをクリックするワークフローのイメージが湧きません。サンプルコードが書ける方、ご支援をよろしくお願い致します。
また今回のFindChildrenアクティビティの 「Scope」は:FIND_CHILDREN で良いのでしょうか?

こんにちは

この要件ですとDataScraping使った方が無難に思えますが、どのUI要素をFindChildrenで抽出したいのでしょうか?

FindChildrenは基本的にはセレクターでのフィルター指定になりますので、セレクター構造あるいは取りうる属性がわからないと直接的にフィルター可能かどうかの判断は難しいと思います。

また今回のFindChildrenアクティビティの 「Scope」は:FIND_CHILDREN で良いのでしょうか?

こちらもセレクターの構造次第で、直下の子要素を指定するときはFIND_CHILDREN、子孫要素を指定するときはFIND_DESCENDANTSになります。

チェック完了とDownloadボタンの両方になります。

チェック完了とDownloadボタンの両方になります。

「チェック完了」という文字は表示されているかどうかわからない文字列かと思いますが、
表示されているものを取得するということでしょうか?
これだけ抽出しても、すべてチェック完了かどうかの判断が難しいのではないでしょうか?
ダウンロードボタンの総数と比較する手もあるかとは思いますが、手順としてやや煩雑なように思えます。
ちなみにDataScrapingを使わない理由はありますか?(うまく取得できない等)

すみません。私の知識ではDataScrapingはWebのデータをエクセルに転記する機能という理解です。DataScrapingで表示されているDownloadボタンを全てクリック可能であればサンプルコードを見せていただけないでしょうか?

具体的なページがないとサンプル作るのは難しいです。

以下手順です。
1 データスクレイピングで全体を取得します
2 すべての行でチェック完了になっているか確認します。
3 ForEachRowアクティビティ等で、取得したDataTableをイテレートします。その時Indexプロパティに変数を設定しておきます。
4 その中にDownloadボタンをクリックするアクティビティを設置します。
セレクターは例えば大元がHTMLのTableならtableRow属性があると思うのでこれを用い、その値を3で設定したindexの値から、必要に応じてオフセット量を加えて動的に指定します。

公開サイト
https://asrank.caida.org/
の中央に表があります。このOrganizationの列に
“Level 3 Parent,LLC”
”Telia Company AB”
”Cogent Communications”
とテキストリンクがありますので、これを上から順番にクリックするワークフローを作成してみました。(本回答に添付しました。)
Yoichi様のアドバイスに従い、クリックアクティビティのセレクタを、aanameをワイルドカードにし、tableRow='2 + {{ int_index }}'と設定してWFを動かしてみましたが、セレクタの内容が上書きされるようで、毎回"Level 3 Parent,LLC"しかクリックしてくれません。どうしてセレクタの内容が毎回上書きされるのでしょうか?アドバイスをいただけますと助かります。

selector
TableScraping.xaml (212.6 KB)

こんにちは

セレクター文字列中では数値演算はできませんので、あらかじめオフセット量を加算した値を用意して、それを動的セレクターの値として指定します。
また、tableRowとtagだけでは今回の対象要素を特定できないので、例えばcolName属性を追加します。
あとaaname=‘*’ は要素特定には意味がないので、削除します。

TableScraping.xaml (217.4 KB)

セレクターの修正とDelayとかHighlight等追加しています。

ありがとうございます。私の環境でも動きました!本件は上司も苦労していました。明日上司に報告します。上司も喜ぶと思います。ご参考までに、後学のため、当初予定していたFind Childrenアクティビティを使って構築するとどうなるか、これも、サンプルコード作成をお願いできないでしょうか?

こんにちは

後学のため、当初予定していたFind Childrenアクティビティを使って構築するとどうなるか、これも、サンプルコード作成をお願いできないでしょうか?

以下サンプルです。待機時間は適当に調整してください。(実際の実装は待機ではなく、対象の要素の存在を確認して、次のステップへ進んでください)

Sample20230201-2.zip (153.9 KB)

TableScaping.xaml DataScrapingによる方法
TableScaping2.xaml FindChildrenによる方法
TableScaping3.xaml ForEachUIElementによる方法

FindChildrenの場合、取得したUIElementが「戻る」等の画面遷移によって無効になる場合が
ある(多い)のでその対応でリンク先を別ウインドウで開いています。(大元の表のページを
別ページに遷移させない)

単にリンクを順次クリックするだけなら現時点ではForEachUiElementを使うのが楽です。
ただし当初の要件である「すべてチェック済み」を確認する必要がある場合、
先にすべてのチェック済みを確認する必要があるので、DataScrapingの方が効率的と思います。

なおDataScrapingによる方法は、例えばUiPath Academyの上級開発者コースにも掲載されている内容ですので、地道に推奨トレーニングコースを受講されることをお勧めします。