PyAutoGUI 是一個用于進行圖形用戶界面(GUI)自動化的 Python 庫。它允許你在屏幕上進行鼠標和鍵盤的模擬操作,以及獲取屏幕上的信息,其函數(shù)主要分為以下4類: 1、屏幕圖像操作:獲取屏幕分辨率、檢查坐標是否在屏幕上、截屏、定位圖片在屏幕上的位置、獲取屏幕某個像素點的RGB值 2、鼠標控制:獲取當前鼠標位置、移動鼠標、鼠標拖拽、鼠標點擊 3、鍵盤控制:輸入字符串、組合按鍵(快捷鍵)、同時輸入字符+按鍵 4、消息彈窗:僅確認彈窗、確認取消彈窗、輸入普通內容彈窗、輸入密碼彈窗 中文文檔鏈接:Python中PyAutoGUI幫助文檔(推薦!)_python_腳本之家 英文文檔鏈接:Cheat Sheet — PyAutoGUI documentation 文中示例所用PyAutoGUI版本為: 0.9.54,2024.1.25 注意:從0.9.41版本開始若未找到指定圖片的定位,會引發(fā)ImageNotFoundException異常而不是返回None。 一、簡介目的PyAutoGUI是一個純Python的GUI自動化工具,其目的是可以用程序自動控制鼠標和鍵盤操作,多平臺支持??梢杂胮ip安裝,Github上有源代碼。 PyAutoGUI可以模擬鼠標的移動、點擊、拖拽,鍵盤按鍵輸入、按住操作,以及鼠標+鍵盤的熱鍵同時按住等操作,可以說手能動的都可以。 保護措施每次調用PyAutoGui函數(shù)都延遲2.5秒 pyautogui.PAUSE = 2.5 當pyautogui.FAILSAFE = True時,如果把鼠標光標在屏幕左上角,PyAutoGUI函數(shù)就會產生pyautogui.FailSafeException異常。 import pyautogui pyautogui.FAILSAFE = True 就像《魔法師的學徒》(Sorcerer’s Apprentice)會擔水的掃帚,可以擔水,卻無力阻止水漫浴室。你的程序也可能會失控(即使是按照你的意思執(zhí)行的),那時就需要中斷。如果鼠標還在自動操作,就很難在程序窗口關閉它。 為了能夠及時中斷,PyAutoGUI提供了一個保護措施。當pyautogui.FAILSAFE = True時,如果把鼠標光標在屏幕左上角,PyAutoGUI函數(shù)就會產生pyautogui.FailSafeException異常。如果失控了,需要中斷PyAutoGUI函數(shù),就把鼠標光標在屏幕左上角。要禁用這個特性,就把FAILSAFE設置成False: Import pyautogui Pyautogui.FAILSAFE = False 通過把pyautogui.PAUSE設置成float或int時間(秒),可以為所有的PyAutoGUI函數(shù)增加延遲。默認延遲時間是0.1秒。在函數(shù)循環(huán)執(zhí)行的時候,這樣做可以讓PyAutoGUI運行的慢一點,非常有用。例如: import pyautogui pyautogui.PAUSE = 2.5 pyautogui.moveTo(100,100); pyautogui.click() 所有的PyAutoGUI函數(shù)在延遲完成前都處于阻塞狀態(tài)(block)。(未來計劃增加一個可選的非阻塞模式來調用函數(shù)。) 建議PAUSE和FAILSAFE一起使用。 安裝與依賴PyAutoGUI支持Python 2.x和Python 3.x Windows:PyAutoGUI沒有任何依賴,因為它用Python的ctypes模塊所以不需要pywin32 pip3 install pyautogui 二、鼠標控制函數(shù)屏幕和鼠標位置 鼠標在屏幕上的位置由x和y的坐標表示,x的0點在屏幕的最左上角,往右滑動坐標增加;y坐標原點0也在屏幕左上角,右下滑坐標增加。 如你的屏幕分辨率是1920x1080,則最右下角的坐標是1919,1079(坐標從0開始計數(shù)) ——pyautogui.size():獲取屏幕分辨率屏幕分辨率可以通過函數(shù)size()獲取,返回一個2個整數(shù)的元組。 例: import pyautogui print(pyautogui.size()) # Size(width=1920, height=1080) ——pyautogui.position():獲取當前鼠標位置例1: import pyautogui print(pyautogui.position()) # Point(x=1290, y=376) 例2:不間斷輸出當前光標位置 #! python3import pyautogui, sysprint('Press Ctrl-C to quit.')try: while True: x, y = pyautogui.position() positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4) print(positionStr, end='') print('\b' * len(positionStr), end='', flush=True)except KeyboardInterrupt: print('\n') ——pyautogui.onScreen(x,y):檢查坐標是否在屏幕上例: import pyautogui, sys # 當前屏幕分辨率 size = pyautogui.size() # 檢查坐標是否在屏幕上 resolution1 = pyautogui.onScreen(1920, 1080) # 坐標是從0開始,因為右下角坐標是1920-1,1080-1 resolution2 = pyautogui.onScreen(1919, 1079) print(size,resolution1,resolution2) # Size(width=1920, height=1080) False True 鼠標移動1、pyautogui.moveTo(x, y, duration=seconds, tween=pyautogui.linear)用于將鼠標光標移動到屏幕上的指定位置。 如果使用None值,則表示使用當前光標的坐標值。 參數(shù): x 和 y: 目標位置的橫縱坐標。 duration: 鼠標移動到目標位置的持續(xù)時間(秒)。可選參數(shù),默認為0.1s,表示鼠標瞬間移動到目標位置。。 tween: 緩動函數(shù),用于控制鼠標移動的速度曲線??蛇x參數(shù),默認為線性緩動 (pyautogui.linear)。 例: import pyautogui # 將鼠標移動到屏幕的坐標 (100, 100),持續(xù)時間為1秒 pyautogui.moveTo(100, 100, duration=1) # 如果使用None值,則表示使用當前光標的坐標值。 pyautogui.moveTo(None,100,duration=1) pyautogui.moveTo(100,None,duration=1) 2、pyautogui.move(x, y, duration=seconds, tween=pyautogui.linear)相對于鼠標當前位置進行移動。參數(shù)與moveTo一樣。 例: import pyautogui, sys # 相對鼠標當前坐標向右移動100像素 pyautogui.move(100,0,duration=1,tween=pyautogui.linear) # 相對鼠標當前坐標向下移動100像素 pyautogui.move(0,100,duration=1,tween=pyautogui.linear) pyautogui.move(0,-100,duration=1,tween=pyautogui.linear) pyautogui.move(-10,0,duration=1,tween=pyautogui.linear) 鼠標拖拽dragTo()和drag()函數(shù)和moveTo()及move()函數(shù)參數(shù)類似,另外,他們還有'button'參數(shù)可以設置為'left','middle','right',用于設置用哪個鼠標按鍵拖拽。 1、pyautogui.dragTo(x, y, duration=seconds, button='left', tween=pyautogui.linear)用于模擬鼠標拖拽操作(還可以用mouseDown和moveTo、mouseUp函數(shù)模擬拖拽操作)。 參數(shù)說明: x 和 y: 拖拽的目標位置的橫縱坐標。 duration: 拖拽操作的持續(xù)時間(秒)??蛇x參數(shù),默認為0,表示鼠標瞬間拖拽到目標位置。 button: 鼠標按鈕,可以是 'left'、'middle' 或 'right'??蛇x參數(shù),默認為 'left'。 tween: 緩動函數(shù),用于控制鼠標拖拽的速度曲線??蛇x參數(shù),默認為線性緩動 (pyautogui.linear)。 示例: import pyautogui # 模擬鼠標左鍵拖拽到屏幕的坐標 (200, 200),持續(xù)時間為2秒 pyautogui.dragTo(200, 200, duration=2, button='left') PS:duration參數(shù)必須要設置大于0.2(默認是0.1s),否則會拖拽失敗。 2、pyautogui.drag(x, y, duration=seconds, button='left', tween=pyautogui.linear)相對鼠標當前位置拖拽指定距離。參數(shù)同dragTo()函數(shù)。 緩動/漸變函數(shù)Tween是鼠標移動過程中一個額外參數(shù),如果你不在乎鼠標的移動方式,可以跳本節(jié)。 緩動/漸變函數(shù)可以改變光標移動過程的速度和方向。通常鼠標是勻速直線運動,這就是線性緩動/漸變函數(shù)。 31種可用緩動/漸變函數(shù)列表
示例: import pyautogui # 加速向右移動300像素 pyautogui.move(300,0,duration=1,tween=pyautogui.easeInQuad) 這些效果函數(shù)是模仿Al Sweigart的PyTweening模塊,可以直接使用,不需要額外安裝。 如果你想創(chuàng)建自己的效果,也可以定義一個函數(shù),其參數(shù)是(0.0,1.0),表示起點和終點,返回值是介于[0.0,1.0]之間的數(shù)。 鼠標點擊函數(shù)XY坐標起始值為屏幕左上角0,0,X坐標隨著鼠標右移增加,Y坐標隨著鼠標下移增加。 import time import pyautogui x,y = pyautogui.position(100,100) num_seconds = 1 # 用1秒的時間將鼠標移至x,y坐標上 pyautogui.moveTo(x, y, duration=num_seconds) xOffset, yOffset = 100,100 # 將鼠標從當前位置偏移xOffset, yOffset像素 pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) 若duration參數(shù)(時長)為0或未指定,則鼠標指針會瞬間移到目標點上。注:拖動操作在Mac上不能被立即執(zhí)行。 >>> pyautogui.dragTo(x, y, duration=num_seconds) # drag mouse to XY >>> pyautogui.dragRel(xOffset, yOffset, duration=num_seconds) # drag mouse relative to its current position 1、pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)用于模擬鼠標點擊操作。 參數(shù)說明: x:鼠標點擊的目標橫坐標。如果未指定,則使用當前鼠標位置。 y:鼠標點擊的目標縱坐標。如果未指定,則使用當前鼠標位置。 clicks:點擊的次數(shù),默認為1次。 interval:兩次點擊之間的時間間隔,默認為0秒。 button:指定點擊的鼠標按鈕,可選值為 'left'、'middle'、'right'。默認為 'left'。 duration:模擬點擊的持續(xù)時間,默認為0秒。 tween:設置點擊的緩動函數(shù),默認為線性緩動。 示例: import pyautogui # 模擬左鍵單擊 pyautogui.click() # 模擬右鍵雙擊,點擊坐標為(100, 200) pyautogui.click(100, 200, clicks=2, button='right') # 模擬中鍵單擊,點擊坐標為(300, 400),間隔0.5秒 pyautogui.click(300, 400, button='middle', interval=0.5) 2、pyautogui.leftClick(x=None, y=None, clicks=1, interval=0.0, duration=0.0, tween=pyautogui.linear)用于模擬鼠標左鍵點擊。參數(shù)功能同click()函數(shù)。 例: import pyautogui # 模擬左鍵單擊 pyautogui.leftClick() # 模擬左鍵雙擊,點擊坐標為(100, 200) pyautogui.leftClick(100, 200, clicks=2) # 模擬左鍵單擊,點擊坐標為(300, 400),間隔0.5秒 pyautogui.leftClick(300, 400, interval=0.5) 3、pyautogui.middleClick(x=None, y=None, clicks=1, interval=0.0, duration=0.0, tween=pyautogui.linear)用于模擬鼠標中鍵點擊。 4、pyautogui.rightClick(x=None, y=None, clicks=1, interval=0.0, duration=0.0, tween=pyautogui.linear)用于模擬鼠標右鍵點擊。 5、pyautogui.doubleClick(x=None, y=None, interval=0.0, duration=0.0, tween=pyautogui.linear)用于模擬鼠標左鍵雙擊。 6、pyautogui.tripleClick(x=None, y=None, interval=0.0, duration=0.0, tween=pyautogui.linear)用于模擬鼠標左鍵三次點擊。 鼠標按下和松開函數(shù)1、pyautogui.mouseDown(x=None, y=None, button='left')用于模擬鼠標按下操作。 參數(shù)說明: x:鼠標按下的目標橫坐標。如果未指定,則使用當前鼠標位置。 y:鼠標按下的目標縱坐標。如果未指定,則使用當前鼠標位置。 button:指定按下的鼠標按鈕,可選值為 'left'、'middle'、'right'。默認為 'left'。 示例: import pyautogui # 模擬左鍵按下,按下位置為當前鼠標位置 pyautogui.mouseDown() # 模擬右鍵按下,按下位置為(100, 200) pyautogui.mouseDown(100, 200, button='right') 需要注意的是,按下操作后,通常需要調用 pyautogui.mouseUp() 函數(shù)來模擬鼠標釋放的動作,以完成整個鼠標點擊操作。 2、pyautogui.mouseUp(x=None, y=None, button='left')用于模擬鼠標釋放操作。參數(shù)同mouseDown()。 鼠標滾輪滾動函數(shù)1、pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)用于模擬鼠標滾滾動操作。 參數(shù)說明: amount:滾動的距離,正值表示向上滾動,負值表示向下滾動。 x:滾輪滾動的橫坐標。如果未指定,則使用當前鼠標位置。 y:滾輪滾動的縱坐標。如果未指定,則使用當前鼠標位置。 PS:此處x,y指定從屏幕哪個位置開始滾動,并不會改變鼠標的位置。 示例: import pyautogui # 向上滾動鼠標滾輪,滾動距離為3 pyautogui.scroll(3) # 向下滾動鼠標滾輪,滾動距離為-2,滾輪滾動位置為(100, 200) pyautogui.scroll(-2, x=100, y=200) 三、鍵盤控制函數(shù)鍵盤上可以按的鍵都可以調用。 1、pyautogui.typewrite(message, interval=0.0, pause=None, logScreenshot=None, _pause=True)用于模擬鍵盤輸入。 參數(shù): message (必需): 要輸入的文本字符串。 interval (可選): 每個按鍵之間的時間間隔。默認為0,表示沒有間隔。如果需要模擬更自然的鍵入速度,可以設置一個小的時間間隔。 pause (可選): 在輸入不同的消息之間的暫停時間。如果設置為None,則使用默認值,即2.5秒。如果設置為數(shù)字,則表示暫停的秒數(shù)。 logScreenshot (可選): 如果設置為True,將在每個按鍵后創(chuàng)建一個屏幕截圖。默認為None。 _pause (可選): 如果設置為True,將在每個按鍵之后等待,以確保按鍵被正確處理。默認為True。 message參數(shù)是字符串時將被當作要鍵入的字符,如:'abc';如為列表時鍵盤常量被視鍵盤按下,非鍵盤常量被視為鍵入字符,如['a','b','left'],其中'ab'被視為鍵入的字符串,'left'被視為按鍵的左箭頭。 示例1:鍵入文本 import pyautogui # 獲取當前鼠標坐標 x,y = pyautogui.position() # 鼠標左鍵單擊 pyautogui.click(x=x,y=y) # 鍵入文本 pyautogui.typewrite("hello,world!") 示例2:用列表鍵入字符串和按鍵,按鍵常量將被識別為按鍵操作 import pyautogui # 先模擬輸入字符串'a,b,c',然后模擬按下鍵盤的left、backspace、enter、f1鍵 pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys) ——查看鍵盤常量:pyautogui.KEYBOARD_KEYS2、pyautogui.write(message, interval=0.0)用于模擬鍵盤輸入。主要用來輸入字符串。 當message參數(shù)為單個字符串,輸入的是字符串;當參數(shù)為列表時,可以模擬按鍵。 參數(shù)說明: message: 要輸入的文本字符串或列表。 interval: 模擬鍵盤輸入的間隔時間(秒)??蛇x參數(shù),默認為0.0。 示例: import pyautogui
# 使用列表參數(shù)鍵入 "hello"并按下“enter”鍵, # 注:用列表鍵入字符串時每次只能鍵入單個字母 pyautogui.write(['h', 'e', 'l', 'l','o','enter'],interval=0.25)
# 鍵入字符串 pyautogui.write('world!',interval=0.25) 3、pyautogui.press(keys, presses=1, interval=0.0)用于模擬按下和釋放鍵盤按鍵。 參數(shù)說明: keys: 要按下和釋放的按鍵,可以是字符串或字符串列表。例如,'a' 表示按下和釋放鍵盤上的 'a' 鍵,['ctrl', 'c'] 表示按下和釋放 Ctrl + C。 presses: 模擬按下和釋放按鍵的次數(shù)。可選參數(shù),默認為1。 interval: 連續(xù)按鍵之間的間隔時間(秒)??蛇x參數(shù),默認為0.0。 例: import pyautogui
# 模擬按下'a'鍵一次 pyautogui.press('a',presses=1,interval=0.0) # 模擬按下和釋放Ctrl,c,重復3次,每次按鍵間隔0.5秒 pyautogui.press(['ctrl','c'],presses=3,interval=0.5) 4、pyautogui.keyDown(key, args...)用于模擬按下鍵盤上的一個鍵。 參數(shù): key: 要按下的鍵的字符串表示,可以是字母、數(shù)字、特殊字符或鍵盤上的其他按鍵。例如,'a'表示按下'A'鍵,'ctrl'表示按下Ctrl鍵。你還可以同時按下多個鍵,例如'ctrlleft'表示按下左Ctrl鍵。 args: 可選的附加參數(shù),用于指定按鍵時的一些額外操作。這些參數(shù)可以是字符串或整數(shù)。一些可能的參數(shù)包括: interval: 按鍵之間的時間間隔,以秒為單位。指定按下鍵之后等待的時間,默認為0。 logScreenshot: 如果為True,將在按鍵之前記錄當前屏幕的截圖。默認為False。 pause: 在按下鍵之前的延遲時間,以秒為單位。默認為pyautogui.PAUSE的值。 示例: import pyautogui # 按下'A'鍵 pyautogui.keyDown('a') # 可選:等待一段時間 pyautogui.sleep(1) # 松開'A'鍵 pyautogui.keyUp('a') 5、pyautogui.keyUp(key, args...)用于模擬釋放鍵盤上的一個鍵。 參數(shù): args: 可選的附加參數(shù),用于指定釋放鍵時的一些額外操作。這些參數(shù)可以是字符串或整數(shù)。一些可能的參數(shù)包括: interval: 釋放鍵之間的時間間隔,以秒為單位。指定釋放鍵之后等待的時間,默認為0。 logScreenshot: 如果為True,將在釋放鍵之前記錄當前屏幕的截圖。默認為False。 pause: 在釋放鍵之前的延遲時間,以秒為單位。默認為pyautogui.PAUSE的值。 示例: import pyautogui # 按住ctrl鍵 pyautogui.keyDown('ctrl') # 按下并松開一次a鍵 pyautogui.press('a') # 松開ctrl鍵 pyautogui.keyUp('ctrl') # 相當于Ctrl+A全選的作用 ——hold(pyautogui.KEYBOARD_KEYS)為了使按住某個鍵更加方便,hold()函數(shù)可以用作傳遞某個pyautogui.KEYBOARD_KEYS中的某個鍵作為上下文管理器,在with上下文管理器中這個鍵將被一直按住。 例: import pyautogui with pyautogui.hold('shift'): # 相當于按Shift+左箭頭3次 pyautogui.press(['left'],presses=3) 6、pyautogui.hotkey(key1, key2, ..., keys, interval=0.0, logScreenshot=False, pause=None)用于模擬按下多個按鍵組合,類似于按下快捷鍵的操作。 參數(shù): key1, key2, ..., keys: 要按下的按鍵,可以是字符串表示的單個按鍵,也可以是多個按鍵組合。例如,'ctrl'、'c'、'v',或者像('ctrl', 'c')表示同時按下Ctrl和C鍵。 interval: 按鍵之間的時間間隔,以秒為單位。指定按下每個按鍵之間的時間間隔,默認為0。 logScreenshot: 如果為True,將在按鍵之前記錄當前屏幕的截圖。默認為False。 pause: 在按下每個按鍵之前的延遲時間,以秒為單位。如果指定了,它將覆蓋模塊級別的全局PAUSE變量。默認為pyautogui.PAUSE的值。 示例: import pyautogui pyautogui.click() # 選中所有內容 pyautogui.hotkey('ctrl', 'a') # 復制 pyautogui.hotkey('ctrl', 'c') # 因前面全選了內容,此處要再次單擊獲取光標,否則復制一次的內容覆蓋了之前的內容,就看不出有復制成功 pyautogui.click() # 粘貼 pyautogui.hotkey('ctrl', 'v') 也可以用keyDown()和keyUp()來組合模擬組合快捷鍵功能。 ——pyautogui.KEYBOARD_KEYS['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright'] 共194個KEYBOARD_KEYS鍵盤常量。 消息彈窗函數(shù)PyAutoGUI通過Tkinter實現(xiàn)了4種純Python的消息彈窗函數(shù),和JavaScript類似。 1、pyautogui.alert(text='', title='', button='OK')顯示一個簡單的帶文字和OK按鈕的消息彈窗。用戶點擊后返回button的文字。 參數(shù)說明: text(可選): 彈出框中顯示的文本內容,可以是字符串。默認為空字符串。 title(可選): 彈出框的標題,可以是字符串。默認為空字符串。 button(可選): 彈出框上顯示的按鈕文本,可以是字符串。默認為 'OK'。 示例: import pyautogui # 顯示一個簡單的彈出框 pyautogui.alert('這是一個示例彈出框', '提示', '好的') 2、pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel'])顯示一個簡單的帶文字、OK和Cancel按鈕的消息彈窗,用戶點擊后返回被點擊button的文字,支持自定義數(shù)字、文字的列表。 參數(shù)說明: text(可選): 確認框中顯示的文本內容,可以是字符串。默認為空字符串。 title(可選): 確認框的標題,可以是字符串。默認為空字符串。 buttons(可選): 確認框上顯示的按鈕文本,是一個列表,其中包含要顯示的按鈕文本。默認為 ['OK', 'Cancel']。 示例: import pyautogui # 顯示一個簡單的彈出框 pyautogui.confirm('這是一個示例彈出框', '提示', range(10) 3、pyautogui.prompt(text='', title='', default='')可以輸入的消息彈窗,帶OK和Cancel按鈕。用戶點擊OK按鈕返回輸入的文字,點擊Cancel按鈕返回None。 參數(shù)說明: text(可選): 提示框中顯示的文本內容,可以是字符串。默認為空字符串。 title(可選): 提示框的標題,可以是字符串。默認為空字符串。 default(可選): 提示框中文本輸入框的默認值,可以是字符串。默認為空字符串。 示例: import pyautogui # 獲取用戶輸入的用戶名 username = pyautogui.prompt('請輸入用戶名:', '輸入', default='') # 根據(jù)用戶輸入進行相應的操作 if username: print('用戶輸入的用戶名是:', username) else: print('用戶點擊了取消按鈕') 4、pyautogui.password(text='', title='', default='', mask='*')樣式同prompt(),用于輸入密碼,消息用*表示。帶OK和Cancel按鈕。用戶點擊OK按鈕返回輸入的文字,點擊Cancel按鈕返回None。 參數(shù)說明: text(可選): 提示框中顯示的文本內容,可以是字符串。默認為空字符串。 title(可選): 提示框的標題,可以是字符串。默認為空字符串。 default(可選): 提示框中密碼輸入框的默認值,可以是字符串。默認為空字符串。 mask(可選): 用于掩蓋用戶輸入的掩碼字符,可以是單個字符。默認為 '*'。 示例: import pyautogui # 獲取用戶輸入的密碼 password = pyautogui.password('請輸入密碼:', '輸入', mask='A') # 根據(jù)用戶輸入進行相應的操作 if password: print('用戶輸入的密碼是:', password) else: print('用戶點擊了取消按鈕') 截屏函數(shù)PyAutoGUI可以截屏并保存為圖片文件,然后定位這些截屏在屏幕上的位置。與sikuli類似,把屏幕上的按鍵截取下來,然后定位,就可以執(zhí)行點擊等操作了。 截屏功能需要安裝Pillow模塊。OS X用screencapture命令,是系統(tǒng)自帶的。Linux用戶用scrot命令,可以通過sudo apt-get install scrot安裝。 1、pyautogui.screenshot(region=(left, top, width, height))用于獲取屏幕上的截圖并可保存為文件。 參數(shù)說明: region(可選): 指定截圖的區(qū)域,是一個包含左上角坐標 (left, top) 和寬度高度 (width, height) 的元組。默認為整個屏幕的區(qū)域。 返回值: 返回一個 PIL.Image 對象,可以使用 PIL(Python Imaging Library)中的方法進行進一步的處理和保存。 示例1:screenshot()函數(shù)會返回Image對象(參考Pillow或PIL模塊文檔),也可以設置文件名 import pyautogui img1= pyautogui.screenshot() img2= pyautogui.screenshot('img2.png') 示例2:在一個$1920 \times 1080$的屏幕上,screenshot()函數(shù)要消耗100微秒——不快也不慢。 如果你不需要截取整個屏幕,還有一個可選的region參數(shù)。你可以把截取區(qū)域的左上角XY坐標值和寬度、高度傳入截取。 import pyautogui img1= pyautogui.screenshot() img2= pyautogui.screenshot('img.png',region=(0,0,300,300)) 示例3: import pyautogui # 獲取整個屏幕的截圖 screenshot = pyautogui.screenshot() # 保存截圖 screenshot.save('screenshot.png') # 獲取屏幕某個區(qū)域的截圖 region_screenshot = pyautogui.screenshot(region=(100, 100, 300, 300)) # 顯示截圖 region_screenshot.show() 定位函數(shù)從0.9.41版本開始若未找到指定圖片的定位,會引發(fā)ImageNotFoundException異常而不是返回None。 你可以用圖片來定位你在屏幕上看到的東西,如查找屏幕上是否打開了計算器: 如果你不知道計算器按鈕在屏幕上的具體坐標,就無法調用moveTo()和click()函數(shù)來操作它。不管計算器位于屏幕哪個位置,或隨時會變換位置,只要你有計算器按鈕的圖片就可以實時定位它的位置,如按鈕7: 你可以調用locateOnScreen('calc7key.png')函數(shù)來定位它的坐標。函數(shù)會返回一個包含4個整數(shù)的元組。這個元組可以傳遞給center()函數(shù)以獲取在這個區(qū)域中心點的x和y坐標,如果屏幕中無法定位到這個圖片則會引發(fā)圖片未找到異常。 1、pyautogui.locateOnScreen(image, grayscale=False, confidence=0.8)用于在屏幕上定位給定圖像的第一個匹配項的位置。 這對于圖形用戶界面(GUI)自動化特別有用,因為它允許腳本通過識別屏幕上的圖像來找到并點擊按鈕、圖標或其他界面元素。 參數(shù): image (str 或 PIL.Image.Image):要查找的圖像的文件路徑或 Pillow (PIL) Image 對象。 grayscale (bool, 可選):是否將圖像轉換為灰度格式以加速查找過程。默認為 False,即使用彩色圖像進行匹配。 confidence (float, 可選):圖像匹配的置信度水平,范圍從 0.0 到 1.0。只有 OpenCV 安裝后才可用,并且 image 參數(shù)必須是一個文件路徑(不能是 PIL Image 對象)。此參數(shù)允許函數(shù)在找到匹配項時具有一定的容錯性。默認為 0.8,但如果未安裝 OpenCV,則忽略此參數(shù)。 PS:務必使用confidence參數(shù),否則很難匹配到指定圖像的位置 使用 confidence 參數(shù),還需要安裝 opencv-python 庫。你可以使用 pip 來安裝它們: pip install pyautogui opencv-python 返回值: 如果找到匹配項,則返回一個四元素的元組,表示匹配圖像區(qū)域的左上角坐標 (x, y) 和其寬度和高度 (width, height)。 如果未找到匹配項,則返回 None。或者直接報錯:pyautogui.ImageNotFoundException 示例: import pyautogui
# 假設你有一個名為 'button.png' 的圖像文件,你想要在屏幕上找到它 # PS:務必使用confidence參數(shù),否則很難匹配到指定圖像的位置 location = pyautogui.locateOnScreen('user.png',confidence=0.8)
if location is not None: # 如果找到了圖像,獲取其坐標,并可以執(zhí)行點擊等操作 x, y, width, height = location print(f'找到圖像,位置:{x}, {y}, 寬度:{width}, 高度:{height}') pyautogui.click(x + width // 2, y + height // 2) # 點擊圖像的中心 else: print('未在屏幕上找到圖像') ——pyautogui.center(coords)獲取一個坐標區(qū)域中中心點x和y的坐標。 參數(shù)說明: coords:一個包含4個整數(shù)的元組(可以先用locateOnScreen()獲取指定圖片的位置區(qū)域,再傳遞給center()獲取區(qū)域的中心點) 例: import pyautogui # 輸出計算器按鈕7的中心點x和y坐標 print(pyautogui.center(pyautogui.locateOnScreen('calc7key.png',confidence=0.8))) # Point(x=275, y=647) 2、locateCenterOnScreen(image, grayscale=False, confidence=0.8)用于找到屏幕上特定圖像的中心位置。 參數(shù): image (str 或 PIL.Image.Image):要查找的圖像的文件路徑或 Pillow (PIL) Image 對象。 grayscale (bool, 可選):是否將圖像轉換為灰度格式以加速查找過程。默認為 False,即使用彩色圖像進行匹配。 confidence (float, 可選):圖像匹配的置信度水平,范圍從 0.0 到 1.0。只有 OpenCV 安裝后才可用,并且 image 參數(shù)必須是一個文件路徑(不能是 PIL Image 對象)。此參數(shù)允許函數(shù)在找到匹配項時具有一定的容錯性。默認為 0.8,但如果未安裝 OpenCV,則忽略此參數(shù)。 返回值: 如果找到匹配項,則返回一個四元素的元組,表示匹配圖像區(qū)域的左上角坐標 (x, y) 和其寬度和高度 (width, height)。 如果未找到匹配項,則返回 None?;蛘咧苯訄箦e:pyautogui.ImageNotFoundException 示例: import pyautogui location = pyautogui.locateCenterOnScreen('111.png', grayscale=False, confidence=0.8) print(location) 輸出: Point(x=115, y=233) 3、locateAllOnScreen(image, grayscale=False, confidence=0.8)用于在給定的圖像或屏幕上找到所有匹配的子圖像或目標。 參數(shù): image (str 或 PIL.Image.Image):要查找的圖像的文件路徑或 Pillow (PIL) Image 對象。 grayscale (bool, 可選):是否將圖像轉換為灰度格式以加速查找過程。默認為 False,即使用彩色圖像進行匹配。 confidence (float, 可選):圖像匹配的置信度水平,范圍從 0.0 到 1.0。只有 OpenCV 安裝后才可用,并且 image 參數(shù)必須是一個文件路徑(不能是 PIL Image 對象)。此參數(shù)允許函數(shù)在找到匹配項時具有一定的容錯性。默認為 0.8,但如果未安裝 OpenCV,則忽略此參數(shù)。 返回值: locations:一個列表,包含所有屏幕中找到的圖像的位置(例如,坐標)。如果沒有找到任何匹配項,則可能返回一個空列表。 示例: import pyautogui for i in pyautogui.locateAllOnScreen('111.png', grayscale=False,confidence=0.8): print(i) 輸出: Box(left=92, top=207, width=46, height=52) # print(i.left) = 92 Box(left=168, top=207, width=46, height=52) Box(left=168, top=308, width=46, height=52) Box(left=92, top=409, width=46, height=52) Box(left=522, top=589, width=46, height=52) Box(left=602, top=589, width=46, height=52) 4、locate(needleImage, haystackImage, grayscale=False)返回找到的第一個截圖Image對象在haystackImage里面的坐標(left, top, width, height),如果沒找到引發(fā)ImageNotFoundException異常。 參數(shù): needleImage:要定位的圖片路徑(如計算器按鈕7) haystackImage:被定位的圖片路徑(如屏幕截圖) 示例: import pyautogui # 保存當前屏幕截圖 pyautogui.screenshot('current.png') # 查找按鈕7在前面保存截圖中的位置 print(pyautogui.locate('7.png','current.png')) 5、locateAll(needleImage, haystackImage, grayscale=False)返回找到的所有相同截圖Image對象在haystackImage里面的坐標(left, top, width, height)的生成器 locate all函數(shù)都可以用for循環(huán)或list()列表輸出: >>> import pyautogui >>> for pos in pyautogui.locateAllOnScreen('someButton.png') ... print(pos)...(1101, 252, 50, 50)(59, 481, 50, 50)(1395, 640, 50, 50)(1838, 676, 50, 50) >>> list(pyautogui.locateAllOnScreen('someButton.png'))[(1101, 252, 50, 50), (59, 481, 50, 50), (1395, 640, 50, 50), (1838, 676, 50, 50)] 這些'locate'函數(shù)都很消耗資源,他們會用4秒來運行。最好的辦法是指定一個區(qū)域參數(shù),以避免在整個屏幕中搜索。 >>> import pyautogui >>> pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400)) 灰度值匹配可以把grayscale參數(shù)設置為True來加速定位(大約提升30%),默認為False。這種去色(desaturate)方法可以加速定位,但是也可能導致假陽性(false-positive)匹配: >>> import pyautogui >>> button7location = pyautogui.locateOnScreen('calc7key.png', grayscale=True) >>> button7location(1416, 562, 50, 41) 像素匹配要獲取截屏某個位置像素點的RGB顏色值,可以用Image對象的getpixel()方法: >>> import pyautogui >>> im = pyautogui.screenshot() >>> im.getpixel((100, 200)) (130, 135, 144) 也可以用PyAutoGUI的pixel()函數(shù),是之前調用的包裝: >>> import pyautogui >>> pix = pyautogui.pixel(100, 200) >>> pix RGB(red=130, green=135, blue=144) >>> pix[0] 130 >>> pix.red 130 1、pyautogui.pixel(x, y)用于獲取屏幕上的指定像素點的顏色值。 參數(shù)說明: x 和 y:表示像素點的坐標。 示例: import pyautogui rgb = pyautogui.pixel(100,200) print(rgb) # (239, 235, 239) 如果你只是要檢驗一下指定位置像素點的RGB顏色值,可以用pixelMatchesColor()函數(shù),把X、Y和RGB元組值穿入即可: 2、pyautogui.pixelMatchesColor(x, y, expected_red, expected_green, expected_blue[, tolerance])用于檢查屏幕上的指定像素點的RGB顏色是否與指定的RGB顏色值匹配。 參數(shù)說明: x 和 y:表示像素點的坐標。 expected_red、expected_green 和 expected_blue:分別表示期望的像素點的 RGB 顏色值中的紅色、綠色和藍色分量。 tolerance(可選參數(shù)):一個整數(shù),表示顏色匹配的容差范圍。默認值為 0。 示例: import pyautogui isMatch = pyautogui.pixelMatchesColor(100, 200, (130, 135, 144),tolerance=0.9) print(isMatch) # False 四、其他函數(shù)1、pyautogui.sleep(seconds)休眠秒數(shù),同time.sleep()函數(shù)功能。 到此Python中PyAutoGUI的幫助文檔就介紹完了。 |
|