真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python自動操作GUI之PyAutoGUI怎么使用

本篇內(nèi)容主要講解“Python自動操作GUI之PyAutoGUI怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python自動操作GUI之PyAutoGUI怎么使用”吧!

專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)嵩明免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Python自動操作GUI之PyAutoGUI怎么使用

GUI控制神器

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

模塊安裝,打開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

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

導(dǎo)包

import pyautogui

鼠標(biāo)操作

鼠標(biāo)信息

  • pyautogui.position() 獲取鼠標(biāo)位置

  • pyautogui.onScreen(x,y) 判斷坐標(biāo)(x,y)是否在屏幕內(nèi),返回True,Flase
    以右上角為(0,0)點(diǎn)

鼠標(biāo)移動

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

  • pyautogui.moveTo(x,y) 絕對位置移動 ,移動到x,y

  • pyautogui.moveRel(x,y) 相對位置移動 ,從當(dāng)前位置移動

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

整個桌面是以左上角為坐標(biāo)軸的原點(diǎn),所有的操作都以這個原點(diǎn),來確定操作位置。

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

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

運(yùn)行這兩行代碼,觀察屏幕鼠標(biāo)的變化,是不是很神奇?

鼠標(biāo)點(diǎn)擊

通常,我們的鼠標(biāo)有左右兩個按鍵,高級點(diǎn)的鼠標(biāo)中間還有個按鍵。

我的鼠標(biāo)只有兩個按鍵,中間沒有按鍵,唉~
pyautogui針對這三個按鍵操作都有相應(yīng)的處理:

  • pyautogui.click()
    (100,100, clicks=2,interval=0.5,button=‘right’,duration=0.2)
    位置,點(diǎn)擊次數(shù),間隔時間,右鍵(默認(rèn)左鍵),移動間隔

  • left:左鍵 right:右鍵 middle:中鍵

# 鼠標(biāo)點(diǎn)擊,默認(rèn)左鍵
pyautogui.click(100,100)   
# 單擊左鍵
pyautogui.click(100,100,button='left')  
# 單擊右鍵
pyautogui.click(100,300,button='right') 
# 單擊中間 
pyautogui.click(100,300,button='middle')

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

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

鼠標(biāo)除了點(diǎn)擊操作,還有雙擊操作:

  • pyautogui.doubleClick() #雙擊右鍵

  • pyautogui.leftClick() #雙擊左鍵

  • pyautogui.middleClick() #雙擊中鍵

  • pyautogui.tripleClick() #雙擊屏幕

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

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

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

鼠標(biāo)點(diǎn)擊與釋放

  • pyautogui.mouseUp() #釋放

  • pyautogui.mouseDown() #點(diǎn)擊 只需要輸入鍵就可

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

鼠標(biāo)拖動

  • pyautogui.dragTo() #絕對位置拖動

  • pyautogui.dragRel() #相對位置拖動
    例:pyautogui.dragRel(-100,200,duration=0.5,button=‘right’)

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

pyautogui.dragTo(100,300,duration=1,button='right')

這個運(yùn)行效果和前面移動類似。

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

pyautogui.dragRel(100,300,duration=4,button='left')

鼠標(biāo)滾動

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

  • pyautogui.scroll() #(,x,y) 滑動距離(+上 , -下),位置

pyautogui.scroll(30000)

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

鍵盤操作

鍵盤控制

  • pyautogui.keyDown() #模擬按鍵放下,內(nèi)容為按鍵符

  • pyautogui.keyUp() #模擬按鍵松開

  • pyautogui.press() #模擬一次按鍵過程,即keyDown和keyUP的組合

  • pyautogui.hotkey() #press一樣 區(qū)別:可以組合按鍵

  • pyautogui.typewrite() #模擬鍵盤輸出內(nèi)容

舉個例子,大家平時輸入感嘆號(?。┦窃趺床僮麈I盤的?

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

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

運(yùn)行上面的代碼,如果你的鼠標(biāo)是放在編輯框中,你會得到一個感嘆號!

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

pyautogui.typewrite('python', 1)

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

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

特殊符號

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

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

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

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

快捷鍵

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

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

實(shí)現(xiàn)的效果和上面的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)

屏幕處理

獲取屏幕截屏

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

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

  • img = pyautogui.screenshot() #默認(rèn)是全屏,可是輸入截屏大小

  • img.save(‘img.jpg’)

  • pyautogui.screenshot(‘image’,region=(x,y,w,h) # 返回屏幕的截圖,是一個Pillow的image對象

  • pyautogui.pixelMatchesColor(500,500,(12,120,400)) # 是一個對比函數(shù),對比的是屏幕上(500,500)這一點(diǎn)像素的顏色,與所給的元素是否相同;

  • 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)

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

我們再來升級一下需求:

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

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

于是,我們的代碼如下:

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

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

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

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

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

