python控制軟體自動化(python自動化模組)

Python的優雅、簡潔與強大深深地吸引著我們,它海量的工具包為我們的工作提供了強有力的支援。在自動化工作中,Python更是一把利器,數十行程式碼就能幹淨利落地完成很多繁瑣重複的工作。本文在這裡將介紹Python中四種常用的自動化工具包。

Pywin32

Pywin32是一個Python庫,為python提供訪問Windows API的擴充套件,提供了齊全的Windows常量、介面、執行緒以及COM機制等等。這個庫裡面最重要的三個模組win32api、win32gui和win32con。

查詢控制代碼:窗體是指視窗到文字框的所有控制元件,每個窗體都有獨立的控制代碼。要操作任意一個窗體,都需要找到這個窗體的控制代碼。我們可以用win32gui模組中的FindWindow函式和FindWindowEx函式(子窗體函式)來得到指定窗體的控制代碼。(使用Spy 或Inspect可以很方便地檢視目標視窗的視窗名、類名和控制代碼)

選單操作:視窗的選單就像視窗的標題欄一樣,是視窗自身的一部分,不是其他窗體控制元件,也就沒有辦法用FindWindow和FindWindowEx返回控制代碼。我們可以用win32gui模組中的GetMenu,GetSubMenu和GetMenuItemID函式來操作選單。

控制元件操作:控制元件的操作基於win32的訊息機制,我們可以使用win32api模組的SendMessage函式向窗體傳送訊息來進行操作。同時也可以利用mouse_event、keybd_event等函式模擬滑鼠和鍵盤對控制元件進行操作。

下面的程式碼實現了記事本的自動儲存。

Pywinauto

Pywinauto是實現Windows視窗程式自動化的一把利器,它主要操作於Windows標準圖形介面。Pywinauto基於Pywin32,其最主要功能為對Windows標準控制元件的一系列動作可程式設計處理,包括對視窗的指定、滑鼠或鍵盤操作、獲得控制元件屬性等等。相比起Pywin32,Pywinauto使用起來更方便穩定,對中文的支援度也更好。下面簡單地介紹一下Pywinauto的使用。

首先,利用Spy 或Inspec判斷視窗程式開發語言是什麼,即確定backend。Pywinauto支援“win32”和“uia”兩種backend。接著,從Pywinauto.application中匯入Application模組,利用Application().start函式或Application().connect函式關聯到一個應用。如:app = Application(backend="uia").start('notepad.exe')。此後,利用正規表示式進行模糊匹配找到應用app的一個窗體,如:dlg = app.window_(title_re = ".*Part of Title.*")。最後,可以對窗體上的控制元件模擬滑鼠或鍵盤的操作,實現應用視窗的自動操作。

下面程式碼實現了對記事本選單的操作和鍵盤輸入。

Pyautogui

Pyautogui是另一個常用的基於Python的GUI自動化工具,能夠支援多個平臺。Pyautogui主要是用程式自動控制滑鼠和鍵盤操作。雖然Pyautogui和Pywinauto都是實現GUI 的自動操作,但兩者的側重點不同。Pyautogui側重於滑鼠、鍵盤、截圖等功能,且是基於影象匹配進行定位的,而Pywinauto側重與對系統的操作,雖然也有鍵盤和滑鼠的模擬操作,但核心上還是軟體上的操作更多。兩者各有所長,需根據實際情況選擇合適的。

Pyautogui對滑鼠的移動、點選、拖拽,鍵盤按鍵輸入、按住操作,以及滑鼠 鍵盤的熱鍵同時按住等操作都能準確模擬,可以說手能動的都可以,並且簡單方便。但由於控制元件的定位依賴於影象匹配,所以得事先儲存好控制元件的截圖,然後在操作時自動擷取螢幕,利用影象匹配找到控制元件在螢幕的畫素位置,再將滑鼠自動移至控制元件處點選。Pyautogui自帶的影象匹配函式精度不是很高,可以加入opencv中的匹配函式來代替,更加準確方便。

下面程式碼實現了百度網盤的自動登入。

Selenium with Python

Selenium與上面三種工具有點不同,它的自動化物件是各種瀏覽器,包括Chrome、Safari、FireFox、IE等主流介面式的瀏覽器,常在爬蟲應用中發揮很大的作用。Selenium最為主要的模組是Webdriver模組。Webdriver提供了一系列瀏覽器物件定位的方法,常用的有id、name、class name、tag name、xpath、link text等等。定位物件後,Webdriver提供了操作物件的方法,包括清除內容clear、模擬輸入send_keys、單擊滑鼠click、提交表單submit等等。有時候為了保證指令碼執行的穩定性,需要在指令碼中新增等待時間,有sleep、implicitly_wait和WebDriverWait三種方法選擇。此外在多表單切換、多視窗切換、警告視窗處理、上傳檔案、獲取驗證碼等方面Webdriver都有相應的方法,功能強大。

下面的程式碼實現了模擬提交搜尋功能,首先等頁面載入完成,然後輸入到搜尋框文字,點選提交。

本文分別介紹了Pywin32、Pywinauto、Pyautogui和Selenium with Python四種基於Python的自動化工具包。使用這些工具包可以讓繁瑣的工作自己動起來,實現自動化,解放我們的雙手,大大地提高工作效率。不過在智慧方面還有很大的提升空間,這也是未來努力的方向。