- 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()
- 應用程序的窗口上的選擇