python-pyautogui控制鼠標(biāo)鍵盤自動操作

第一步:

pip install?pyautogui

安裝pyautogui庫。

第二步:

基本使用

screenWidth, screenHeight=pyautogui.size()# 屏幕尺寸mouseX, mouseY=pyautogui.position()# 返回當(dāng)前鼠標(biāo)位置,注意坐標(biāo)系統(tǒng)中左上方是(0, 0)

為了保持用戶可以隨時干預(yù)鼠標(biāo)鍵盤的動作,比較好的方法是添加停頓,或者強(qiáng)制結(jié)束,否則想停了鼠標(biāo)還一直在晃就會失控,下面是兩種對應(yīng)的設(shè)置

pyautogui.PAUSE=1.5# 每個函數(shù)執(zhí)行后停頓1.5秒

pyautogui.FAILSAFE=True# 鼠標(biāo)移到左上角會觸發(fā)FailSafeException,因此快速移動鼠標(biāo)到左上角也可以停止

鼠標(biāo)操作

移動

w, h=pyautogui.size()

pyautogui.moveTo(w/2, h/2)# 基本移動

pyautogui.moveTo(100,200, duration=2)# 移動過程持續(xù)2s完成

pyautogui.moveTo(None,500)# X方向不變,Y方向移動到500

pyautogui.moveRel(-40,500)# 相對位置移動

拖動

# 點擊+向下拖動

pyautogui.click(941,34, button='left')pyautogui.dragRel(0,100, button='left', duration=5)

點擊

pyautogui.click(300,400, button='right')# 包含了move的點擊,右鍵

pyautogui.click(clicks=2, interval=0.25)# 雙擊,間隔0.25s

滾輪

pyautogui.scroll(-10)

鍵盤操作

輸入文字

點擊對話框輸入文字即可,不過中文好像不行

pyautogui.click(1279,374)pyautogui.typewrite('hello world!')

精確控制鍵盤

以下是手動輸入中文的方法

pyautogui.press('shift')# 切換輸入法的中英文

pyautogui.press(['#',' '])# press 可以對單個字符或者列表進(jìn)行操作

pyautogui.press(['x','i','a','o'])

pyautogui.press(['y','u'])

pyautogui.press(['w','e','i'])

pyautogui.press(['l','a','n'])

pyautogui.press(' ')

hotKey

pyautogui.hotkey('shift','a')# 可以使用組合鍵,本質(zhì)上是

'''pyautogui.keyDown('shift')

pyautogui.keyDown('a')

pyautogui.keyUp('shift')

pyautogui.keyUp('a')'''

消息彈窗函數(shù)

如果你需要消息彈窗,通過單擊OK暫停程序,或者向用戶顯示一些信息,消息彈窗函數(shù)就會有類似JavaScript的功能:

In?[?]:

pyautogui.alert('這個消息彈窗是文字+OK按鈕')

pyautogui.confirm('這個消息彈窗是文字+OK+Cancel按鈕')

pyautogui.prompt('這個消息彈窗是讓用戶輸入字符串,單擊OK')

Out[?]:

print(pyautogui.alert('這個消息彈窗是文字+OK按鈕'))

print(pyautogui.confirm('這個消息彈窗是文字+OK+Cancel按鈕'))

str1 = pyautogui.confirm(text='1-10', title='test', buttons=range(10))

print(str1)

str1 =pyautogui.prompt('這個消息彈窗是讓用戶輸入字符串,單擊OK')

print(str1)

str1 = pyautogui.password(text='密碼', title='填', default='123', mask='*')

print(str1)

在prompt()函數(shù)中,如果用戶什么都不輸入,就會返回None。

截屏函數(shù)

PyAutoGUI用Pillow/PIL庫實現(xiàn)圖片相關(guān)的識別和操作。

在Linux里面,你必須執(zhí)行sudo apt-get install scrot來使用截屏特性。

In?[?]:

#? 返回一個Pillow/PIL的Image對象pyautogui.screenshot()pyautogui.screenshot('foo.png')

如果你有一個圖片文件想在上面做點擊操作,你可以用locateOnScreen()函數(shù)來定位。

In?[?]:

#? 返回(最左x坐標(biāo),最頂y坐標(biāo),寬度,高度)

pyautogui.locateOnScreen('pyautogui/looks.png')

Out[?]:

(0, 1040, 48, 40)

locateAllOnScreen()函數(shù)會尋找所有相似圖片,返回一個生成器:

In?[?]:

for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):

????print(i)

(0, 1040, 48, 40)

In?[?]:

list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))

Out[?]:

[(0, 1040, 48, 40)]

locateCenterOnScreen()函數(shù)會返回圖片在屏幕上的中心XY軸坐標(biāo)值:

In?[?]:

