見出し画像

Power Automate for desktopの"レコーダー"をメッチャ主観で褒めちぎってみる

こんにちは!
出戻りガツオ🐟です。こちらの動画をご覧ください。

PythonでUI Automationを使って、Windowsプログラムの自動化を検証した動画です。

勝手にRPACommunityの企画「Power Automate for desktop 教室 vol.1~きぬあさ先生と生徒あきイカ~」とコラボしたPython Verを作った結果になります🙇

このPythonのコードめっちゃ頑張って、「自分マジ凄いわ🐟」ってなりましたが、実はPower Automate for desktopを使わないとできなかった内容になっています。

活躍したもの、それはPADの「レコーダー」機能です。
ここでPADのレコーダー機能がいかに凄いか!
noteを書かせてください!

UI Automationとは

Microsoft UI オートメーション は、Windowsのアクセシビリティ フレームワークです。 デスクトップ上のほとんどの UI 要素へのプログラムによるアクセスを提供します。 スクリーン リーダーなどの支援技術製品を使用すると、UI に関する情報をエンド ユーザーに提供し、標準入力以外の方法で UI を操作できます。 また、UI オートメーションにより、自動テスト スクリプトが UI と対話できるようになります。
UI オートメーションの概要

正直かなり理解が浅いのですが「UI Automationというものを使えば、デスクトップにある要素へアクセスできますよ」という内容です。
ここについて書くと終わらないので割愛します。

ざっくりとした流れ

めっちゃくちゃ割愛して書くとUI Automationのラッパーを生成して

import comtypes
from comtypes import CoCreateInstance
import comtypes.client
from comtypes.gen.UIAutomationClient import *
  1. COM でのオブジェクトの作成

  2. CoCreateInstance という汎用関数を利用

  3. CUIAutomation オブジェクトよりIUIAutomation インターフェイスを公開

  4. DLLとして実装されたCOMサーバを検索

def __init():
    global __uia, __root_element
    __uia = CoCreateInstance(CUIAutomation._reg_clsid_,
                             interface=IUIAutomation,
                             clsctx=comtypes.CLSCTX_INPROC_SERVER)
    __root_element = __uia.GetRootElement()

という流れで自動化ができます。自動化テストをPythonでやりたい、というニーズがない限り、ここは読み飛ばしてください。

デスクトップの最上位から「デスクトップの要素」にアクセスし、自動化する準備ができるわけであります。

しかーし!

自動化するためには「Name」か「AutomationId」が必須!!

要素へのアクセス手段は・・・

下準備ができても、要素を指定してコントロールするには、何かしら指定のアクションが必要です。

ここでlearnを見てみると・・・

既知の要素の検索
既知の要素 (その Name、AutomationId、または他のプロパティまたはプロパティの組み合わせによって識別される) を検索する方法として、 FindFirst メソッドを使用する方法が最も簡単です。 検索する要素がアプリケーション ウィンドウである場合は、検索の開始点を RootElementにすることができます。

UI オートメーション要素を検索するこの方法は、自動化されたシナリオ テストの最も有用な方法になります。
UI オートメーション要素の取得

平たく言うと、NameやAutomationIdといったプロパティを調べることが必要になります。

ですが・・・
これを調べるためにはWindows SDKに付属のInspect.exeツールを使用したりと、またひと手間かかります・・・

ブラウザの自動化は、ブラウザの開発者ツール( [ F12 ]おして出てくる黒い画面)使えば、めちゃ簡単に必要な要素を取得できるのですが、道のりが遠い・・

しかし!!
PADなら!!!
Power Automate for desktopなら!!!!!!!

レコーダー機能で一発でできる!!!!

[ レコーダー ]起動して、クリックするだけ!!!
ここから主役のPower Automate for desktopの出番です!!!


Power Automate for desktop

レコーダー

赤枠の部分がレコーダーです

レコーダーをクリックすると操作の記録が始まります。

請求デモアプリ

請求デモアプリを下記の順番でクリック!

覚える順番
ガシガシクリックするだけでUI要素を覚える!!

今回やっているのは要素の取得です!

右上のUI 要素のボタンをクリックするとこの通り!
①アプリの画面の詳細

UI 要素をダブルクリックすると属性が一覧化されている!!

請求デモアプリのディスプレイのName属性が「Contoso Invoicing」とここで判明します!

②訪問管理は少し難しそう・・・ sendKeyで今回逃げてます・・・🐟💦
イメージ - 新規作成

clickするのはあくまでボタンです。ここのIDはautomationIdと一緒!
Idが「btnNew」であることが判明します!

④「訪問先

Id(automationId) - "txtName208"

⑤「訪問日

Id(automationId) - "txtDate208"

⑥「問題点

Id(automationId) - "txtSymptom208"

⑦「メモ

Id(automationId) - "txtNotes208"

⑧イメージ - 保存

Id(automationId) - "btnSave"

数分も時間をかけずに取得できてる~~~!!!Σ(・□・;)

あとはIdから要素を取得して、値を送り込むだけ!!
Windowsプログラムの自動化がこんなにサクサクできちゃうなんて!!!
( ゚Д゚)!!!!!!!!!!!!!!!

未検証ですがAppiumを使った自動化にも応用できるかと🐟✨
しかし属性(プロパティ)が、こんなリアルタイムでクリック操作でお手軽に隈なく集められちゃうなんて・・・!!!

PAD凄すぎやろ( ゚Д゚)!!!!!!!!!!!!!!!

まだまだ使い辛い部分もあることも事実ですが、コードとの掛け合わせの際に、やりづらいところを補完してくれる機能が豊富なことも「Power Automate for desktop」の魅力じゃないかな✨✨✨って感じました!!

メッチャ褒めちぎり会!これにて閉会でございます🐟✨
 - 連日note書いてるけど、いつまで続くかしら・・・💦

今回は登壇ネタでこれを今後話す予定なのでお楽しみに!
Pythonのコードは非公開予定です。しかしlearn見ながら気合入れれば多分書けます!
C#に至ってはサンプルコードあるので、ご存じの方はスグできるかと!

お読みいただき、ありがとうございました🙇🙇🙇

RPACommunity「Power Automate for desktop 教室 vol.1~きぬあさ先生と生徒あきイカ~」

keitaさんのnoteにきっちりまとまっております!

👆検証に使ったアプリのリンクや「きぬあさ先生」、「あきイカさん」の情報もこちらに!!

最近の記事の紹介

最後に!!!

いつもお読みいただきありがとうございます!
ITを使って仕事を楽しくする一助になりたいと思ってますので
お読みいただいた方はぜひTwitterもフォローしてください!

Power PlatformやPythonやExcel、Google Apps Scriptなどなど雑多につぶやきます。よなよなエールが大好きです🍺

リプ、いいね👍、RT大歓迎です!
強く求めてます🐟😂🐟
業務改善フレンズ大歓迎!!切磋琢磨しましょ~♪♪

それではまた今度!ばいば〜い!

この記事が気に入ったらサポートをしてみませんか?