第一步:
pip install pyautogui
安裝pyautogui庫。
第二步:
基本使用
screenWidth, screenHeight=pyautogui.size()# 屏幕尺寸mouseX, mouseY=pyautogui.position()# 返回當前鼠標位置,注意坐標系統中左上方是(0, 0)
為了保持用戶可以隨時干預鼠標鍵盤的動作,比較好的方法是添加停頓,或者強制結束,否則想停了鼠標還一直在晃就會失控,下面是兩種對應的設置
pyautogui.PAUSE=1.5# 每個函數執行后停頓1.5秒
pyautogui.FAILSAFE=True# 鼠標移到左上角會觸發FailSafeException,因此快速移動鼠標到左上角也可以停止
####鼠標操作
移動
w, h=pyautogui.size()
pyautogui.moveTo(w/2, h/2)# 基本移動
pyautogui.moveTo(100,200, duration=2)# 移動過程持續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 可以對單個字符或者列表進行操作
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')# 可以使用組合鍵,本質上是
'''pyautogui.keyDown('shift')
pyautogui.keyDown('a')
pyautogui.keyUp('shift')
pyautogui.keyUp('a')'''
消息彈窗函數
如果你需要消息彈窗,通過單擊OK暫停程序,或者向用戶顯示一些信息,消息彈窗函數就會有類似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()函數中,如果用戶什么都不輸入,就會返回None。
截屏函數
PyAutoGUI用Pillow/PIL庫實現圖片相關的識別和操作。
在Linux里面,你必須執行sudo apt-get install scrot來使用截屏特性。
In [ ]:
# 返回一個Pillow/PIL的Image對象pyautogui.screenshot()pyautogui.screenshot('foo.png')
如果你有一個圖片文件想在上面做點擊操作,你可以用locateOnScreen()函數來定位。
In [ ]:
返回(最左x坐標,最頂y坐標,寬度,高度)
pyautogui.locateOnScreen('pyautogui/looks.png')
Out[ ]:
(0, 1040, 48, 40)
locateAllOnScreen()函數會尋找所有相似圖片,返回一個生成器:
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()函數會返回圖片在屏幕上的中心XY軸坐標值:
In [ ]:
pyautogui.locateCenterOnScreen('pyautogui/looks.png')
Out[ ]:
(24, 1060)
如果沒找到圖片會返回None。
定位比較慢,一般得用1~2秒
緩動/漸變(Tween / Easing)函數
緩動/漸變函數的作用是讓光標的移動更炫。如果你不需要用到的話,你可以忽略這些。
緩動/漸變函數可以改變光標移動過程的速度和方向。通常鼠標是勻速直線運動,這就是線性緩動/漸變函數。PyAutoGUI有30種緩動/漸變函數,可以通過pyautogui.ease*?查看。其中,pyautogui.easeInQuad()函數可以用於moveTo(),moveRel(),dragTo()和dragRel()函數,光標移動呈現先慢后快的效果,整個過程的時間還是和原來一樣。而pyautogui.easeOutQuad函數的效果相反:光標開始移動很快,然后慢慢減速。pyautogui.easeOutElastic是彈簧效果,首先越過終點,然后再反彈回來。例如:
In [ ]:
# 開始很慢,不斷加速
pyautogui.moveTo(100,100,2,pyautogui.easeInQuad)
# 開始很快,不斷減速
pyautogui.moveTo(100,100,2,pyautogui.easeOutQuad)
# 開始和結束都快,中間比較慢
pyautogui.moveTo(100,100,2,pyautogui.easeInOutQuad)
# 一步一徘徊前進
pyautogui.moveTo(100,100,2,pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超過起點和終點
pyautogui.moveTo(100,100,2,pyautogui.easeInElastic)
這些效果函數是模仿Al Sweigart的PyTweening模塊,可以直接使用,不需要額外安裝。
如果你想創建自己的效果,也可以定義一個函數,其參數是(0.0,1.0),表示起點和終點,返回值是介於[0.0,1.0]之間的數。
鼠標單擊
click()函數模擬單擊鼠標左鍵一次的行為。例如:
In [ ]:
pyautogui.click()
如果單機之前要先移動,可以把目標的XY坐標值傳入函數:
In [ ]:
# 先移動到(100, 200)再單擊pyautogui.click(x=100,y=200,duration=2)
可以通過button參數設置left,middle和right三個鍵。例如:
In [ ]:
pyautogui.click(button='right')
要做多次單擊可以設置clicks參數,還有interval參數可以設置每次單擊之間的時間間隔。例如:
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()來實現雙擊、三擊和右擊操作。
鼠標按下和松開函數
mouseDown()和mouseUp()函數可以實現鼠標按下和鼠標松開的操作。兩者參數相同,有x,y和button。例如:
In [ ]:
# 鼠標左鍵按下再松開
pyautogui.mouseDown();
pyautogui.mouseUp()
# 按下鼠標右鍵
pyautogui.mouseDown(button='right')
# 移動到(100, 200)位置,然后松開鼠標右鍵
pyautogui.mouseUp(button='right',x=100,y=200)
滾輪滾動函數
鼠標滾輪滾動可以用scroll()函數和clicks次數參數來模擬。不同平台上的clicks次數不太一樣。還有x和y參數可以在滾動之前定位到(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()實現水平滾動。例如:
In [ ]:
# 向右滾動10格
pyautogui.hscroll(10)
# 向左滾動10格
pyautogui.hscroll(-10)
scroll()函數是vscroll()的一個包裝(wrapper),執行豎直滾動。
