logo
Published on

pywinautoとUI AutomationでWindowsのGUIを自動化する

Authors

Windowsやソフトウェアインターフェイス・GUIの自動化をするにあたって便利なライブラリがMicrosoft UI Automation(UIA)です。pywinautoはUI automationをPython言語からライブラリとして利用できるようにしたもので、同様にWindowsの自動化が可能です。

Github:

pywinauto/pywinauto: Windows GUI Automation with Python (based on text properties)

ドキュメント:

What is pywinauto — pywinauto 0.6.8 documentation

Windowsの自動化というとautohotkeyが思い浮かびますが、Autohotkeyは主にキーボードやマウスの自動化、またはホットキー・ショートカットキーの追加で、起動した.NETフレームワークベースのソフトウェアやグラフィカルユーザーインターフェースの細かな自動化処理には適していません。

他にもExcelの自動化であればVBAを利用し、ChromeやFirefoxなどブラウザ・ウェブページの自動化ならseleniumやpuppeteerまたはplaywrightなどのライブラリが適しています。

pywinautoでnotepad・メモ帳を自動化

インストール

pythonのインストールがまだの場合、chocolateyを使ってpythonのインストールを行います。

choco list --localonly
choco install python --version=3.6.7

chocolateyとは何かについての概要とインストール方法については以下で紹介しています。

Windows 11にchocolateyをインストールする

virtualenvをインストールします。 その後virtualenvで仮想環境を作ります。

C:\Python36\python.exe -m pip install virtualenv
C:\Python36\python.exe -m virtualenv venv3.6

virtualenvの仮想環境に入りpywinautoライブラリをインストールします。

. .\venv3.6\Scripts\activate
pip install -U pywinauto

pywinautoを実行

pywinautoのサンプルコードは以下のようになります。 以下のpythonスクリプトを実行すると、notepad.exe(メモ帳)が開かれ、メニューからヘルプページ、aboutページが自動で開かれます。

なお以下のコードの場合想定のWindowsのシステム言語が英語であるかと思いますので、日本語のシステムである場合は"Help->About Notepad"あたりを変えてやる必要があるかもしれません。

from pywinauto.application import Application
app = Application().start("notepad.exe")

app.UntitledNotepad.menu_select("Help->About Notepad")
app.AboutNotepad.OK.click()
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

エラー

以下よりエラーが出た場合の対処についてです。

pywinautoの実行の途中で以下のエラーが出る場合があります。

_argtypes_ passes a union by value, which is unsupported

原因として、pythonのバージョンが3.8以上などの場合に起こるようです。

対処として、pythonのバージョンを3.7.4またはそれ以下に下げます。 上記のインストールでは choco install python --version=3.6.7 のようにpythonのインストールするバージョンを3.6.7に指定してインストールをしています。少なくとも3.6.7では動作するようです。

downgrade python to 3.7.4

tkinter - Python Error - TypeError: item 1 in argtypes passes a union by value, which is unsupported - Stack Overflow

参考ページ: