第一步:
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í)行豎直滾動。