掌握自動化操作工具——介紹Python庫PyAutoGUI

引言:
在現(xiàn)代科技時代,自動化操作成為提高工作效率和減輕重復性工作負擔的重要手段。而Python作為一門強大而靈活的編程語言,提供了豐富的庫和工具來實現(xiàn)各種自動化任務。本文將重點介紹Python庫PyAutoGUI,它是一個用于模擬鼠標和鍵盤操作的工具,可以幫助我們實現(xiàn)自動化操作。讓我們一起來探索PyAutoGUI的強大功能和用法。
什么是PyAutoGUI?
簡介:PyAutoGUI是一個Python庫,它允許我們通過編程方式模擬鼠標和鍵盤的操作,實現(xiàn)自動化任務。
安裝:通過pip命令可以輕松安裝PyAutoGUI,確保你的Python環(huán)境已經正確配置。
PyAutoGUI的主要功能
鼠標操作:PyAutoGUI可以模擬鼠標移動、點擊、拖拽等操作,可以控制鼠標的位置和點擊的坐標。
鍵盤操作:PyAutoGUI可以模擬鍵盤按鍵和組合鍵的操作,如按下和釋放按鍵、輸入文本等。
屏幕操作:PyAutoGUI可以獲取屏幕的大小、截屏、查找指定圖像的位置等。
延時控制:PyAutoGUI可以控制鼠標和鍵盤操作的延時,以確保操作的正確性和穩(wěn)定性。
使用PyAutoGUI實現(xiàn)自動化任務
導入庫和初始化:導入PyAutoGUI庫,并進行初始化設置,如延時時間等。
模擬鼠標操作:使用PyAutoGUI的鼠標操作函數(shù),模擬鼠標移動、點擊、拖拽等操作??梢越Y合屏幕坐標和圖像識別等技術來實現(xiàn)更復雜的操作。
模擬鍵盤操作:使用PyAutoGUI的鍵盤操作函數(shù),模擬鍵盤按鍵和組合鍵的操作??梢詫崿F(xiàn)自動化的文本輸入、快捷鍵操作等。
屏幕操作和圖像識別:使用PyAutoGUI獲取屏幕信息,如屏幕大小、截屏和查找圖像位置等??梢杂脕碜詣踊R別和操作特定的圖像場景。
錯誤處理和異常處理:在使用PyAutoGUI過程中,要注意異常處理和錯誤處理,以確保程序的健壯性和穩(wěn)定性。
PyAutoGUI的應用場景
自動化測試:PyAutoGUI可以模擬用戶的操作,用于自動化測試各種軟件和系統(tǒng)的功能。
數(shù)據(jù)采集和處理:PyAutoGUI可以幫助自動化從網頁或應用程序中采集數(shù)據(jù),并進行處理和分析。
軟件演示和教程錄制:PyAutoGUI可以用于自動化演示軟件的功能和操作,錄制教程視頻等。
游戲輔助工具:PyAutoGUI可以用來制作游戲輔助工具,自動化完成一些重復性操作。
結論:
PyAutoGUI是一個方便且功能強大的Python庫,用于實現(xiàn)自動化操作,無論是自動化測試、數(shù)據(jù)采集還是輔助工具開發(fā),PyAutoGUI都是一個強大而實用的工具。通過熟練掌握PyAutoGUI,我們可以大幅提升工作效率,實現(xiàn)自動化操作的便利性和穩(wěn)定性。讓我們一起開始探索PyAutoGUI吧!
代碼教程
控制功能
控制鼠標鍵盤使用的模塊為:pyautogui,這個模塊操作起鼠標鍵盤的時候,非常的迅速,而且如果該模塊控制了鼠標后,程序比較難關閉,這時我們有兩個方法專門針對以上的情況:
自動防故障功能
pyautogui.FAILSAFE =False
默認這項功能為True, 這項功能意味著:當鼠標的指針在屏幕的最坐上方,程序會報錯;目的是為了防止程序無法停止;
停頓功能
pyautogui.PAUSE = 1 ? ?
意味著所有pyautogui的指令都要暫停一秒;其他指令不會停頓;這樣做,可以防止鍵盤鼠標操作太快;
鼠標操作
控制鼠標移動
獲得屏幕分辨率
# 返回所用顯示器的分辨率;?
# 輸出:Size(width=1920, height=1080)?
print(pyautogui.size())?
width,height = pyautogui.size()?
print(width,height) # 1920 1080
移動鼠標
pyautogui.moveTo(100,300,duration=1) ??
# 按方向移動,左右正負值對應右左,上下正負值對應下上?
# moveRel():這是PyAutoGUI庫中的一個函數(shù),用于模擬相對于當前鼠標位置的移動操作。?
# 第一個參數(shù)是左右移動像素值,第二個是上下,向右移動100px,向下移動500px, 這個過程持續(xù) 1 秒鐘;?
pyautogui.moveRel(100,500,duration=1) ?
獲取鼠標位置
print(pyautogui.position()) ??
# 得到當前鼠標位置;輸出:Point(x=200, y=800)
控制鼠標點擊
# 點擊鼠標?
pyautogui.click(10,10)? ?# 鼠標點擊指定位置,默認左鍵?
pyautogui.click(10,10,button='left')? # 單擊左鍵?
pyautogui.click(1000,300,button='right')? # 單擊右鍵?
pyautogui.click(1000,300,button='middle') ?# 單擊中間# 雙擊鼠標 pyautogui.doubleClick(10,10)? # 指定位置,雙擊左鍵?
pyautogui.rightClick(10,10) ? # 指定位置,雙擊右鍵?
pyautogui.middleClick(10,10) ?# 指定位置,雙擊中鍵
# 點擊 & 釋放?
pyautogui.mouseDown()? ?# 鼠標按下?
pyautogui.mouseUp() ? ?# 鼠標釋放
控制鼠標拖動
控制鼠標滾動
控制鼠標滾動的函數(shù)是scroll(), 傳入一個整數(shù)的參數(shù),說明向上或向下滾動多少個單位;單位根據(jù)操作系統(tǒng)不同而不同;
# 向上滾動300個單位;?
pyautogui.scroll(300)
屏幕處理
獲取屏幕截圖
我們控制鼠標的操作,不能盲目的進行,所以我們需要監(jiān)控屏幕上的內容,從而決定要不要進行對應的操作, pyautogui 提供了一個方法screenshot(),可以返回一個Pillow的image對象;
這里有三個常用函數(shù):
im = pyautogui.screenshot():返回屏幕的截圖,是一個Pillow的image對象
im.getpixel((500, 500)):返回im對象上,(500,500)這一點像素的顏色,是一個RGB元組
pyautogui.pixelMatchesColor(500,500,(12,120,400)) :是一個對比函數(shù),對比的是屏幕上(500,500)這一點像素的顏色,與所給的元素是否相同;
im = pyautogui.screenshot() im.save('屏幕截圖.png')# screenshot()返回一個Pillow的image對象 im = pyautogui.screenshot() # 輸出(500,500)像素點的顏色,一個RGB元組 print(im.getpixel((500, 500))) # (45, 42, 46) # 判斷顏色是否匹配 print(pyautogui.pixelMatchesColor(500, 500, (12, 120, 400)))
識別圖像
首先,我們需要先獲得一個屏幕快照,例如我們想要點贊,我們就先把大拇指的圖片保存下來;
然后使用函數(shù):locateOnScreen(‘zan.png’) ,
如果可以找到圖片,則返回圖片的位置,如:Box(left=25, top=703, width=22, height=22);
如果找不到圖片,則返回None;
如果,屏幕上有多處圖片可以匹配,則需要使用locateAllOnScreen(‘zan.png’) ,
如果匹配到多個值,則返回一個list,參考如下:
# 圖像識別(一個)?
btm = pyautogui.locateOnScreen('贊.png') print(btm) ??
# Box(left=1200, top=350, width=50, height=50)?
# 圖像識別(多個)?
btm = pyautogui.locateAllOnScreen('贊.png')?
print(list(btm)) ??
# [Box(left=1200, top=350, width=50, height=50), Box(left=25, top=594, width=50, height=50)]
pyautogui.center((left, top, width, height)) 返回指定位置的中心點;這樣,我們就可以再配合鼠標操作點擊找到圖片的中心;
鍵盤輸入
鍵盤輸入函數(shù)
# 模擬按鍵按下;?
pyautogui.keyDown('shift')?
# 模擬按鍵釋放;?
pyautogui.keyUp('shift')?
# 就是調用keyDown() & keyUp(),模擬一次按鍵?
pyautogui.press('4')?
# 第一參數(shù)是輸入內容,第二個參數(shù)是每個字符間的間隔時間;?
pyautogui.typewrite('this',0.5)?
# typewrite 還可以傳入單字母的列表;
pyautogui.typewrite(['T','h','i','s'])
# 輸出: $ pyautogui.keyDown('shift') ? ?
# 按下shift pyautogui.press('4') ? ?
# 按下 4 pyautogui.keyUp('shift') ??
# 釋放 shift# 緩慢的輸出$:?
pyautogui.typewrite('$$$$', 0.5)
鍵盤特殊按鍵
有時我們需要輸入一些特殊的按鍵,比如向左的箭頭,這些有相對應的鍵盤字符串表示,例如:
# 輸出:This pyautogui.typewrite(['T','i','s','left','left','h',])
解釋:這里的left就是向左的箭頭;諸如此類的鍵盤字符串,還有很多,參考下表:
鍵盤字符串
說明

