一、簡(jiǎn)介
PyAutoGUI是一個(gè)Python 第三方庫(kù),需要pip install 安裝?。它允許我們通過(guò)編程方式模擬鼠標(biāo)和鍵盤(pán)的操作,窗口操作,以及界面的截圖匹配。由于它是照搬人的操作,底層沒(méi)有套牢在Windows系統(tǒng),所以它可以跨平臺(tái)。
二、安裝
通過(guò)pip命令可以輕松安裝PyAutoGUI
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
三、主要功能
- 鼠標(biāo)操作:PyAutoGUI可以模擬鼠標(biāo)移動(dòng)、點(diǎn)擊、拖拽等操作,可以控制鼠標(biāo)的位置和點(diǎn)擊的坐標(biāo)。
- 鍵盤(pán)操作:PyAutoGUI可以模擬鍵盤(pán)按鍵和組合鍵的操作,如按下和釋放按鍵、輸入文本等。
- 屏幕操作:PyAutoGUI集成了pyscreeze模塊,可以直接調(diào)用函數(shù)截屏、查找指定圖像的位置等
- 延時(shí)控制:PyAutoGUI可以控制鼠標(biāo)和鍵盤(pán)操作的延時(shí),以確保操作的正確性和穩(wěn)定性。
- 窗口控制:PyautoGUI集成了pygetwindow模塊,可以直接調(diào)用函數(shù)獲取窗口信息、控制窗口大小、移動(dòng)、關(guān)閉等
3.1、基礎(chǔ)功能
獲取鼠標(biāo)當(dāng)前位置
import pyautogui
print(pyautogui.position()) # Point(x=1964, y=1338)
獲取屏幕大小?
import pyautogui
print(pyautogui.size()) # Size(width=3840, height=2160)
判斷坐標(biāo)是否在屏幕中
import pyautogui
print(pyautogui.onScreen(200, 200))
print(pyautogui.onScreen(2000, 4000))
3.2、GUI控制功能
自動(dòng)防故障功能
默認(rèn)這項(xiàng)功能為T(mén)rue,意味著:當(dāng)鼠標(biāo)的指針在屏幕的最坐上方,程序會(huì)報(bào)錯(cuò);目的是為了防止程序無(wú)法停止;
import pyautogui
print(pyautogui.FAILSAFE)
pyautogui.FAILSAFE = False
print(pyautogui.FAILSAFE)
停頓功能
這個(gè)停頓只是在用pyautogui控制鼠標(biāo)和鍵盤(pán)時(shí)生效,如果是執(zhí)行一般功能的命令,則該停頓不生效
import pyautogui
pyautogui.PAUSE = 5
pyautogui.moveTo(200, 200, duration=1);pyautogui.moveTo(2000, 1000, duration=1)
3.3、鼠標(biāo)控制功能
?控制移動(dòng)鼠標(biāo)
????????移動(dòng)到指定位置
import pyautogui
pyautogui.moveTo(100,300,duration=1) ?#(100,300)是坐標(biāo), duration 的作用是設(shè)置移動(dòng)時(shí)間,單位秒,所有的gui函數(shù)都有這個(gè)參數(shù),而且都是可選參數(shù) 相對(duì)移動(dòng),按方向移動(dòng)
? ? ? ? ?相對(duì)移動(dòng),按方向移動(dòng)
import pyautogui
pyautogui.moveRel(100,500,duration=4) ?# 第一個(gè)參數(shù)是左右移動(dòng)像素值,第二個(gè)是上下移動(dòng)像素值
控制鼠標(biāo)點(diǎn)擊
????????單擊鼠標(biāo)
import pyautogui
pyautogui.click(10,10) ?# 鼠標(biāo)點(diǎn)擊指定位置,默認(rèn)左鍵
pyautogui.click(10,10,button='left') ?# 單擊左鍵
pyautogui.click(1000,300,button='right') ?# 單擊右鍵
pyautogui.click(1000,300,button='middle') ?# 單擊中間
? ? ? ? 雙擊鼠標(biāo)
import pyautogui
pyautogui.doubleClick(10,10) ?# 指定位置,雙擊左鍵
pyautogui.rightClick(10,10) ?# 指定位置,雙擊右鍵
pyautogui.middleClick(10,10) ?# 指定位置,雙擊中鍵
????????按下和釋放分解:點(diǎn)擊&釋放
import pyautogui
pyautogui.mouseDown()
pyautogui.mouseUp() # 兩句命令相當(dāng)于pyautogui.press()
pyautogui.mouseDown(button='right') # 按下右鍵
pyautogui.mouseUp(button='right', x=100, y=200) # 移動(dòng)到(100,200),釋放右鍵
控制鼠標(biāo)拖動(dòng)
????????拖動(dòng)到指定位置
import pyautogui
pyautogui.dragTo(100,300,duration=1) ?# 將鼠標(biāo)拖動(dòng)到指定的坐標(biāo)
????????拖動(dòng)到相對(duì)位置,按方向拖動(dòng)
import pyautogui
pyautogui.dragRel(100,500,duration=4) ?# 第一個(gè)參數(shù)是左右移動(dòng)像素值,第二個(gè)是上下移動(dòng)像素值, 向右拖動(dòng)100px,向下拖動(dòng)500px, 這個(gè)過(guò)程持續(xù) 4 秒鐘
控制鼠標(biāo)滾動(dòng)
????????控制鼠標(biāo)滾動(dòng)的函數(shù)是scroll(), 傳入一個(gè)整數(shù)的參數(shù),說(shuō)明向上或向下滾動(dòng)多少個(gè)單位;單位根據(jù)操作系統(tǒng)不同而不同
import pyautogui
pyautogui.scroll(300) ?# scroll up 300 "clicks"
pyautogui.scroll(10) # scroll up 10 "clicks"
pyautogui.scroll(10, x=100, y=100) # move mouse cursor to 100, 200, then scroll up 10 "clicks"
補(bǔ)間/緩動(dòng)函數(shù)(import Pytweening)
????????指示鼠標(biāo)移動(dòng)到目標(biāo)位置時(shí)的進(jìn)度,可以使鼠標(biāo)移動(dòng)變得更漂亮
3.4、鍵盤(pán)控制功能
按鍵
import pyautogui
pyautogui.press('enter') ? # 按enter鍵,并釋放
pyautogui.press('f1')
pyautogui.press(['left', 'left', 'left'])
pyautogui.press('left', presses=3) ?# 可以設(shè)置按鍵次數(shù)
組合按鍵,按下&釋放
例如:要在按住 Shift 鍵的同時(shí)按向左箭頭鍵
import pyautogui
pyautogui.keyDown('shift') ?# 按下shift鍵
pyautogui.press('left') ?# 按左鍵,并釋放
pyautogui.keyUp('shift') ? # 釋放shift鍵
輸入字符串
import pyautogui
pyautogui.write('Hello world!', interval=0.25) # interval 每個(gè)字符輸入間隔時(shí)間
hold()上下文管理器
import pyautogui
with pyautogui.hold('shift'):
pyautogui.press(['left','left','left'])
熱鍵hotkey()函數(shù)
hotkey()可以傳遞多個(gè)按鍵字符串,這些按鍵字符串將按順序按下,然后按相反的順序釋放。
import pyautogui
pyautogui.hotkey('ctrl',?'shift',?'esc)
# 相當(dāng)于以下代碼
# pyautogui.keyDown('ctrl')
# pyautogui.keyDown('shift')
# pyautogui.keyDown('esc')
# pyautogui.keyUp('esc')
# pyautogui.keyUp('shift')
# pyautogui.keyUp('ctrl')
3.5、消息框功能
警報(bào)框
import pyautogui
pyautogui.alert(text='This is an alert box', title='Test', button='OK') ? # 顯示一個(gè)簡(jiǎn)單的消息框,其中包含文本和一個(gè)“確定”按鈕。返回button鍵的值。
確認(rèn)框/選擇框
import pyautogui
pyautogui.confirm('選擇一項(xiàng)', buttons=['A', 'B', 'C'])
pyautogui.confirm(text='',?title='',?buttons=['OK',?'N']) # 顯示一個(gè)選擇框,有多個(gè)按鍵,返回按鍵的值
提示輸入框
import pyautogui
pyautogui.prompt(text='',?title=''?,?default='')
# 顯示帶有文本輸入的消息框以及“確定”和“取消”按鈕。返回輸入的文本,如果單擊“取消”,則返回None
密碼輸入框
import pyautogui
pyautogui.password(text='', title='', default='', mask='*’)
# 顯示帶有文本輸入的消息框以及“確定”和“取消”按鈕。鍵入的字符顯示為*。返回輸入的文本,如果單擊“取消”,則返回None
3.6 桌面截圖,圖片匹配,像素點(diǎn)RGB信息
源碼,從源碼中可看到,引用了PyScreeze模塊、Pillow模塊,這兩個(gè)模塊會(huì)在安裝pyautogui模塊時(shí)一起安裝。
引用的方法是紅色框住的這些
截圖功能
import pyautogui
pyautogui.screenshot("C:\\Users\\XX\\test.png") ?
# 全屏截圖,傳遞一個(gè)文件名字符串會(huì)將截圖保存到一個(gè)文件中,并將其作為一個(gè)Image對(duì)象返回。
pyautogui.screenshot("C:\\Users\\XX\\test.png", region=(0, 0, 300, 400))? ? ?
# 非全屏截圖,可選的region關(guān)鍵字參數(shù)??梢詡鬟f一個(gè)包含要捕獲區(qū)域的左、頂、寬、高的四個(gè)整數(shù)元組
圖片匹配
import pyautogui
pyautogui.locateAll(needleImage, haystackImage, grayscale=None, region=None)
# # 返回一個(gè)生成器,用tuple轉(zhuǎn)換一下生成器,得到一個(gè)元組,元組中的每個(gè)元素是BOX類的實(shí)例對(duì)象,未匹配到則返回空元組
pyautogui.locate(needleImage, haystackImage)
# 返回值就是上圖的b[0],即BOX類的一個(gè)實(shí)例對(duì)象,如果未匹配則報(bào)異常
pyautogui.locateAllOnScreen(needleImage, minSearchTime)
# 與locateAll()相比第二個(gè)參數(shù)變成了minSearchTime,可以理解最小匹配時(shí)間,會(huì)在這個(gè)時(shí)間中一直從當(dāng)前界面找needleImage圖,直至找到返回,返回值與pyautogui.locateAll一樣,是返回一個(gè)生成器
pyautogui.locateOnScreen(needleImage, minSearchTime)
# 返回值是BOX類的一個(gè)實(shí)例對(duì)象,如果未匹配則報(bào)異常
pyautogui.locateCenterOnScreen(needleImage)
# 匹配失敗返回異常,匹配成功返回一個(gè)Point類的一個(gè)實(shí)例,實(shí)例屬性x, y坐標(biāo),匹配到的圖片中心點(diǎn)
pyautogui.locateOnWindow(image, title)
# 里面使用了pygetwindow模塊,匹配title的UI界面中是否包含image,返回值同pyautogui.locateOnScreen
像素點(diǎn)RGB信息
import pyautogui
pyautogui.center((10, 10, 6, 8))
# Point(x=13, y=14)
# 返回一個(gè)Point類的一個(gè)實(shí)例,tuple轉(zhuǎn)換后為一個(gè)元組
pyautogui.pix(x, y)
# 返回屏幕像素在x, y處的顏色作為RGB元組,每種顏色表示從0到255。(x,y)像素點(diǎn)的(r, g, b)
pyautogui.pixelMatchesColor(x, y, (r, g, b))
pyautogui.pixelMatchesColor(200,500, (60,63,65))
# 返回True or False,即像素點(diǎn)的顏色匹配是否一致
3.7、窗口控制功能
PyautoGUI集成了pygetwindow模塊,可以直接調(diào)用函數(shù)獲取窗口信息、控制窗口大小、移動(dòng)、關(guān)閉等
獲得窗口對(duì)象
????????獲得當(dāng)前活動(dòng)(聚焦)窗口的對(duì)象
import pyautogui
pyautogui.getActiveWindow() ?# 返回當(dāng)前活動(dòng)(聚焦)窗口的對(duì)象
????????獲得所有可見(jiàn)窗口的窗口對(duì)象列表
import pyautogui
pyautogui.getAllWindows() ?# 返回所有可見(jiàn)窗口的窗口對(duì)象列表
????????獲得當(dāng)前活動(dòng)(聚焦)窗口的標(biāo)題
import pyautogui
pyautogui.getActiveWindowTitle() ? # 返回當(dāng)前活動(dòng)(聚焦)窗口的標(biāo)題
????????獲得所有可見(jiàn)窗口的標(biāo)題字符串列表
import pyautogui
pyautogui.getAllTitles() ?# 返回所有可見(jiàn)窗口的標(biāo)題字符串列表
????????獲得標(biāo)題文本中包含字符'ibox'的窗口對(duì)象列表
import pyautogui
pyautogui.getWindowsWithTitle(“ibox”) ? # 返回標(biāo)題文本中包含子字符'ibox'的窗口對(duì)象列表。
????????獲得包含坐標(biāo)點(diǎn)的窗口對(duì)象列表
import pyautogui
pyautogui.getWindowsAt(2000, 2000) ? # 返回一個(gè)窗口對(duì)象列表,這些窗口包含坐標(biāo)(2000, 2000)
控制窗口
? ? ? ? 窗口對(duì)象的屬性
import pyautogui
win = pyautogui.getWindowsWithTitle('Untitled')[0] # win是title是'Untitled'的窗口對(duì)象
# 窗口對(duì)象的屬性
win.size #(132,100)返回元組,窗口大小
win.width # 返回int,窗口的寬度
win.height # 返回int,窗口的高度
win.topleft # (10,10)返回元組,窗口最左上角坐標(biāo)
win.bottomright # (200,200)返回元組,窗口最右下角坐標(biāo)
win.top # 返回int,窗口上邊緣的y坐標(biāo)值
win.left # 返回int,窗口左邊緣的x坐標(biāo)值
win.isMaximized # 返回bool,窗口是否是最大窗口
win.isMinimized # 返回bool,窗口是否是最小窗口
? ? ? ? 窗口對(duì)象的方法
import pyautogui
win = pyautogui.getWindowsWithTitle('Untitled')[0] # win是title是'Untitled'的窗口對(duì)象
# 窗口對(duì)象的方法
win.maximize() # 窗口最大化
win.minimize() # 窗口最大化
win.restore() # 恢復(fù)窗口大小
win.resize(200,200) # 窗口x軸增加200,y軸增加200
win.resizeTo(200,200) # 窗口變化至x軸寬度200,y軸寬度200
win.move(10, 10) # 窗口相對(duì)當(dāng)前位置x軸移動(dòng)10,y軸移動(dòng)10
win.moveTo(10, 10) # 窗口移動(dòng)至10,y軸移動(dòng)至10,左上角坐標(biāo)(10,10)
四、應(yīng)用
???????自動(dòng)化測(cè)試
????????可以模擬用戶的操作,用于自動(dòng)化測(cè) ?試各種軟件和系統(tǒng)的功能。 ?
???????數(shù)據(jù)采集和處理
????????可以幫助自動(dòng)化從網(wǎng)頁(yè)或應(yīng)用程序中采集數(shù)據(jù),并進(jìn)行處理和分析。
???????軟件演示和教程錄制
????????可以用于自動(dòng)化演示軟件的功能和操作,錄制教程視頻等。 ?
???????游戲輔助工具
????????可以用來(lái)制作游戲輔助工具,自動(dòng)化完成一些重復(fù)性操作。
五、官方文檔
???????Pyautogui
????????https://pyautogui.readthedocs.io/en/latest/msgbox.html ?
???????Pygetwindow ?
????????https://pygetwindow.readthedocs.io/en/latest/# ?
???????Pillow/PIL ?
????????https://pillow.readthedocs.io/en/latest/# ? ?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-751826.html
???????Pyscreeze ?
????????https://github.com/asweigart/pyscreeze文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-751826.html
到了這里,關(guān)于Python--界面UI控制,模擬鍵鼠操作的模塊pyautogui(超詳細(xì)用法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!