pyautogui.locateCenterOnScreen('pyautogui/looks.png')

Out[?]:

(24, 1060)

如果沒找到圖片會返回None。

定位比較慢,一般得用1~2秒

緩動/漸變(Tween / Easing)函數(shù)

緩動/漸變函數(shù)的作用是讓光標(biāo)的移動更炫。如果你不需要用到的話,你可以忽略這些。

緩動/漸變函數(shù)可以改變光標(biāo)移動過程的速度和方向。通常鼠標(biāo)是勻速直線運動,這就是線性緩動/漸變函數(shù)。PyAutoGUI有30種緩動/漸變函數(shù),可以通過pyautogui.ease*?查看。其中,pyautogui.easeInQuad()函數(shù)可以用于moveTo(),moveRel(),dragTo()和dragRel()函數(shù),光標(biāo)移動呈現(xiàn)先慢后快的效果,整個過程的時間還是和原來一樣。而pyautogui.easeOutQuad函數(shù)的效果相反:光標(biāo)開始移動很快,然后慢慢減速。pyautogui.easeOutElastic是彈簧效果,首先越過終點,然后再反彈回來。例如:

In?[?]:

#? 開始很慢,不斷加速

pyautogui.moveTo(100,100,2,pyautogui.easeInQuad)

#? 開始很快,不斷減速

pyautogui.moveTo(100,100,2,pyautogui.easeOutQuad)

#? 開始和結(jié)束都快,中間比較慢

pyautogui.moveTo(100,100,2,pyautogui.easeInOutQuad)

#? 一步一徘徊前進(jìn)

pyautogui.moveTo(100,100,2,pyautogui.easeInBounce)

#? 徘徊幅度更大,甚至超過起點和終點

pyautogui.moveTo(100,100,2,pyautogui.easeInElastic)

這些效果函數(shù)是模仿Al Sweigart的PyTweening模塊,可以直接使用,不需要額外安裝。

如果你想創(chuàng)建自己的效果,也可以定義一個函數(shù),其參數(shù)是(0.0,1.0),表示起點和終點,返回值是介于[0.0,1.0]之間的數(shù)。

鼠標(biāo)單擊

click()函數(shù)模擬單擊鼠標(biāo)左鍵一次的行為。例如:

In?[?]:

pyautogui.click()

如果單機(jī)之前要先移動,可以把目標(biāo)的XY坐標(biāo)值傳入函數(shù):

In?[?]:

#? 先移動到(100, 200)再單擊pyautogui.click(x=100,y=200,duration=2)

可以通過button參數(shù)設(shè)置left,middle和right三個鍵。例如:

In?[?]:

pyautogui.click(button='right')

要做多次單擊可以設(shè)置clicks參數(shù),還有interval參數(shù)可以設(shè)置每次單擊之間的時間間隔。例如:

In?[?]:

#? 雙擊左鍵

pyautogui.click(clicks=2)

#? 兩次單擊之間停留0.25秒

pyautogui.click(clicks=2,interval=0.25)

#? 三擊右鍵

pyautogui.click(button='right',clicks=2,interval=0.25)

為了操作方便,PyAutoGUI提供了doubleClick(),tripleClick()和rightClick()來實現(xiàn)雙擊、三擊和右擊操作。

鼠標(biāo)按下和松開函數(shù)

mouseDown()和mouseUp()函數(shù)可以實現(xiàn)鼠標(biāo)按下和鼠標(biāo)松開的操作。兩者參數(shù)相同,有x,y和button。例如:

In?[?]:

#? 鼠標(biāo)左鍵按下再松開

pyautogui.mouseDown();

pyautogui.mouseUp()

#? 按下鼠標(biāo)右鍵

pyautogui.mouseDown(button='right')

#? 移動到(100, 200)位置,然后松開鼠標(biāo)右鍵

pyautogui.mouseUp(button='right',x=100,y=200)

滾輪滾動函數(shù)

鼠標(biāo)滾輪滾動可以用scroll()函數(shù)和clicks次數(shù)參數(shù)來模擬。不同平臺上的clicks次數(shù)不太一樣。還有x和y參數(shù)可以在滾動之前定位到(x, y)位置。例如:

In?[?]:

#? 向上滾動10格

pyautogui.scroll(10)

#? 向下滾動10格

pyautogui.scroll(-10)

#? 移動到(100, 100)位置再向上滾動10格

pyautogui.scroll(10,x=100,y=100)

在OS X和Linux平臺上,PyAutoGUI還可以用hscroll()實現(xiàn)水平滾動。例如:

In?[?]:

#? 向右滾動10格

pyautogui.hscroll(10)

#? 向左滾動10格

pyautogui.hscroll(-10)

scroll()函數(shù)是vscroll()的一個包裝(wrapper),執(zhí)行豎直滾動。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容