Power Automate for DesktopのUI要素の取得

この記事は、**RPA Advent Calendar 2024 12月23日担当分**の記事です。

https://qiita.com/advent-calendar/2024/rpa

Power Automate for DesktopでUI要素を取得する方法を記事にします。

### UI要素とは
そもそもWebページを操作するには、操作対象となるボタンや入力枠などを指定する必要があります。
これらの情報を **「UI要素」** と呼び、Power Automate for Desktopでは、Webページから 「UI要素」を取得し、その情報をアクションに登録することで操作が可能になります。

:::note info
UI要素とは
ユーザーとコンピュータ間で情報をやりとりするための仕組みのこと。
WEBページの場合は「テキスト」「テキスト フィールド」「チェックボックス」「ボタン」「リンク」など部品すべてを指します。
:::

### UI要素取得方法
気象庁のWebページを参考に記載していますが、赤枠の「2024年」を取得する場合を例にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/43d9980f-013d-baaf-2b00-96eb6ddc06d8.png)
※サーバに負荷をかけずあくまで個人学習の用途での利用

:::note warn
本記事の内容を検証する場合は、事前に利用規約を確認ください
:::

#### 個別でのUI要素の取得方法
以下のように「Webページのリンクをクリック」アクションを選択して、UI要素から「UI要素の追加」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/a1ca5f36-33fe-5054-7ea4-6e155b4a08da.png)

すると上記の右側のようにUI要素ピッカーが表示されます。
この状態で気象庁のWebページを表示して、**「2024年」** にマウスカーソルを合わせると赤枠 **「Anchor」** が表示されますので、**「Ctrlキー」** を押しながらリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/13b0c8d2-865a-0b11-c467-b6e1815fa36b.png)
※サーバに負荷をかけずあくまで個人学習の用途での利用

UI要素ピッカーが閉じ、再度「Webページのリンクをクリック」アクションの画面が表示されますので「保存」ボタンを押して閉じます。

右側にひし形図形3つが重なったアイコンがありますので、クリックすると取得したUI要素が表示されます。
右クリックして名前の変更をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/0587592e-ecf6-5868-c2f7-4077e8268aaf.png)

それぞれ下記のようにUI要素の名前を変更します。

|変更前|変更後|
|---|---|
|Web Page 'h ... /index.php'|気象庁過去の気象データ検索|
|Anchor '2024年'|2024年|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/dab2a72c-f35b-d5f3-cbfc-0735896313d4.png)

一旦、2024年を取得する分には、これで問題なく取得できます。

しかし、2024年～1976年を取得する場合は、「Webページのリンクをクリック」アクションが年数分必要となり、UI要素も取得する年数分必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/e9fdc4df-a95a-9627-dd0b-b1d6dd241dcc.png)


#### 一括でのUI要素の取得方法
2024年～1976年を取得する場合においては、個別でのUI要素の取得方法が向いていないため、一括で取得する方法を記載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/764a03de-5796-9f13-f92e-c2bb09c97927.png)
※サーバに負荷をかけずあくまで個人学習の用途での利用

一括で取得する場合は「Webページからデータを抽出する」アクションを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/7ea839a8-cee1-7719-f607-58a8ba1cef86.png)

「Webページからデータを抽出する」の設定画面が表示されたまま、ブラウザ画面に切り替えると「ライブWebヘルパー」が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/a0343b59-75da-ed35-60be-d8ce6897b814.png)

この状態で2024年を右クリック→要素の値を抽出をクリック→Href:('https://www.data...') をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/21cc0f75-4deb-78b6-135f-d982fb541d85.png)

同じ要領で、2024年の隣の2004年を右クリック→要素の値を抽出をクリック→Href:('https://www.data...') をクリックします。
すると、2024年、2023年、2004年、2003年、1984年、1983年の6つの年が選択されているのを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/51e7c14d-9159-0dea-ef8b-57ecf66c6925.png)

この状態では、2024年～1976年までの全部の年のURLを取得することはできません。
そのため、詳細設定をクリックして、パラメータを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/848762e4-6ebb-9920-a65e-e1d713cca49a.png)

|設定項目|値|
|---|---|
|抽出|リスト|
|基本CSS セレクター|div[Id="main"] > table > tbody > tr > td > div > table > tbody > tr > td > table > tbody > tr > td:lt(3) > a[Text*="年"]|
|CSS セレクター|空白|
|属性|Href|
|正規表現|空白|

今回は、１列でデータを取得したかったので、抽出：リストとして、基本CSS セレクターで年を含むリンクを抽出としました。
（各CSSセレクターは基本CSSセレクターで定義しているため、空白で、属性はリンクを取得したいのでHrefとしています）

Power Automate for DesktopのCSSセレクターの話はspumoniさんが以下の記事にまとめてくださっていて大変勉強になりました。
いつも参考にさせていただいております。

https://qiita.com/spumoni/items/fcc71034ce162fcf3db7

すると、以下のように全ての年のURLが抽出される結果となりました。
（Webページでも、全ての年が、緑の破線で囲まれています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/b611019c-6610-c2e4-fe10-f3ff2d688033.png)

Webライブヘルパー上で終了をクリックします。
取得したURLのデータは、リスト型の変数DataFromWebPageに格納されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/b12adc99-2927-6b42-6417-5cf7269b943f.png)

変数DataFromWebPageはリスト型のため、ForEachアクションを使用して、DataFromWebPageの中身（URL）をCurrentItemに格納します。
ForEach内でWebページに移動アクションを用いて、CurrentItem（URL）のページに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532455/a5764b66-2366-0c47-96b5-8377c570f1d6.png)


### まとめ
一つずつUI要素を取得する方法と、一括でUI要素の情報を取得する方法を記事にしました。
一括でUI要素を取得したほうが処理速度も速いので、効率性も向上します。