午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Python第三方PyAutoGUI庫詳解

 hzlinhui 2024-12-12

        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ù)列表

  • 'linear':勻速。
  • 'easeInQuad':加速。
  • 'easeOutQuad':減速。
  • 'easeInOutQuad':先加速后減速。
  • 'easeInCubic':立方緩入。
  • 'easeOutCubic':立方緩出。
  • 'easeInOutCubic':立方緩入緩出。
  • 'easeInQuart':四次方緩入。
  • 'easeOutQuart':四次方緩出。
  • 'easeInOutQuart':四次方緩入緩出。
  • 'easeInQuint':五次方緩入。
  • 'easeOutQuint':五次方緩出。
  • 'easeInOutQuint':五次方緩入緩出。
  • 'easeInSine':正弦波緩入。
  • 'easeOutSine':正弦波緩出。
  • 'easeInOutSine':正弦波緩入緩出。
  • 'easeInExpo':指數(shù)函數(shù)緩入。
  • 'easeOutExpo':指數(shù)函數(shù)緩出。
  • 'easeInOutExpo':指數(shù)函數(shù)緩入緩出。
  • 'easeInCirc':圓圈緩入。
  1. 'easeOutCirc':圓圈緩出。
  2. 'easeInOutCirc':圓圈緩入緩出。
  3. 'easeInElastic':彈性緩入。
  4. 'easeOutElastic':彈性緩出。
  5. 'easeInOutElastic':彈性緩入緩出。
  6. 'easeInBack':后置回退緩入。
  7. 'easeOutBack':后置回退緩出。
  8. 'easeInOutBack':后置回退緩入緩出。
  9. 'easeInBounce':反彈緩入。
  10. 'easeOutBounce':反彈緩出。
  11. 'easeInOutBounce':反彈緩入緩出。

示例:

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_KEYS

2、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的幫助文檔就介紹完了。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多