<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python自動操作 GUI 神器——PyAutoGUI

          共 4420字,需瀏覽 9分鐘

           ·

          2022-08-11 21:30

          ↑ 關(guān)注 + 星標 ,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包

          文 | 閑歡

          來源:Python 技術(shù)「ID: pythonall」

          我們以前講過怎樣使用 Python 在瀏覽器中實現(xiàn)頁面自動化操作,不管用哪種方式實現(xiàn),都是通過定位頁面中的元素來進行相應(yīng)的操作。

          今天我們來聊一聊如何在桌面實現(xiàn)自動化操作。與瀏覽器頁面自動化操作類似,桌面自動化操作也是需要定位鼠標在桌面的位置,然后根據(jù)定位的位置執(zhí)行對應(yīng)的操作。

          GUI 控制神器

          我們今天的主人公是 pyautogui,pyautogui 是一個純 Python 的 GUI 自動化工具,通過它可以讓程序自動控制鼠標和鍵盤的一系列操作來達到自動化測試的目的。

          這個模塊的安裝也是老一套:

          pip3 install pyautogui

          安裝好了就可以直接使用了。

          鼠標操作

          鼠標移動

          桌面操作最基本的就是鼠標操作了,我們可以控制鼠標的移動:

          # 移動鼠標
          pyautogui.moveTo(200,400,duration=2)
          pyautogui.moveRel(200,500,duration=2)

          整個桌面是以左上角為坐標軸的原點,所有的操作都以這個原點,來確定操作位置。

          第一行是將鼠標移動到指定的像素(200,400)位置,第二行代碼是將鼠標按照當(dāng)前點向右移動200px,向下移動400px這個方向移動。

          兩行代碼中都有一個共同的參數(shù) duration,這個參數(shù)表示移動時間,即在指定時間內(nèi)完成移動操作,單位是秒。

          運行這兩行代碼,觀察屏幕鼠標的變化,是不是很神奇?

          我們還可以獲取鼠標位置:

          print(pyautogui.position())  

          這個很好理解,就是獲取鼠標在當(dāng)前屏幕中的坐標位置,運行這行代碼,我們會得到諸如下面的信息:

          Point(x=400, y=900)

          鼠標點擊

          通常,我們的鼠標有左右兩個按鍵,高級點的鼠標中間還有個按鍵。

          我的鼠標只有兩個按鍵,中間沒有按鍵,唉~

          pyautogui針對這三個按鍵操作都有相應(yīng)的處理:

          # 鼠標點擊,默認左鍵
          pyautogui.click(100,100)   
          # 單擊左鍵
          pyautogui.click(100,100,button='left')  
          # 單擊右鍵
          pyautogui.click(100,300,button='right'
          # 單擊中間 
          pyautogui.click(100,300,button='middle')  

          鼠標點擊,如果不指定 button 參數(shù),默認是點擊左鍵,前面兩個參數(shù)就是點擊坐標的位置。

          運行這段代碼,看看你的桌面會發(fā)生什么?

          鼠標除了點擊操作,還有雙擊操作:

          # 雙擊左鍵
          pyautogui.doubleClick(10,10)  
          # 雙擊右鍵
          pyautogui.rightClick(10,10)   
          # 雙擊中鍵
          pyautogui.middleClick(10,10

          操作函數(shù)也很簡單,相信大家一眼就能看明白,如果一眼看不明白,請多看幾眼!

          熟悉前端的小伙伴可能會馬上聯(lián)想到,鼠標操作有按下和釋放的過程,我們屏幕操作也有對應(yīng)的控制:

          # 鼠標按下
          pyautogui.mouseDown()   
          # 鼠標釋放
          pyautogui.mouseUp()    

          鼠標拖動

          我們可以控制鼠標拖動到指定坐標位置,并且設(shè)置操作時間:

          pyautogui.dragTo(100,300,duration=1)   

          這個運行效果和前面移動類似。

          根據(jù)前面移動的經(jīng)驗,我們也有按照方向拖動鼠標:

          pyautogui.dragRel(100,300,duration=4

          鼠標滾動

          在桌面操作中,我們有時候需要滾動鼠標到達向上或者向下的位置,這時候我們可以使用 scroll 這個函數(shù)來控制:

          pyautogui.scroll(30000

          參數(shù)是整數(shù),表示向上或向下滾動多少個單位,這個單位根據(jù)不同的操作系統(tǒng)可能不一樣。如果向上滾動,傳入正整數(shù),向下滾動傳入負整數(shù)。

          屏幕處理

          獲取屏幕截圖

          我們先來假設(shè)一個場景:我現(xiàn)在要在屏幕上找到一個紅色的點,你會怎么做?通常的做法是拿到這個紅色點的顏色值,然后再對屏幕上的點逐個進行比較,直到找到為止。

          pyautogui 為我們這個操作場景提供了支持,分別有三個函數(shù)可以完成這三件事情。

          im = pyautogui.screenshot()
          im.save('screenshot.png')
          rgb = im.getpixel((100500))
          print(rgb)
          match = pyautogui.pixelMatchesColor(500,500,(12,120,400))
          print(match)

          第一個是獲取屏幕截圖函數(shù),它可以返回一個 Pillow 的 image 對象; 第二個是獲取屏幕截圖中指定坐標點的顏色,返回 rgb 顏色值;第三個是將指定坐標點的顏色和目標的顏色進行比對,返回布爾值。

          我們再來升級一下需求:

          我現(xiàn)在要在屏幕上找到 edge 瀏覽器的圖標,你會怎么做?

          通常的做法是先知道 edge 瀏覽器的圖標長啥樣,是綠色還是藍色,是胖的還是瘦的,對吧?然后再在屏幕上去進行圖標的匹配,直到找到一個圖標跟我們目標圖標一樣,就得到了結(jié)果。

          于是,我們的代碼如下:

          # 圖像識別(一個)
          oneLocation = pyautogui.locateOnScreen('1.png')
          print(oneLocation)  

          # 圖像識別(多個)
          allLocation = pyautogui.locateAllOnScreen('1.png')
          print(list(allLocation))

          你可以在桌面上將某個應(yīng)用的圖標截取下來,保存為圖片,然后使用上面幾行代碼來識別,識別成功,你會返回類似下面的結(jié)果:

          Box(left=20, top=89, width=33, height=34)
          [Box(left=20, top=89, width=33, height=34)]

          這就是圖片在桌面的位置,如果找不到圖片,就會返回 None。

          鍵盤輸入

          鍵盤函數(shù)

          鍵盤輸入有下面幾個常用的函數(shù):

          • keyDown():模擬按鍵按下
          • keyUP():模擬按鍵松開
          • press():模擬一次按鍵過程,即 keyDown 和 keyUP 的組合
          • typewrite():模擬鍵盤輸出內(nèi)容

          舉個例子,大家平時輸入感嘆號(!)是怎么操作鍵盤的?

          按住 shift 按鍵,然后再按住 1 按鍵,就可以了。用 pyautogui 控制就是:

          pyautogui.keyDown('shift')    
          pyautogui.press('1')    
          pyautogui.keyUp('shift')   

          運行上面的代碼,如果你的鼠標是放在編輯框中,你會得到一個感嘆號!

          我們還可以直接輸出內(nèi)容:

          pyautogui.typewrite('python'1)

          第一個參數(shù)是輸出的內(nèi)容,第二個參數(shù)是間隔時間,單位是秒。

          運行上面代碼,你的編輯器里面就會每隔1秒鐘按順序輸出 python 的6個字母。

          特殊符號

          有時我們需要輸入鍵盤的一些特殊的符號按鍵,比如 換行、方向鍵等,這些有相對應(yīng)的鍵盤字符串表示:

          pyautogui.typewrite(['p','y','t','h','o','n','enter'])   

          運行上面代碼,編輯器里面就會輸出 python 之后換行。

          其他特殊按鍵對應(yīng)的字符串請參考官方說明。

          快捷鍵

          如果我要復(fù)制一個內(nèi)容,大部分情況下會使用快鍵鍵 ctrl + c,按照上面講的,我們應(yīng)該這么實現(xiàn):

          pyautogui.keyDown('ctrl')
          pyautogui.keyDown('c')
          pyautogui.keyUp('c')
          pyautogui.keyUp('ctrl')

          這樣寫起來很麻煩,而且需要掌控按鍵的按下和釋放的順序。

          pyautogui 為我們提供了一個快捷的函數(shù):

          pyautogui.hotkey('ctrl','c')

          實現(xiàn)的效果和上面的4行代碼相同。

          信息框

          當(dāng)你在模擬一個桌面操作的時候,如果有分支操作需要根據(jù)實際情況來判斷,你是不是需要有一個地方可以讓你選擇走哪個分支?

          pyautogui 貼心地考慮到了這種情況,你可以通過彈出一個選擇框來中斷當(dāng)前的操作,選擇操作分支。

          way = pyautogui.confirm('領(lǐng)導(dǎo),該走哪條路?', buttons=['農(nóng)村路''水路''陸路'])
          print(way)

          這里就是我們 HTML 頁面的 confirm 選擇框,選擇了選項之后,我們可以獲取到選擇的選項,然后基于這個選項做判斷,進入相應(yīng)的操作分支。

          除了選擇確認框之外,還有其他一些提示信息框:

          # 警告框
          alert = pyautogui.alert(text='警告!敵軍來襲!', title='警告框')
          print(alert)
          # 密碼框
          password = pyautogui.password('請輸入密碼')
          print(password)
          # 普通輸入框
          input = pyautogui.prompt('請輸入指令:')
          print(input)

          總結(jié)

          pyautogui 的基本知識就給大家介紹到這里,這個 python 模塊的功能十分強大,函數(shù)都非常簡單,對 python 初學(xué)者比較友好。學(xué)了這些基本知識之后,你可以運用這些基本知識的組合,去實現(xiàn)一些有趣的桌面自動化操作,快去嘗試一把吧!


          1. 10個python初學(xué)者常犯的錯誤

          2. 來了,又一個新的SQL刷題網(wǎng)站!

          3. 4K壁紙批量采集,張張精品,全程自動化



          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉网站视频婷婷 | 操婷婷视频在线观看网站 | 爆操视频在线观看免费 | 亚洲无码精品九九九 | 日本一线视频在线观看 |