使用 Python 進(jìn)行 Windows GUI 自動(dòng)化

在今天的文章中,我們將探討如何使用 Python 進(jìn)行 Windows GUI 自動(dòng)化。GUI 自動(dòng)化可以幫助我們自動(dòng)執(zhí)行許多與操作系統(tǒng)交互的任務(wù),比如移動(dòng)鼠標(biāo)、點(diǎn)擊按鈕、輸入文本、移動(dòng)窗口等。Python 提供了兩個(gè)強(qiáng)大的庫(kù):pyautogui 和 pywinauto,使得 GUI 自動(dòng)化變得簡(jiǎn)單。接下來(lái)我們?cè)敿?xì)介紹。
pyautogui
pyautogui 是一個(gè)純 Python 的 GUI 自動(dòng)化庫(kù),它可以模擬鍵盤(pán)輸入、鼠標(biāo)點(diǎn)擊和移動(dòng)、在屏幕上查找圖像等操作。它對(duì) Windows、macOS、和 Linux 都有良好的支持,可以幫助我們編寫(xiě)跨平臺(tái)的自動(dòng)化腳本。
pyautogui 的使用場(chǎng)景
pyautogui 的使用場(chǎng)景非常廣泛。以下是一些常見(jiàn)的例子:
** 測(cè)試 **:自動(dòng)化腳本可以幫助我們自動(dòng)執(zhí)行一些復(fù)雜的測(cè)試用例,比如 UI 測(cè)試、功能測(cè)試等。 ** 數(shù)據(jù)錄入 **:如果我們需要在多個(gè)表單或應(yīng)用程序中輸入相同的數(shù)據(jù),自動(dòng)化腳本可以幫助我們節(jié)省大量的時(shí)間和精力。 ** 批量操作 **:如果我們需要對(duì)大量的文件或數(shù)據(jù)進(jìn)行相同的操作,自動(dòng)化腳本也可以派上用場(chǎng)。
如何安裝 pyautogui?
在開(kāi)始使用 pyautogui 之前,我們需要先在我們的 Python 環(huán)境中安裝它。在命令行中輸入以下命令即可:
pip install pyautogui
用 pyautogui 打開(kāi)記事本,輸入文本保存
接下來(lái),我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)展示如何使用 pyautogui。在這個(gè)例子中,我們將使用 pyautogui 來(lái)自動(dòng)打開(kāi)一個(gè)記事本,輸入一些文字,然后保存并關(guān)閉它。
首先,我們導(dǎo)入 pyautogui 庫(kù),并設(shè)置失敗安全特性,當(dāng)我們將鼠標(biāo)移動(dòng)到屏幕的左上角時(shí),自動(dòng)化會(huì)立即停止:
import pyautogui
pyautogui.FAILSAFE = True
然后,我們使用 pyautogui 的 hotkey 函數(shù)來(lái)模擬按下 Win+R 組合鍵,打開(kāi)運(yùn)行對(duì)話框:
pyautogui.hotkey('win', 'r')
接著,我們使用 typewrite 函數(shù)來(lái)輸入 "notepad",并按下回車(chē)鍵:
pyautogui.typewrite('notepad', interval=0.25)
pyautogui.press('enter')
然后,我們等待一下,讓記事本完全打開(kāi),然后再輸入一些文字:
import time
time.sleep(2) # wait for Notepad to open
pyautogui.typewrite('Hello, world!', interval=0.25)
typewrite 函數(shù)可以模擬鍵盤(pán)輸入,interval 參數(shù)可以設(shè)置每個(gè)字符之間的間隔,以模擬人類(lèi)的打字速度。
接下來(lái),我們用 hotkey 函數(shù)來(lái)模擬按下 Ctrl+S 組合鍵,保存這個(gè)文件:
pyautogui.hotkey('ctrl', 's') # press the Save hotkey combination
time.sleep(1) # wait for the Save dialog to appear
然后我們輸入文件名,并按下回車(chē)鍵保存文件:
pyautogui.typewrite('hello_world.txt', interval=0.25)
pyautogui.press('enter') # press the Enter key
最后,我們用 hotkey 函數(shù)來(lái)模擬按下 Alt+F4 組合鍵,關(guān)閉記事本:
pyautogui.hotkey('alt', 'f4') # close Notepad
以上就是用 pyautogui 編寫(xiě)的一個(gè)簡(jiǎn)單的自動(dòng)化腳本。通過(guò)這個(gè)腳本,我們可以看到,pyautogui 提供了一套非常直觀和易用的接口,讓我們可以輕松地編寫(xiě)出復(fù)雜的自動(dòng)化腳本。
pywinauto
pywinauto 的主要用途是自動(dòng)化 Windows GUI 應(yīng)用程序的測(cè)試和自動(dòng)化。
pywinauto 的使用場(chǎng)景
回歸測(cè)試:定期運(yùn)行相同的測(cè)試,確保軟件在進(jìn)行更改或更新后仍然可以正常工作。 質(zhì)量保證:確保軟件的新版本或功能與預(yù)期的用戶體驗(yàn)一致。 持續(xù)集成 / 持續(xù)部署 (CI/CD) 流程:在自動(dòng)化的構(gòu)建和部署過(guò)程中,進(jìn)行軟件測(cè)試。 任務(wù)自動(dòng)化:自動(dòng)執(zhí)行一些重復(fù)性的 GUI 操作,如文件管理,軟件安裝等。
用 pywinauto 來(lái)自動(dòng)化 Windows 計(jì)算器
下面是一個(gè)簡(jiǎn)單的 pywinauto 教程,我們將演示如何用 pywinauto 來(lái)自動(dòng)化 Windows 計(jì)算器的操作。
首先,你需要確保你的環(huán)境已經(jīng)安裝了 Python 和 pywinauto。你可以使用 pip 來(lái)安裝 pywinauto:
pip install pywinauto
然后,我們可以編寫(xiě)一個(gè)簡(jiǎn)單的腳本來(lái)啟動(dòng)計(jì)算器應(yīng)用并執(zhí)行一些操作:
from pywinauto.application import Application
# 啟動(dòng) Windows 計(jì)算器
app = Application().start("calc.exe")
# 選擇計(jì)算器窗口
dlg = app.window(title=' 計(jì)算器 ')
# 在計(jì)算器中輸入 2+2
dlg.type_keys('2+2=')
# 打印結(jié)果
print(" 結(jié)果是:", dlg.Static2.window_text())
這段代碼首先啟動(dòng)了 Windows 計(jì)算器,然后在計(jì)算器中執(zhí)行了 2+2 的操作,并打印出結(jié)果。
** 請(qǐng)注意:這個(gè)示例假設(shè)你的計(jì)算器應(yīng)用具有類(lèi)似于 Windows 10 計(jì)算器的布局。不同的 Windows 版本可能需要適當(dāng)調(diào)整代碼。**
用 pywinauto 來(lái)自動(dòng)化 Windows 記事本
導(dǎo)入模塊
在 Python 腳本中,我們需要導(dǎo)入 pywinauto 庫(kù)。同時(shí),我們還會(huì)導(dǎo)入 time 庫(kù),因?yàn)樵趫?zhí)行某些操作時(shí),我們可能需要暫停一下。
from pywinauto.application import Application
import time
啟動(dòng)應(yīng)用程序
使用 pywinauto 的 Application 對(duì)象,我們可以啟動(dòng)和控制應(yīng)用程序。例如,如果我們要打開(kāi)記事本,我們可以這樣做:
app = Application().start("notepad.exe")
操作窗口
在打開(kāi)應(yīng)用程序后,我們通常需要與其窗口進(jìn)行交互。我們可以使用 app 對(duì)象的 window_ 方法來(lái)獲取窗口。然后,我們可以調(diào)用窗口的方法來(lái)執(zhí)行各種操作,如點(diǎn)擊按鈕或輸入文本。
例如,我們可以在記事本中輸入一些文本:
app.Notepad.Edit.type_keys("Hello, World!", with_spaces = True)
type_keys 方法會(huì)模擬鍵盤(pán)按鍵。with_spaces = True 參數(shù)表示我們希望在每次按鍵之間添加短暫的延遲,以模擬人類(lèi)的打字速度。
保存和關(guān)閉
最后,我們可以模擬點(diǎn)擊菜單選項(xiàng)來(lái)保存我們的文件,然后關(guān)閉記事本:
app.Notepad.menu_select("File -> Save As")
app.SaveAs.Edit.set_edit_text("example.txt")
app.SaveAs.Save.click()
time.sleep(1)
app.Notepad.menu_select("File -> Exit")
在這個(gè)例子中,menu_select 方法用于模擬點(diǎn)擊菜單選項(xiàng),set_edit_text 方法用于在文本框中輸入文本,click 方法用于點(diǎn)擊按鈕。
** 請(qǐng)注意:這個(gè)示例假設(shè)你的記事本的菜單是英文,如果是中文,則需要調(diào)整代碼為中文。**
以上就是一個(gè)基本的例子,展示了如何使用 Python 和 pywinauto 進(jìn)行 Windows GUI 自動(dòng)化。當(dāng)然,pywinauto 還有更多的功能等待您去探索,包括處理復(fù)雜的窗口結(jié)構(gòu)、模擬鼠標(biāo)操作等。
最后的話
pywinauto 和 pyautogui 都是強(qiáng)大的 GUI 自動(dòng)化工具,可以幫助你自動(dòng)化 Windows 應(yīng)用程序的許多任務(wù),你可以選擇合適的工具進(jìn)行自動(dòng)化。希望這篇文章和教程能幫你提高工作效率。


1、8個(gè)很少用,但卻很好用的 Python 庫(kù),一起來(lái)看看吧
2、“讓Python快5倍”最新計(jì)劃:優(yōu)化解釋器和內(nèi)存管理
點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容