信息框

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

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

  • pyautogui.alert(text=,title=,button=) #按鈕框 文本,標(biāo)題,按鈕名

  • pyautogui.confirm(text=,title=,buttons=) #組合按鈕框(多個按鈕)

  • pyautogui.prompt(text=,title=,default=) #輸入框 #文本,標(biāo)題,默認(rèn)文字

  • pyautogui.password(text=,title=,default=,mask=) #密碼輸入框 #輸入框 #文本,標(biāo)題,默認(rèn)文字,掩碼樣式

  • pyautogui.mouseInfo() #獲取鼠標(biāo)的信息

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

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

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

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

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

自動點(diǎn)贊實(shí)戰(zhàn)

我們通過今天的基礎(chǔ)知識的學(xué)習(xí),我們可以通過pyautogui+PIL結(jié)合來實(shí)現(xiàn)網(wǎng)頁自動點(diǎn)贊的實(shí)戰(zhàn)練習(xí)。

我們先介紹一個PIL庫下一個裁剪圖片的函數(shù)crop。

使用PIL裁切圖片使用PIL需要引用Image,使用Image的open(file)方法可以返回打開的圖片,使用crop((x1,y1,x2,y2))方法可以對圖片做裁切。
該區(qū)域是一個元組,(x1,y1)是圖片左上角的坐標(biāo),(x2,y2)是圖片右下角的坐標(biāo)。
Python Imaging Library 使用左上角為 (0, 0)的坐標(biāo)系統(tǒng)。
Python自動操作GUI之PyAutoGUI怎么使用

首先我們要知道點(diǎn)贊的圖片的樣子

# 截取整個屏幕
im=pyautogui.screenshot()
# 截取點(diǎn)贊圖片
om=im.crop((1754,595,1803,631)) 
#將圖片保存供pyautogui.locateOnScreen()使用
om.save("dianzan.png")

根據(jù)截取的屏幕僅截取帶贊的手勢圖片,可以用pyautogui.mouseInfo()獲取圖片的位置(1754,595,1803,631)
或者通過pyautogui.location()來確定首尾坐標(biāo)

在當(dāng)前目錄下得到如下圖片。
Python自動操作GUI之PyAutoGUI怎么使用

# 點(diǎn)贊函數(shù)
def zan(count): #為了防止一直運(yùn)行下去,點(diǎn)贊次數(shù)由自己定義
    time.sleep(0.5)
    # 尋找剛才保存點(diǎn)贊手勢圖片
    xy = pyautogui.locateOnScreen('dianzan.png')
    # 尋找圖片的中心
    center = pyautogui.center(xy)
    # 點(diǎn)贊
    pyautogui.click(center)
    print('點(diǎn)贊成功')

count = 3 # 點(diǎn)贊次數(shù)
while range(count):
    if pyautogui.locateOnScreen('dianzan.png'):
        zan(count)   # 調(diào)用點(diǎn)贊函數(shù)
        count-=1
    else:
    	#本頁沒有圖片后,滾動鼠標(biāo);
        pyautogui.scroll(-500)
        print('沒有找到目標(biāo),屏幕下滾~')
        count -= 1
print('點(diǎn)贊結(jié)束!')

未點(diǎn)贊之前的圖片是這樣的:
Python自動操作GUI之PyAutoGUI怎么使用

自動點(diǎn)贊之后:
Python自動操作GUI之PyAutoGUI怎么使用
是不是很厲害呢?其實(shí)pyautogui還可以做很多東西,比如說自動發(fā)信息,其原理還是不變的,找到對應(yīng)的位置,輸入內(nèi)容,發(fā)送就可以了,在這里我就不演示啦!有興趣的可以去試試哦~~~

完整代碼

from PIL import Image
import pyautogui
import time

# 截取整個屏幕
im=pyautogui.screenshot()
# 截取點(diǎn)贊圖片
om=im.crop((1754,595,1803,631)) 
#將圖片保存供pyautogui.locateOnScreen()使用
om.save("dianzan.png")

# 點(diǎn)贊函數(shù)
def zan(count): #為了防止一直運(yùn)行下去,點(diǎn)贊次數(shù)由自己定義
    time.sleep(0.5)
    # 尋找剛才保存點(diǎn)贊手勢圖片
    xy = pyautogui.locateOnScreen('dianzan.png')
    # 尋找圖片的中心
    center = pyautogui.center(xy)
    # 點(diǎn)贊
    pyautogui.click(center)
    print('點(diǎn)贊成功')

count = 3 # 點(diǎn)贊次數(shù)
while range(count):
    if pyautogui.locateOnScreen('dianzan.png'):
        zan(count)   # 調(diào)用點(diǎn)贊函數(shù)
        count-=1
    else:
    	#本頁沒有圖片后,滾動鼠標(biāo);
        pyautogui.scroll(-500)
        print('沒有找到目標(biāo),屏幕下滾~')
        count -= 1
print('點(diǎn)贊結(jié)束!'

到此,相信大家對“Python自動操作GUI之PyAutoGUI怎么使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


標(biāo)題名稱:Python自動操作GUI之PyAutoGUI怎么使用
瀏覽路徑:http://weahome.cn/article/jshdig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部