いろいろ足りない

不足分を補いたい

pywinautoの使い方をはじめから

はじめに

windowsのアプリケーションを自動化するにあたって、いろいろツールはあるようだがpywinautoに行き着いた。
pywinauto.readthedocs.io

いろいろな記事を参考にしたのだが、既に自動化されたコードはあるものの、「じゃあ自分が自動化したいアプリケーションに対してはどうやって使うの?」が当初分からなかったのでここに記してみる。
尚、これは公式ドキュメントを読まなかったため起きたものであり、もし同じような方がいるのであれば下記リンクをまずは読むことを勧める。
pywinauto.readthedocs.io

使い方

ここでは電卓を例に、計算操作を自動化する手順を示す。
pywinautoを導入(pip install pywinauto)したら、まずは公式ドキュメントに倣ってコードを書いてみよう。
あえて日本語環境でも動くように書いてみる。

from subprocess import Popen

from pywinauto import Desktop

# 電卓を起動
Popen('calc.exe', shell=True)

# 電卓のウィンドウを取得
calc_window = Desktop(backend='uia')["電卓"]


さて、とりあえず「1+2」の自動化をしてみたいと思う。
まずやることは、電卓のウィンドウの要素を確認することだ。
print_control_identifiers関数で要素の確認ができる。
かなり量があることが多いので、ファイルに出力してあげると楽。

from subprocess import Popen

from pywinauto import Desktop

# 電卓を起動
Popen('calc.exe', shell=True)

# 電卓のウィンドウを取得
calc_window = Desktop(backend='uia')["電卓"]

# 電卓の要素情報を取得
calc_window.print_control_identifiers()
calc_window.print_control_identifiers(filename="out.txt") # ファイルに出力する場合


これで要素を取得できた。
ここから目的とする要素の名前を確認していこう。
例えば「1」のボタンであれば、自分の環境では「 ['Button40', '1Button', '1'] 」とある。
「=」のボタンであれば、「 ['等号Button', 'Button37', '等号'] 」のようになっている。
また、クリック動作はそのままclick関数を呼び出せば良い。
これらの情報を用いて再び自動化のコードを書いてみよう。

from subprocess import Popen

from pywinauto import Desktop

# 電卓を起動
Popen('calc.exe', shell=True)

# 電卓のウィンドウを取得
calc_window = Desktop(backend='uia')["電卓"]

# 1+2=の計算
calc_window['1'].click()
calc_window['プラス'].click()
calc_window['2'].click()
calc_window['等号'].click()


以上のコードを動かしてみると、自動で1+2の計算がされるはずだ。

まとめ

電卓の操作を例に、pywinautoの取っ掛かりを記してみた。
自分が戸惑ったのは要素の取得方法が分からなかった点(何度も言うが公式ドキュメントを読まなかったせいだ)と、日本語環境なので要素の指定方法が若干異なった点であった。
しかしそこさえ押さえれば原則的なところは変わらず、pythonの利点も相まって使いやすい。
あとは、texts関数やtype_keys, set_edit_text関数、top_window関数などを駆使すれば思うように自動化していけると思う。