https://505901.kuaizhan.com/91/83/p54930493505b39
~~轉(zhuǎn)自南方IT界
Python的優(yōu)雅吆倦、簡潔與強大深深地吸引著我們,它海量的工具包為我們的工作提供了強有力的支持坐求。在自動化工作中蚕泽,Python更是一把利器,數(shù)十行代碼就能干凈利落地完成很多繁瑣重復(fù)的工作桥嗤。本文在這里將介紹Python中四種常用的自動化工具包须妻。
Pywin32
Pywin32是一個Python庫,為python提供訪問Windows API的擴展泛领,提供了齊全的Windows常量荒吏、接口、線程以及COM機制等等渊鞋。這個庫里面最重要的三個模塊win32api绰更、win32gui和win32con。
查找句柄:窗體是指窗口到文本框的所有控件锡宋,每個窗體都有獨立的句柄儡湾。要操作任意一個窗體,都需要找到這個窗體的句柄执俩。我們可以用win32gui模塊中的FindWindow函數(shù)和FindWindowEx函數(shù)(子窗體函數(shù))來得到指定窗體的句柄徐钠。(使用Spy++或Inspect可以很方便地查看目標窗口的窗口名、類名和句柄)
菜單操作:窗口的菜單就像窗口的標題欄一樣奠滑,是窗口自身的一部分丹皱,不是其他窗體控件妒穴,也就沒有辦法用FindWindow和FindWindowEx返回句柄。我們可以用win32gui模塊中的GetMenu摊崭,GetSubMenu和GetMenuItemID函數(shù)來操作菜單讼油。
控件操作:控件的操作基于win32的消息機制,我們可以使用win32api模塊的SendMessage函數(shù)向窗體發(fā)送消息來進行操作呢簸。同時也可以利用mouse_event矮台、keybd_event等函數(shù)模擬鼠標和鍵盤對控件進行操作。
下面的代碼實現(xiàn)了記事本的自動保存根时。
Pywinauto
Pywinauto是實現(xiàn)Windows窗口程序自動化的一把利器瘦赫,它主要操作于Windows標準圖形界面。Pywinauto基于Pywin32蛤迎,其最主要功能為對Windows標準控件的一系列動作可編程處理确虱,包括對窗口的指定、鼠標或鍵盤操作替裆、獲得控件屬性等等校辩。相比起Pywin32,Pywinauto使用起來更方便穩(wěn)定辆童,對中文的支持度也更好宜咒。下面簡單地介紹一下Pywinauto的使用。
首先把鉴,利用Spy++或Inspec判斷窗口程序開發(fā)語言是什么故黑,即確定backend。Pywinauto支持“win32”和“uia”兩種backend庭砍。接著场晶,從Pywinauto.application中導(dǎo)入Application模塊,利用Application().start函數(shù)或Application().connect函數(shù)關(guān)聯(lián)到一個應(yīng)用逗威。如:app = Application(backend="uia").start('notepad.exe')峰搪。此后,利用正則表達式進行模糊匹配找到應(yīng)用app的一個窗體凯旭,如:dlg = app.window_(title_re = ".*Part of Title.*")概耻。最后,可以對窗體上的控件模擬鼠標或鍵盤的操作罐呼,實現(xiàn)應(yīng)用窗口的自動操作鞠柄。
下面代碼實現(xiàn)了對記事本菜單的操作和鍵盤輸入。
Pyautogui
Pyautogui是另一個常用的基于Python的GUI自動化工具嫉柴,能夠支持多個平臺厌杜。Pyautogui主要是用程序自動控制鼠標和鍵盤操作。雖然Pyautogui和Pywinauto都是實現(xiàn)GUI 的自動操作,但兩者的側(cè)重點不同夯尽。Pyautogui側(cè)重于鼠標瞧壮、鍵盤、截圖等功能匙握,且是基于圖像匹配進行定位的咆槽,而Pywinauto側(cè)重與對系統(tǒng)的操作,雖然也有鍵盤和鼠標的模擬操作圈纺,但核心上還是軟件上的操作更多秦忿。兩者各有所長,需根據(jù)實際情況選擇合適的蛾娶。
Pyautogui對鼠標的移動灯谣、點擊、拖拽蛔琅,鍵盤按鍵輸入胎许、按住操作,以及鼠標+鍵盤的熱鍵同時按住等操作都能準確模擬罗售,可以說手能動的都可以呐萨,并且簡單方便。但由于控件的定位依賴于圖像匹配莽囤,所以得事先保存好控件的截圖,然后在操作時自動截取屏幕切距,利用圖像匹配找到控件在屏幕的像素位置朽缎,再將鼠標自動移至控件處點擊。Pyautogui自帶的圖像匹配函數(shù)精度不是很高谜悟,可以加入opencv中的匹配函數(shù)來代替话肖,更加準確方便。
下面代碼實現(xiàn)了百度網(wǎng)盤的自動登錄葡幸。
Selenium with Python
Selenium與上面三種工具有點不同最筒,它的自動化對象是各種瀏覽器,包括Chrome蔚叨、Safari床蜘、FireFox、IE等主流界面式的瀏覽器蔑水,常在爬蟲應(yīng)用中發(fā)揮很大的作用邢锯。Selenium最為主要的模塊是Webdriver模塊。Webdriver提供了一系列瀏覽器對象定位的方法搀别,常用的有id丹擎、name、class name、tag name蒂培、xpath再愈、link text等等。定位對象后护戳,Webdriver提供了操作對象的方法翎冲,包括清除內(nèi)容clear、模擬輸入send_keys灸异、單擊鼠標click府适、提交表單submit等等。有時候為了保證腳本運行的穩(wěn)定性肺樟,需要在腳本中添加等待時間檐春,有sleep、implicitly_wait和WebDriverWait三種方法選擇么伯。此外在多表單切換疟暖、多窗口切換、警告窗口處理田柔、上傳文件俐巴、獲取驗證碼等方面Webdriver都有相應(yīng)的方法,功能強大硬爆。
下面的代碼實現(xiàn)了模擬提交搜索功能欣舵,首先等頁面加載完成,然后輸入到搜索框文本缀磕,點擊提交缘圈。
本文分別介紹了Pywin32、Pywinauto袜蚕、Pyautogui和Selenium with Python四種基于Python的自動化工具包糟把。使用這些工具包可以讓繁瑣的工作自己動起來,實現(xiàn)自動化牲剃,解放我們的雙手遣疯,大大地提高效率。不過在智能方面還有很大的提升空間凿傅,這也是未來努力的方向缠犀。
參考文獻:
1. 如何利用Python和win32編程避免重復(fù)性體力勞動
2. python自動化工具之pywinauto
3. https://pywinauto.readthedocs.io/en/latest/contents.html
4. PyAutoGUI——讓所有GUI都自動化
5. Selenium Python環(huán)境搭建