python-pyautogui控制鼠標鍵盤自動操作


第一步:

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),執行豎直滾動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM