聊聊 PC 端自動化最佳方案 - Pywinauto
1. 前言
大家好,我是安果!
上一篇文章,聊到 PC 端的一種自動化方案:WinAppDriver
聊聊 PC 端自動化最佳方案 - WinAppDriver
有小夥伴後臺給我留言,說「 pywinauto 」作為 WinAppDriver 的替代方案,也能完美完成 PC 端的自動化
2. 介紹
Pywinauto,完全由 Python 構建的一個模組,可以用於自動化 Windows 上的 GUI 應用程式
同時,它支援滑鼠、鍵盤操作,在元素控制元件樹較複雜的介面,可以輔助我們完成自動化操作
專案地址:https://github.com/pywinauto/pywinauto
支援的應用為下面 2 大類:
-
Win32 API
包含 MFC、VB6、VCL、simple WinForms controls and most of the old legacy apps
-
MS UI Automation
包含 WinForms、WPF、Store apps、Qt5, browsers
其中
win32 API 的 backend 為「 win32 」
MS UI Automation 的 backend 為「 uia 」
3. 元素控制元件
和 WinAppDriver 類似,在編寫自動化指令碼之前,我們需要先獲取元素控制元件的各類屬性值
獲取元素控制元件有 2 種方式:
視窗內建方法
檢查工具
其中
視窗物件內建的 2 個方法都可以列印出當前頁面的元素控制元件樹
# 視窗物件中內建方法,列印窗體內所有元素控制元件
# 方式一:
窗體物件.print_control_identifiers()
# 方式二
窗體物件.dump_tree()
常用的檢查工具也包含 2 種,分別是:Inspect.exe、Spy++
4. 實戰一下
在實戰之前,我們先安裝依賴包 pywinauto
# 安裝依賴
pip3 install pywinauto
接下來,我們還是以上篇文章中的例子來講解完整的實現過程
4-1 開啟微信客戶端
首先,透過檢查工具判斷應用的 backend 屬性值,PC 端微信的 backend 為「 uia 」
然後,例項化一個「 Application 」類
最後,使用該物件內建的函式建立一個應用物件
import pywinauto
from pywinauto.application import Application
# 獲取應用物件
# 三種方式任選一種
# 方式一:應用程序pid(連線)
app = Application(backend='uia').connect(process=pid)
# 方式二:應用完整路徑(連線)
app = Application(backend='uia').connect(path="D:\Program Files (x86)\Tencent\WeChat\WeChat.exe")
# 方式三:開啟應用(開啟)
app = Application(backend='uia').start('D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')
需要指出的是,獲取應用物件有上面 3 種方式,可以按需使用
4-2 獲取窗體物件
透過檢查工具獲取窗體的屬性列表,然後使用應用物件 + 窗體屬性獲取微信首頁的窗體物件
實現程式碼如下:
from pywinauto.win32functions import SetFocus
# 獲取視窗物件
# 透過title及ClassName獲取窗體物件
self.weixin_pc_window = self.app.window(title=u"微信", class_name="WeChatMainWndForPC")
self.weixin_pc_window.set_focus()
4-3 切換到聊天列表
獲取左側聊天切換按鈕,獲取其座標位置,模擬點選進入到聊天列表頁面
from pywinauto import mouse
def __get_element_postion(self, element):
"""獲取元素的中心點位置"""
# 元素座標
element_position = element.rectangle()
# 算出中心點位置
center_position = (int((element_position.left + element_position.right) / 2),
int((element_position.top + element_position.bottom) / 2))
return center_position
def start(self):
# 1、獲取左側【聊天】切換元素
chat_list_element = self.weixin_pc_window.child_window(title="聊天", control_type="Button")
# 2、點選進入到聊天列表
mouse.click(button='left',
coords=self.__get_element_postion(chat_list_element))
4-4 進入聊天頁面,輸入內容併傳送
獲取「 檔案聊天助手 」元素,點選進入到聊天頁面,找到輸入框元素,使用內建方法輸入內容,最後使用鍵盤模擬點選「 Enter 」鍵,傳送訊息
from pywinauto import mouse
# 3、點選【檔案傳輸助手】進入到聊天頁面
file_helper_element = self.weixin_pc_window.child_window(title="檔案傳輸助手", control_type="ListItem")
mouse.click(button='left',
coords=self.__get_element_postion(file_helper_element))
# 4、獲取輸入框元素,模擬輸入
edit_element = self.weixin_pc_window.child_window(title=r"輸入", control_type="Edit")
sleep(2)
# 輸入內容
edit_element.type_keys("星安果")
# 使用鍵盤模擬回車,即:傳送
send_keys('{ENTER}')
4-5 釋放資源
完成操作後,可以呼叫應用物件的「 kill() 」函式關閉程序,釋放掉資源
def teardown(self):
"""釋放資源"""
# 結束程序,釋放資源
self.app.kill()
5. 最後
上例中使用 pywinauto 完成了一個簡單的傳送訊息的自動化步驟
實際專案中,結合滑鼠、鍵盤可以實現很多複雜場景的自動化,對這部分有興趣的可以點選文末的「 閱讀原文 」去了解
pywinauto 和 WinAppDriver 都能很好的完成 PC 端的自動化,但是由於 WinAppDriver 支援 Appium,在指令碼語法簡潔性方面可能更有優勢
如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續輸出更多優質文章的最強動力!
相關文章
- 聊聊 PC 端自動化最佳方案 - WinAppDriverAPP
- 搬運:python基於pywinauto實現PC端自動化 python操作微信自動化Python
- App 端自動化的最佳方案,完全解放雙手!APP
- ipad + mac mini 自動隨航(最佳化方案)iPadMac
- 自動識別PC端、移動端,並跳轉
- pywinauto 實現 win 遠端桌面自動連線,但是控制元件操作速度很慢,求大佬支招控制元件
- 聊聊UI自動化的PageObject設計模式UIObject設計模式
- redis自學(47)服務端最佳化Redis服務端
- pyautogui模組,PC自動化指令碼,控制滑鼠GUI指令碼
- 移動端法門:自適應方案和高清方案
- 全新TextGrad框架:用GPT-4o作引擎,自動最佳化端到端任務框架GPT
- 最佳化方案
- 微社群與PC社群最佳解決方案
- Selenium 自動化最佳實踐技巧 (中)
- 自動化測試的最佳實踐
- GitLab + Jenkins + ACK 自動化部署方案GitlabJenkins
- Web字型圖示-自動化方案Web
- ios 自動化,尋求 WebDriverAgent 優化方案iOSWeb優化
- 前端移動端自適應方案【筆記】前端筆記
- PC端高倍屏適配方案實踐
- 端動態化方案詳細設計
- 支付寶移動端動態化方案實踐
- 蘇寧影片雲直播客戶端的最佳化方案客戶端
- SQL最佳化方案SQL
- 介面自動化測試解決方案
- 自動化 Web 效能優化分析方案Web優化
- 基於gulp的前端自動化方案前端
- iOS自動化測試調研方案iOS
- 有誰做 flutter 的自動化的嗎?出來聊聊Flutter
- 從一次故障聊聊前端 UI 自動化測試前端UI
- 最全總結 | 聊聊 Python 辦公自動化之 Excel(中)PythonExcel
- 最全總結 | 聊聊 Python 辦公自動化之 Excel(下)PythonExcel
- 最全總結 | 聊聊 Python 辦公自動化之 Word(中)Python
- 最全總結 | 聊聊 Python 辦公自動化之 Excel(上)PythonExcel
- 最全總結 | 聊聊 Python 辦公自動化之 Word(上)Python
- 最全總結 | 聊聊 Python 辦公自動化之 PDF(上)Python
- 最全總結 | 聊聊 Python 辦公自動化之 PPT(中)Python
- 最全總結 | 聊聊 Python 辦公自動化之 Word(下)Python