pywinauto是一组实现windows GUI窗口自动化的python模块。使用pywinauto可以方便的给窗口发送鼠标、键盘事件,使用python程序控制程序窗口。
pip install pywinauto
conda install -c conda-forge pywinauto
python setup.py install
from pywinauto.application import Application
app = Application().start("notepad.exe")
app.Notepad.Edit.type_keys('Hello{SPACE}World!')
安装正常的话,运行上面的代码,会打开记事本,书写“Hello World!”。其中{SPACE}表示键盘输入空格。
注:如果windows默认输入法是中文,运行上述代码可能会出现中文或者空格不能正常显示,在输入法设置中设置默认为英文即可。
pywinauto库很多地方都使用类的__getattribute__()属性解析方法,例如“app.Notepad”将会查找title为“Notepad”的子窗口,“app.Notepad.Edit”将会在title为“Notepad”的子窗口中查找title为“Edit”的子窗口或控件。
属性解析失败,会延迟一段时间(默认是5秒),再进行重试。超过默认时间,仍然解析失败,会抛出超时异常。如下面的代码:
app.Notepad.menu_select("文件->另存为(&A)...")
app['另存为'].Edit.type_keys(r'D:\tem\test.txt')
app['另存为']['保存(&S)'].click()
在执行第二行代码时,“另存为”对话框可能还未打开。这时属性解析将会等待一段时间,等待“另存为”对话框打开后,再继续后续的解析。这个机制很方便,避免我们显示使用time.sleep函数。