您好,登錄后才能下訂單哦!
本篇內容主要講解“Python自動操作GUI之PyAutoGUI怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python自動操作GUI之PyAutoGUI怎么使用”吧!
我們今天的主人公是 pyautogui
,pyautogui
是一個純 Python 的 GUI 自動化工具,通過它可以讓程序自動控制鼠標和鍵盤的一系列操作來達到自動化測試的目的。
模塊安裝,打開cmd,輸入:
pip install pyautogui
成功展示:Successfully installed PyTweening-1.0.4 mouseinfo-0.1.3 pyautogui-0.9.53 pygetwindow-0.0.9 pymsgbox-1.0.9 pyperclip-1.8.2 pyrect-0.2.0 pyscreeze-0.1.28
安裝好后就可以直接使用了。
導包
import pyautogui
pyautogui.position() 獲取鼠標位置
pyautogui.onScreen(x,y) 判斷坐標(x,y)是否在屏幕內,返回True,Flase
以右上角為(0,0)點
桌面操作最基本的就是鼠標操作了,我們可以控制鼠標的移動:
pyautogui.moveTo(x,y) 絕對位置移動 ,移動到x,y
pyautogui.moveRel(x,y) 相對位置移動 ,從當前位置移動
# 移動鼠標 pyautogui.moveTo(200,400,duration=2) pyautogui.moveRel(200,500,duration=2)
整個桌面是以左上角為坐標軸的原點,所有的操作都以這個原點,來確定操作位置。
第一行是將鼠標移動到指定的像素(200,400)位置;
第二行代碼是將鼠標按照當前點向右移動200px,向下移動500px這個方向移動。
兩行代碼中都有一個共同的參數 duration,這個參數表示移動時間
,即在指定時間內完成移動操作,單位是秒
。
運行這兩行代碼,觀察屏幕鼠標的變化,是不是很神奇?
通常,我們的鼠標有左右兩個按鍵,高級點的鼠標中間還有個按鍵。
我的鼠標只有兩個按鍵,中間沒有按鍵,唉~pyautogui
針對這三個按鍵操作都有相應的處理:
pyautogui.click()
(100,100, clicks=2,interval=0.5,button=‘right’,duration=0.2)
位置,點擊次數,間隔時間,右鍵(默認左鍵),移動間隔
left:左鍵 right:右鍵 middle:中鍵
# 鼠標點擊,默認左鍵 pyautogui.click(100,100) # 單擊左鍵 pyautogui.click(100,100,button='left') # 單擊右鍵 pyautogui.click(100,300,button='right') # 單擊中間 pyautogui.click(100,300,button='middle')
鼠標點擊,如果不指定 button
參數,默認是點擊左鍵,前面兩個參數就是點擊坐標的位置。
運行這段代碼,看看你的桌面會發生什么?
鼠標除了點擊操作,還有雙擊操作:
pyautogui.doubleClick() #雙擊右鍵
pyautogui.leftClick() #雙擊左鍵
pyautogui.middleClick() #雙擊中鍵
pyautogui.tripleClick() #雙擊屏幕
# 雙擊左鍵 pyautogui.doubleClick(10,10) # 雙擊右鍵 pyautogui.rightClick(10,10) # 雙擊中鍵 pyautogui.middleClick(10,10) # 雙擊屏幕 pyautogui.tripleClick(10,10)
操作函數也很簡單,相信大家一眼就能看明白,如果一眼看不明白,請多看幾眼!
熟悉前端的小伙伴可能會馬上聯想到,鼠標操作有按下和釋放的過程,我們屏幕操作也有對應的控制:
pyautogui.mouseUp() #釋放
pyautogui.mouseDown() #點擊 只需要輸入鍵就可
# 鼠標按下 pyautogui.mouseDown() # 鼠標釋放 pyautogui.mouseUp()
pyautogui.dragTo() #絕對位置拖動
pyautogui.dragRel() #相對位置拖動
例:pyautogui.dragRel(-100,200,duration=0.5,button=‘right’)
我們可以控制鼠標拖動到指定坐標位置,并且設置操作時間和按鍵:
pyautogui.dragTo(100,300,duration=1,button='right')
這個運行效果和前面移動類似。
根據前面移動的經驗,我們也有按照方向拖動鼠標:
pyautogui.dragRel(100,300,duration=4,button='left')
在桌面操作中,我們有時候需要滾動鼠標到達向上或者向下的位置,這時候我們可以使用 scroll
這個函數來控制:
pyautogui.scroll() #(,x,y) 滑動距離(+上 , -下),位置
pyautogui.scroll(30000)
參數是整數,表示向上或向下滾動多少個單位,這個單位根據不同的操作系統可能不一樣。如果向上滾動,傳入正整數,向下滾動傳入負整數。
pyautogui.keyDown() #模擬按鍵放下,內容為按鍵符
pyautogui.keyUp() #模擬按鍵松開
pyautogui.press() #模擬一次按鍵過程,即keyDown和keyUP的組合
pyautogui.hotkey() #press一樣 區別:可以組合按鍵
pyautogui.typewrite() #模擬鍵盤輸出內容
舉個例子,大家平時輸入感嘆號(!)是怎么操作鍵盤的?
按住 shift 按鍵,然后再按住 1 按鍵,就可以了。用pyautogui
控制就是:
pyautogui.keyDown('shift') pyautogui.press('1') pyautogui.keyUp('shift')
運行上面的代碼,如果你的鼠標是放在編輯框中,你會得到一個感嘆號!
我們還可以直接輸出內容:
pyautogui.typewrite('python', 1)
第一個參數是輸出的內容,第二個參數是間隔時間,單位是秒。
運行上面代碼,你的編輯器里面就會每隔1秒鐘按順序輸出 python 的6個字母。
有時我們需要輸入鍵盤的一些特殊的符號按鍵,比如 換行、方向鍵等,這些有相對應的鍵盤字符串表示:
pyautogui.typewrite(['p','y','t','h','o','n','enter']) pyautogui.typewrite(['p','y','t','h','o','n',' '])
運行上面代碼,編輯器里面就會輸出 python 之后換行。
其他特殊按鍵對應的字符串請參考官方說明。
如果我要復制一個內容,大部分情況下會使用快鍵鍵 ctrl + c,按照上面講的,我們應該這么實現:
pyautogui.keyDown('ctrl') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('ctrl')
實現的效果和上面的4行代碼相同。
鍵盤字符串 說明
enter(或return 或 \n) 回車
esc ESC鍵
shiftleft, shiftright 左右SHIFT鍵
altleft, altright 左右ALT鍵
ctrlleft, ctrlright 左右CTRL鍵
tab (\t) TAB鍵
backspace, delete BACKSPACE 、DELETE鍵
pageup, pagedown PAGE UP 和 PAGE DOWN鍵
home, end HOME 和 END鍵
up, down, left,right 箭頭鍵
f1, f2, f3…. f12 F1…….F12鍵
volumemute, volumedown,volumeup 聲音變大變小靜音(有些鍵盤沒有)
pause PAUSE鍵,暫停鍵
capslock CAPS LOCK 鍵
numlock NUM LOCK 鍵
scrolllock SCROLLLOCK 鍵
insert INSERT鍵
printscreen PRINT SCREEN鍵
winleft, winright Win鍵(windows )
command command鍵(Mac OS X )
option option(Mac OS X)
我們先來假設一個場景:我現在要在屏幕上找到一個紅色的點,你會怎么做?通常的做法是拿到這個紅色點的顏色值,然后再對屏幕上的點逐個進行比較,直到找到為止。
pyautogui
為我們這個操作場景提供了支持,分別有三個函數可以完成這三件事情。
img = pyautogui.screenshot() #默認是全屏,可是輸入截屏大小
img.save(‘img.jpg’)
pyautogui.screenshot(‘image’,region=(x,y,w,h) # 返回屏幕的截圖,是一個Pillow的image對象
pyautogui.pixelMatchesColor(500,500,(12,120,400)) # 是一個對比函數,對比的是屏幕上(500,500)這一點像素的顏色,與所給的元素是否相同;
pyautogui.locateCenterOnScreen(‘image’, region=(x,y,w,h) ) #圖片匹配功能,查找image圖片在屏幕中的位置,region限制查找范圍
im = pyautogui.screenshot() im.save('screenshot.png') rgb = im.getpixel((100, 500)) print(rgb) match = pyautogui.pixelMatchesColor(500,500,(12,120,400)) print(match)
第一個是獲取屏幕截圖函數,它可以返回一個 Pillow 的 image 對象; 第二個是獲取屏幕截圖中指定坐標點的顏色,返回 rgb 顏色值;第三個是將指定坐標點的顏色和目標的顏色進行比對,返回布爾值。
我們再來升級一下需求:
我現在要在屏幕上找到 edge 瀏覽器的圖標,你會怎么做?
通常的做法是先知道 edge 瀏覽器的圖標長啥樣,是綠色還是藍色,是胖的還是瘦的,對吧?然后再在屏幕上去進行圖標的匹配,直到找到一個圖標跟我們目標圖標一樣,就得到了結果。
于是,我們的代碼如下:
# 圖像識別(一個) oneLocation = pyautogui.locateOnScreen('1.png') print(oneLocation) # 圖像識別(多個) allLocation = pyautogui.locateAllOnScreen('1.png') print(list(allLocation))
你可以在桌面上將某個應用的圖標截取下來,保存為圖片,然后使用上面幾行代碼來識別,識別成功,你會返回類似下面的結果:
Box(left=20, top=89, width=33, height=34) [Box(left=20, top=89, width=33, height=34)]
這就是圖片在桌面的位置,如果找不到圖片,就會返回 None。
當你在模擬一個桌面操作的時候,如果有分支操作需要根據實際情況來判斷,你是不是需要有一個地方可以讓你選擇走哪個分支?
pyautogui
貼心地考慮到了這種情況,你可以通過彈出一個選擇框來中斷當前的操作,選擇操作分支。
pyautogui.alert(text=,title=,button=) #按鈕框 文本,標題,按鈕名
pyautogui.confirm(text=,title=,buttons=) #組合按鈕框(多個按鈕)
pyautogui.prompt(text=,title=,default=) #輸入框 #文本,標題,默認文字
pyautogui.password(text=,title=,default=,mask=) #密碼輸入框 #輸入框 #文本,標題,默認文字,掩碼樣式
pyautogui.mouseInfo() #獲取鼠標的信息
way = pyautogui.confirm('領導,該走哪條路?', buttons=['農村路', '水路', '陸路']) print(way)
這里就是我們 HTML 頁面的 confirm 選擇框,選擇了選項之后,我們可以獲取到選擇的選項,然后基于這個選項做判斷,進入相應的操作分支。
除了選擇確認框之外,還有其他一些提示信息框:
# 警告框 alert = pyautogui.alert(text='警告!敵軍來襲!', title='警告框') print(alert) # 密碼框 password = pyautogui.password('請輸入密碼') print(password) # 普通輸入框 input = pyautogui.prompt('請輸入指令:') print(input)
pyautogui
的基本知識就給大家介紹到這里,這個 python 模塊的功能十分強大,函數都非常簡單,對 python 初學者比較友好。學了這些基本知識之后,你可以運用這些基本知識的組合,去實現一些有趣的桌面自動化操作,快去嘗試一把吧!
我們通過今天的基礎知識的學習,我們可以通過
pyautogui
+PIL
結合來實現網頁自動點贊的實戰練習。
我們先介紹一個PIL庫下一個裁剪圖片的函數crop。
使用PIL裁切圖片使用PIL需要引用Image,使用Image的open(file)方法可以返回打開的圖片,使用crop((x1,y1,x2,y2))
方法可以對圖片做裁切。
該區域是一個元組,(x1,y1)
是圖片左上角的坐標,(x2,y2)
是圖片右下角的坐標。
Python Imaging Library 使用左上角為 (0, 0)的坐標系統。
首先我們要知道點贊的圖片的樣子
# 截取整個屏幕 im=pyautogui.screenshot() # 截取點贊圖片 om=im.crop((1754,595,1803,631)) #將圖片保存供pyautogui.locateOnScreen()使用 om.save("dianzan.png")
根據截取的屏幕僅截取帶贊的手勢圖片,可以用
pyautogui.mouseInfo()
獲取圖片的位置(1754,595,1803,631)
或者通過pyautogui.location()來確定首尾坐標
在當前目錄下得到如下圖片。
# 點贊函數 def zan(count): #為了防止一直運行下去,點贊次數由自己定義 time.sleep(0.5) # 尋找剛才保存點贊手勢圖片 xy = pyautogui.locateOnScreen('dianzan.png') # 尋找圖片的中心 center = pyautogui.center(xy) # 點贊 pyautogui.click(center) print('點贊成功') count = 3 # 點贊次數 while range(count): if pyautogui.locateOnScreen('dianzan.png'): zan(count) # 調用點贊函數 count-=1 else: #本頁沒有圖片后,滾動鼠標; pyautogui.scroll(-500) print('沒有找到目標,屏幕下滾~') count -= 1 print('點贊結束!')
未點贊之前的圖片是這樣的:
自動點贊之后:
是不是很厲害呢?其實pyautogui
還可以做很多東西,比如說自動發信息,其原理還是不變的,找到對應的位置,輸入內容,發送就可以了,在這里我就不演示啦!有興趣的可以去試試哦~~~
完整代碼
from PIL import Image import pyautogui import time # 截取整個屏幕 im=pyautogui.screenshot() # 截取點贊圖片 om=im.crop((1754,595,1803,631)) #將圖片保存供pyautogui.locateOnScreen()使用 om.save("dianzan.png") # 點贊函數 def zan(count): #為了防止一直運行下去,點贊次數由自己定義 time.sleep(0.5) # 尋找剛才保存點贊手勢圖片 xy = pyautogui.locateOnScreen('dianzan.png') # 尋找圖片的中心 center = pyautogui.center(xy) # 點贊 pyautogui.click(center) print('點贊成功') count = 3 # 點贊次數 while range(count): if pyautogui.locateOnScreen('dianzan.png'): zan(count) # 調用點贊函數 count-=1 else: #本頁沒有圖片后,滾動鼠標; pyautogui.scroll(-500) print('沒有找到目標,屏幕下滾~') count -= 1 print('點贊結束!'
到此,相信大家對“Python自動操作GUI之PyAutoGUI怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。