- Published on
pywinautoとUI AutomationでWindowsのGUIを自動化する
- Authors
- Name
- Shou Arisaka / 有坂翔
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 documentationWindowsの自動化というとautohotkeyが思い浮かびますが、Autohotkeyは主にキーボードやマウスの自動化、またはホットキー・ショートカットキーの追加で、起動した.NETフレームワークベースのソフトウェアやグラフィカルユーザーインターフェースの細かな自動化処理には適していません。
他にもExcelの自動化であればVBAを利用し、ChromeやFirefoxなどブラウザ・ウェブページの自動化ならseleniumやpuppeteerまたはplaywrightなどのライブラリが適しています。
インストール
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
参考ページ: