當前位置: 妍妍網 > 碼農

pywinauto,一款Win自動化利器!

2024-06-28碼農

點選上方 " Python人工智慧技術 " 關註, 星標或者置頂

22點24分準時推播,第一時間送達

後台回復「 大禮包 」,送你特別福利

編輯: 樂樂 | 來自:冰冷的希望

連結:https://blog.csdn.net/qq_39147299/article/details/132409817

上一篇:

大家好,我是Python人工智慧技術

1.安裝

pywinauto是一個 用於自動化Python模組 ,適合Windows系統的軟體(GUI),可以 透過Pywinauto遍歷視窗 (對話方塊)和視窗裏的控制項,也可以 控制滑鼠和鍵盤輸入 ,所以它能做的事情比之前介紹的pysimplegui更多

一般使用pip安裝就行了

pip install pywinauto

官網文件:https://pywinauto.readthedocs.io/en/latest/

2.Application

我們要控制軟體的第一件事就是啟動一個Windows軟體,每一個軟體(行程)都是一個Application物件

例項化Application物件的時候可以傳入一個backend參數,可選值為 win32(預設)和uia

  • win32對應的框架: MFC 、VB6、VCL、簡單的 WinForms 控制項和大多數舊的遺留應用程式

  • uia對應的框架: WinForms、WPF、商店應用程式、Qt5、瀏覽器

  • 如果無法知道要測試的軟體是屬於哪種框架,可以使用 Inspect(對應uia) Spy++ (對應win32) 看看,你看哪個顯示得更全就選哪個。Inspect和Spy++需要自己安裝一下

    下面是Application物件的主要方法

    舉例,啟動一個微信套用,透過行程號連線, 行程號就是在工作管理員裏詳細資訊看到的PID


    3.WindowSpecification

    我們要獲取視窗,一個視窗都是一個 WindowSpecification 物件,可以透過Application物件的window()方法獲取,參數可以是title、 classname或者best_match等,這都可以在inspect.exe上看到,不過 需要註意的是inspect看到的Name其實對應的是window()的title參數

    WindowSpecification物件常用的方法如下

    舉個栗子

    4.元素控制項

    一個視窗裏一般都會有各種各樣的元素,比如說 按鈕 (Button)、 編輯列 (Edit)、 樹狀檢視 (Tree View)、 核取方塊 (CheckBox)、 對話方塊 (Dialog)、 工具列 (Toolbar)、 狀態列 (StatusBar)、 列表框 ListBox )、 窗格 (Pane)、 選單 (Menu)、 選單欄 MenuItem )、 靜態內容 (Static)、 工具提示 (ToolTips)、 列表控制項 (ListView)、 單選框 RadioButton )、 下拉式方塊 (ComboBox)、 索引標籤控制項 (TabControl)、 組框 (GroupBox)、 彈出選單 (PopupMenu)、 (Header)等

    因為控制項型別太多了不能一個一個學習,但是它們都有一個 element_info 的內容,存取之後會返回一個繼承於 ElementInfo 的物件(UIAElementInfo或HwndElementInfo),比較重要的內容或方法如下

    這些元素除了有 element_info 可以獲取一些元素的主要資訊,它們還都被包裝成一個Wrapper,所以也可以學一下 BaseWrapper 的常用方法和內容。其實 BaseWrapper 的方法基本上都是對 ElementInfo 進一步包裝,我只列出部份方法,如下表

    說明一下,每個控制項元素都有對應的Wrapper,所以上面的方法也不一定都用,需要根據實際情況進行測試區分。另外,比較有用的 click_input() type_keys() 這兩個方法分別用於操作滑鼠和鍵盤(輸入),下面我會單獨拿出來說一下

    滑鼠操作

    滑鼠點選肯定離不開點選的位置,桌面就是一個座標,左上角為座標原點,往右是X軸正向,往下是Y軸正向。pywinauto提供了一個mouse模組用於滑鼠操作,最核心的方法是 _perform_click_input() ,不過它是一個私有方法,我們呼叫的是基於它的封裝方法,如下表

    參數說明:

  • 參數button 的預設值都是「left」,即滑鼠左鍵,可選值有left、right、middle、move、wheel、x

  • 參數coords 的預設值都是元組(0, 0),元組裏的兩個整數分別是X、Y軸的值

  • 參數wheel_dist 表示捲動的距離,大於0是向上捲動,小於0是向下滑動

  • 舉個栗子

    鍵盤操作

    鍵盤操作主要是按下鍵盤上的按鍵,相關方法在keyboard模組,最最主要的是 send_keys() 方法,第一個參數 keys 就是我們需要按下的按鍵,其他參數比如說with_spaces、with_tabs、with_newlines、turn_off_numlock、set_foreground、vk_packet,一看就知道作用,而且都是布爾值,此處不進行舉例

    pywinauto支持的完整的按鍵可以在官方文件檢視,https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html

    下面我列舉出的是一些比較常用的按鍵

    說明:

  • 使用按鍵時需要搭配大括弧,比如說按下回車鍵是 '{ENTER}' (是字串)

  • 在Windows平台預設是發送虛擬按鍵的,以 VK_ 開頭的按鍵,都是指虛擬按鈕,如果不想使用虛擬按鈕可以把 VK_ 字首去掉,把send_keys()的 vk_packet 參數改為 False 即可

  • 單個按鍵按下擡起還不夠,往往需要組合鍵,這時候就需要修飾詞了,在大括弧裏可以使用 down up 控制按鍵什麽時候按下和擡起,如果後面加上數位,表示按下多少次

    當然,很多時候使用 down up 修飾感覺不夠簡潔,所以pywinauto還提供了簡化寫法,使用 + 代替 {VK_SHIFT} ,使用 ^ 代替 {VK_CONTROL} ,使用 % 代替 {VK_MENU}

    如果不想按下按鈕,純屬想要輸入純字串,那就需要取消轉義了,註意修飾詞和按鈕的寫法是不一樣的

    為了跟上AI時代我幹了一件事兒,我建立了一個知識星球社群:ChartGPT與副業。想帶著大家一起探索 ChatGPT和新的AI時代

    有很多小夥伴搞不定ChatGPT帳號,於是我們決定,凡是這三天之內加入ChatPGT的小夥伴,我們直接送一個正常可用的永久ChatGPT獨立帳戶。

    不光是增長速度最快,我們的星球品質也絕對經得起考驗,短短一個月時間,我們的課程團隊釋出了 8個專欄、18個副業計畫

    簡單說下這個星球能給大家提供什麽:

    1、不斷分享如何使用ChatGPT來完成各種任務,讓你更高效地使用ChatGPT,以及副業思考、變現思路、創業案例、落地案例分享。

    2、分享ChatGPT的使用方法、最新資訊、商業價值。

    3、探討未來關於ChatGPT的機遇,共同成長。

    4、幫助大家解決ChatGPT遇到的問題。

    5、 提供一整年的售後服務,一起搞副業

    星球福利:

    1、加入星球4天後,就送ChatGPT獨立帳號。

    2、邀請你加入ChatGPT會員交流群。

    3、贈送一份完整的ChatGPT手冊和66個ChatGPT副業賺錢手冊。

    其它福利還在籌劃中... 不過,我給你大家保證,加入星球後,收獲的價值會遠遠大於今天加入的門票費用 !

    本星球第一期原價 399 ,目前屬於試營運,早鳥價 169 ,每超過50人漲價10元,星球馬上要來一波大的漲價,如果你還在猶豫,可能最後就要以 更高價格加入了 。。

    早就是優勢。建議大家盡早以便宜的價格加入!

    歡迎有需要的同學試試,如果本文對您有幫助,也請幫忙點個 贊 + 在看 啦!❤️

    在 還有更多優質計畫系統學習資源,歡迎分享給其他同學吧!

    你還有什 麽想要補充的嗎?

    免責聲明:本文內容來源於網路,文章版權歸原作者所有,意在傳播相關技術知識&行業趨勢,供大家學習交流,若涉及作品版權問題,請聯系刪除或授權事宜。

    技術君個人微信

    添加技術君個人微信即送一份驚喜大禮包

    → 技術資料共享

    → 技術交流社群

    --END--

    往日熱文:

    Python程式設計師深度學習的「四大名著」:

    這四本書著實很不錯!我們都知道現在機器學習、深度學習的資料太多了,面對海量資源,往往陷入到「無從下手」的困惑出境。而且並非所有的書籍都是優質資源,浪費大量的時間是得不償失的。給大家推薦這幾本好書並做簡單介紹。

    獲得方式:

    1.掃碼關註本公眾號

    2.後台回復關鍵詞:名著

    ▲長按掃描關註,回復名著即可獲取