如果我們需要模擬復制的快捷鍵 ctrl + c ,如果用前面的方法,則代碼為:
pyautogui.keyDown('ctrl')?
pyautogui.keyDown('c')?
pyautogui.keyUp('c')?
pyautogui.keyUp('ctrl')
快捷鍵的按鍵與釋放順序非常關鍵,這時我們可以使用 pyautogui.hotkey(),這個函數(shù)可以接受多個參數(shù),按傳入順序按下,再按照相反順序釋放。上述快捷鍵 ctrl + c ,可以將代碼變?yōu)椋?/span>
pyautogui.hotkey('ctrl','c')
提示信息框
提示框/警告框
import pyautogui a = pyautogui.alert(text='This is an alert box.', title='Test') print(a)
輸出如下圖:點擊確定,返回值為‘OK’

選擇框
import pyautogui a = pyautogui.confirm('選擇一項', buttons=['A', 'B', 'C']) print(a)

輸出如下圖:點擊B選項,返回值為‘B’
密碼輸入
import pyautogui a = pyautogui.password('Enter password (text will be hidden)') print(a)
輸出如下圖:輸入密碼,顯示為密文,點擊OK,返回值為剛剛輸入的值;

普通輸入
import pyautogui a = pyautogui.prompt('請輸入一個數(shù)字:') print(a)

