Python操作外部程序方法(原名Python自動化工具)

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)境搭建

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狭归,隨后出現(xiàn)的幾起案子夭坪,更是在濱河造成了極大的恐慌,老刑警劉巖过椎,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件室梅,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機亡鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門赏殃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人间涵,你說我怎么就攤上這事仁热。” “怎么了勾哩?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵抗蠢,是天一觀的道長。 經(jīng)常有香客問我思劳,道長迅矛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任潜叛,我火速辦了婚禮秽褒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘威兜。我一直安慰自己销斟,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布椒舵。 她就那樣靜靜地躺著蚂踊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笔宿。 梳的紋絲不亂的頭發(fā)上悴势,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音措伐,去河邊找鬼。 笑死军俊,一個胖子當著我的面吹牛侥加,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粪躬,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼担败,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镰官?” 一聲冷哼從身側(cè)響起提前,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泳唠,沒想到半個月后狈网,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年拓哺,在試婚紗的時候發(fā)現(xiàn)自己被綠了勇垛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡士鸥,死狀恐怖闲孤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烤礁,我是刑警寧澤讼积,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站脚仔,受9級特大地震影響勤众,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玻侥,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一决摧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凑兰,春花似錦掌桩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至音半,卻和暖如春则拷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曹鸠。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工煌茬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彻桃。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓坛善,卻偏偏與公主長得像,于是被迫代替她去往敵國和親邻眷。 傳聞我的和親對象是個殘疾皇子眠屎,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容