UI自動化がうまくいかない…その原因は「住所不定」?
Power Automate Desktop(PAD)でフローを実行したとき、「昨日は動いたのに今日は失敗する」「クリックできない」「変なところを押してしまう」…こんな経験はありませんか?
実はこれ、PADがクリック対象のUI要素を探すために使っている「セレクター(Selector)」が原因かもしれません。
セレクターとは、UI画面上の部品を特定するための“住所”のようなもの。住所が毎回変わってしまうと、PADは目的の場所を見失ってしまうのです。
なぜUI要素が不安定になるのか?
PADでUI操作が不安定になる主な原因は、セレクターが指している「番地(属性)」が毎回変わってしまうことです。よくあるパターンを以下に紹介します。
不安定になる主な原因
- ウィンドウタイトルに日付や番号が入っていて毎回変わる
例:title='請求書 - 2025/05/06' - HTML要素のIDが起動のたびにランダムに変わる
例:id=':r5:'→id=':r7:' - 同じボタンが複数あり、インデックス番号が変わる
例:index='2'→index='3' - 画面解像度やズーム率で構造がズレる
画面が拡大・縮小されることで要素のXPath構造が変化
なぜセレクターを修正すると安定するのか?
PADはセレクターをもとにUI要素を特定しています。そのため、変動する部分を避けて、安定した属性で指定することで、毎回正しく要素を見つけられるようになります。
安定動作につながるセレクター調整のポイント
- 変わりやすい属性は「*(ワイルドカード)」や正規表現で置き換える
例:title='顧客リスト - 2025/05/06'→title='顧客リスト*' - 変わらない属性を積極的に活用する
AutomationId / 名前 / class名 など、固定の値を優先
結果として、PADが毎回“同じ住所”を見つけられるようになり、処理が安定します。
【初心者向け】セレクター調整 6ステップ
はじめてでも大丈夫。以下の手順を参考に、少しずつ調整していきましょう。
| ステップ | 操作 | ポイント |
|---|---|---|
| 1 | フロー編集画面で対象アクションを選択(例:クリック UI 要素) | まず「どのステップで失敗するか」を特定 |
| 2 | 右の UI 要素パネルで対象を右クリック → セレクターを編集(Edit selector) | ...メニューからでも可能 |
| 3 | Highlightボタンで、現在のセレクターが正しく指しているか確認 | 点滅しないなら要素を見失っています |
| 4 | 動的な値を探す:日付・数字・GUID・index属性など | 見慣れない文字列は「怪しい」と思ってOK |
| 5 | 変動部をワイルドカードや正規表現に置き換える | id=':r5:' → id='*:r*:' など |
| 6 | 再びHighlight → OK → フローをテスト実行 | 問題があれば4-5を繰り返す |
ちょっとしたコツでさらに安定性アップ!
✔ 比較機能で差分チェック
セレクターが失敗したら、もう一度UI要素をキャプチャし、「比較」機能で違いを見てみましょう。変化している箇所が一目瞭然です。
✔ 階層はなるべく浅く
XPathやセレクターが「親→子→孫…」と深すぎると、画面構造のちょっとした変化でも壊れやすくなります。最低限の情報(親ウィンドウ+AutomationIdなど)で特定するのがコツです。
✔ コレクションで安定操作
リストや表の中に同じボタンが複数あるときは、「UI要素を一括取得」でコレクション化し、条件で1つに絞るとインデックスずれを回避できます。
✔ 解像度・ズームは固定に
特にブラウザ操作では、ズーム率やディスプレイのDPIが違うだけでXPathがズレることがあります。自動化用PCは常に同じ表示設定に保つのが理想的です。
よくある質問(FAQ)
Q. ワイルドカードって何文字でもいいの?
はい、*は「0文字以上のすべての文字」にマッチします。文字数制限もありません。
Q. どの属性が「変わりやすい」のか判断が難しいです
慣れるまでは、数字・日付・GUID風のランダムな文字列が入っている属性は変わりやすいと思っておけばOKです。
Q. 修正しても毎回微妙に動作が違います
まずは一番よく失敗するステップだけ調整しましょう。焦らず1つずつ原因を潰すのがコツです。
Q. 正規表現は使わなくてもいい?
基本的には*で十分です。ただ、複雑なパターンを扱う場合には正規表現(regex)も活用できます。
まずは、毎回失敗しているアクションのセレクターだけでも直してみてください。動作が安定するだけで、フロー作成のストレスが一気に軽くなりますよ!