輸出如下圖:顯示為明文,點擊OK,返回值為剛剛輸入的值;
實例
鼠標控制鼠標畫一個正方形
for i in range(2): ? # 畫正方形 ? ?pyautogui.moveTo(200,200,duration=1) ? ?pyautogui.moveTo(200,400,duration=1) ? ?pyautogui.moveTo(400,400,duration=0.5) ? ?pyautogui.moveTo(400,200,duration=2)
獲取鼠標的實時位置
import pyautogui import time try: ? ?while True: ? ? ? ?x,y = pyautogui.position() ? ? ? ?posi = 'x:' + str(x).rjust(4) + ' y:' + str(y).rjust(4) ? ? ? ?print('\r',posi,end='') ? ? ? ?time.sleep(0.5) except KeyboardInterrupt: ? ?print('已退出!')
顯示效果:

獲取鼠標位置與所在位置的顏色
import pyautogui import time try: ? ?while True: ? ? ? ?x,y = pyautogui.position() ? ? ? ?rgb = pyautogui.screenshot().getpixel((x,y)) ? ? ? ?posi = 'x:' + str(x).rjust(4) + ' y:' + str(y).rjust(4) + ' ?RGB:' + str(rgb) ? ? ? ?print('\r',posi,end='') ? ? ? ?time.sleep(0.5) except KeyboardInterrupt: ? ?print('已退出!')
顯示效果:
