- Python中GUI自动化工具:
- PyAutoGui:一个流行的跨平台库(具有基于图像的搜索功能,没有基于文本的控件操作)
- Lackey:基于图像模式匹配
- AXUI:MS UI Automation API控件的一个包装器
- winGuiAuto:使用Win32 API的控件模块
- Pywinauto:同时支持控件操作和图像操作,支持Win32 API和MS UI Automation API
- Pywinauto的环境安装:
安装前提:1、安装好 python(建议使用 python3.5以上的版本);2、确认pip是否能正常使用
安装方式一:pip在线安装,pip install pywinauto
安装方式二:离线安装
1、下载压缩包:python第三方库管理平台:https://pypi.org/
2、解压压缩包
3、cmd进入压缩之后的文件夹中
4、运行:python setup.py install进行安装
- PC端程序自动化的切入点:
确定应用程序的可访问技术,pywinauto的后端,支持控件的访问技术:
1、Win32 API(backend="win32")- 默认的backend,MFC,VB6,VCL。简单的WinForms控件和大多数旧的应用程序
2 、MS UI Automation API ( backend = " uia " ):WinForms , WPF , Store apps , Qt5 , 浏览器
- 启用应用程序:
切入点主要是限制自动化控制进程的范围,如一个程序有多个实例,自动化控制一个实例而保证其他实例(进程)不受影响。在pywinauto中主要有两种对象可以建立这种切入口:
1、application:application的作业范围是一个进程,如一般的桌面应用程序都未此类
2、Desktop:Desktop的作用范围可以跨进程。主要用于一个程序可以包含多个实例(进程)的程序
- 程序检测相关辅助工具的使用:
- GUI对象检查/Spy工具:
Inspect.exe(C: Program Files (*86)Windows Kits\10\bin\x64):Inspect.exx是Microsoft创建的另一个很棒的工具。它包含在Windows SDKI中,因此可以在x64 Windows上的以下位置找到它
spy++.exe,它使用win32 API。如果spy+能够显示程序的所有控件,那么该应用程序适合使用win32的 backend
ViewWizard,Viewwizard(窗口信息査看精灵),使用起来非常简洁可查看窗口和控件句柄、类名、标题、风格等信息(百度搜索下载即可)
- pywinauto打开到指定的应用程序
from pywinauto.application import Application # 打开指定的应用程序 # 1、打开windows自带的应用:记事本 pc = Application(backend="uia").start("notepad.exe") # 2、打开任意一个应用程序 pc = Application(backend="uia").start(r"C:\Program Files\PremiumSoft\Navicat Premium 12\navicat.exe")
- 如何选择应用程序的窗口
1、根据窗口标题或者类名选择:dlg = app[窗口类名/标题]
2、根据窗口的类名选择窗口:dlg = app.窗口类名
# 非英文程序,推荐使用方式一
from pywinauto.application import Application# 启动navicat应用程序 pc = Application(backend="win32").start(r"C:\Program Files\PremiumSoft\Navicat Premium 12\navicat.exe") time.sleep(10) # 方式一:使用类名来选择窗口,app[类名/标题]:推荐使用改方式 # dlg = pc['TNavicatMainForm'] # 通过窗口标题去选择窗口 # dlg = pc["Navicat Premium"] # 方式二:app。窗口类名 dlg = pc.TVirtualStringTree # 打印窗口中所有的控件 dlg.print_control_identifiers()
- 应用程序的窗口的操作方法
from pywinauto.application import Application import time # 启动navicat应用程序 pc = Application(backend="win32").start(r"notepad.exe") # 通过窗口标题去选择窗口 dlg = pc["Notepad"] # 窗口最大化 dlg.maximize() # 查看窗口显示状态 status = dlg.get_show_state() print(status) # 运行结果:3 # 窗口最小化 dlg.minimize() # 查看窗口显示状态 rect = dlg.rectangle() print(rect) # 运行结果:(L-32000, T-32000, R-31840, B-31972) # 像素坐标从左上角点开始计算,左上右下 # 窗口恢复正常大小 dlg.restore() # 关闭窗口 dlg.close()
- 应用程序的窗口上的选择