其他分享
首页 > 其他分享> > PyAutoGUI

PyAutoGUI

作者:互联网

PyAutoGUI

安装

cmd Windows安装

pip install pyautogui

pycharm安装

![在这里插入图片描述](https://www.icode9.com/i/ll/?i=3072aad07a37471a9719b069253166b5.png?,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YyX5rO9b2w=,size_20,color_FFFFFF,t_

备忘录

导入 pyautogui

import pyautogui

通用功能

mouse = pyautogui.position()  # 返回当前鼠标 x 和 y 
screen = pyautogui.size()  # 当前屏幕分辨率宽高
flag = pyautogui.onScreen(100, 200)  # 如果 x & y 在屏幕内,则为真。

故障安全

pyautogui.PAUSE = 2.5 # 设置每次 PyAutoGUI 调用后 2.5 秒的暂停
pyautogui.FAILSAFE = True # 当故障安全模式是时,将鼠标移动到左上角将提高一个可以中止您的程序

鼠标功能

pyautogui.moveTo(0, 0, duration=0.2)  # 在0.2秒内移动鼠标到XY坐标
pyautogui.moveRel(200, 200, duration=1)  # 相对于当前位置移动鼠标 duration移动秒数
pyautogui.FAILSAFE = False
pyautogui.dragTo(0, 0, duration=1)  # 将鼠标拖动到 XY
pyautogui.dragRel(100, 100, duration=1)  # 相对于当前位置拖动鼠标
"""
鼠标拖动到 x & y 并点击
x : x坐标
y : y坐标
clicks : 点击次数
interval : 点击之间的秒数
button : 按键 
	参数 : LEFT、MIDDLE、RIGHT、PRIMARY、SECONDARY
"""
pyautogui.click(x=10, y=10, clicks=1, interval=1, button='left')
pyautogui.rightClick(x=moveToX, y=moveToY) # 鼠标移动到 x & y 并右键单击
pyautogui.middleClick(x=moveToX, y=moveToY) # 鼠标移动到 x & y 并中键单击
pyautogui.doubleClick(x=moveToX, y=moveToY) # 鼠标移动到 x & y 并左键双击
pyautogui.tripleClick(x=moveToX, y=moveToY) # 鼠标移动到 x & y 并执行三次单击
pyautogui.scroll(1000, x=1075, y=641)  # 执行鼠标滚轮的滚动
pyautogui.mouseDown(x=moveToX, y=moveToY, button='left') # 单个按钮向下和向上事件可以单独调用
pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')

键盘功能

pyautogui.typewrite('Hello World!\n', interval=0.1)  # 用于输入文本,换行符是 Enter , interval = 每个字符间隔的秒数
"""
也可以传递键名列表
键名称的完整列表位于 pyautogui.KEYBOARD_KEYS 中。
"""
pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter'], interval=0.5)
# 单个按钮向下和向上事件可以单独调用
pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)

消息框功能

pyautogui.alert('这将显示一些带有 OK 按钮的文本。')
pyautogui.confirm('这将显示文本并有一个确定和取消按钮。')
pyautogui.prompt('这允许用户输入一个字符串并按 OK。')

截图函数

screen = pyautogui.screenshot()  # 返回一个 Pillow/PIL 图片对象
foo = pyautogui.screenshot('foo.png')  # 返回 Pillow/PIL 图片对象,并将其保存到文件中
test = pyautogui.locateOnScreen('test.png')  # 返回找到的第一个位置(左、上、宽、高)

鼠标控制功能

屏幕和鼠标位置

屏幕上的位置由 X 和 Y 笛卡尔坐标表示。X 坐标从左侧的 0 开始,向右增加。与数学不同,Y 坐标从顶部的 0 开始,向下增加。

0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

左上角的像素位于坐标 0, 0 处。如果屏幕的分辨率为 1920 x 1080,则右下角的像素将为 1919, 1079(因为坐标从 0 开始,而不是 1)。
屏幕分辨率大小由函数作为两个整数的元组返回。鼠标光标的当前 X 和 Y 坐标由函数返回。
例如:

>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.position()
(187, 567)

这是一个简短的Python 3程序,它将不断打印出鼠标光标的位置:

#! python3
import pyautogui, sys
print('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')

这是 Python 2 版本:

#! python
import pyautogui, sys
print('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,
        print '\b' * (len(positionStr) + 2),
        sys.stdout.flush()
except KeyboardInterrupt:
    print '\n'

要检查屏幕上是否有 XY 坐标,请将它们(作为两个整数参数或具有两个整数的单个元组/列表参数)传递给函数,如果它们在屏幕边界内,则返回。

>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
>>> pyautogui.onScreen(0, 99999999)
False
>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.onScreen(1920, 1080)
False
>>> pyautogui.onScreen(1919, 1079)
True

鼠标移动

该函数会将鼠标光标移动到您传递它的 X 和 Y 整数坐标。可以将坐标的值传递给表示"当前鼠标光标位置"的值。

>>> pyautogui.moveTo(100, 200)   # 将鼠标移动到X (100) Y(200)处。
>>> pyautogui.moveTo(None, 500)  # 将鼠标移动到X (100) Y(500)处。
>>> pyautogui.moveTo(600, None)  # 将鼠标移动到X (600) Y(500)处。

通常,鼠标光标将立即移动到新坐标。如果希望鼠标逐渐移动到新位置,请传递第三个参数来表示移动应采用的持续时间(以秒为单位)。

>>> pyautogui.moveTo(100, 200, 2)   # 将鼠标移动到X的100,Y的200在2秒内

如果要将鼠标光标相对于其当前位置移动几个像素,请使用该函数。此函数具有与 类似的参数。

>>> pyautogui.moveTo(100, 200)  # 将鼠标移动到X (100) Y(200)处。
>>> pyautogui.move(0, 50)       # 将鼠标向下移动50像素。
>>> pyautogui.move(-30, 0)      # 将鼠标向左移动30像素。
>>> pyautogui.move(-30, None)   # 移动鼠标向左30像素。

鼠标拖动

PyAutoGUI 和函数具有与 和 函数相似的参数。此外,它们还有一个关键字,可以设置为 ,以及拖动时要按住的鼠标按钮。

>>> pyautogui.dragTo(100, 200, button='left')     # 按住鼠标左键拖动鼠标到X值为100,Y值为200  
>>> pyautogui.dragTo(300, 400, 2, button='left')  # 按住鼠标左键拖动鼠标到X为300,Y为400,超过2秒  
>>> pyautogui.drag(30, 0, 2, button='right')   # 按住鼠标右键拖动鼠标向左拖动30像素超过2秒

补间/缓动功能

补间是使鼠标移动花哨的额外功能。如果您不关心这一点,则可以跳过此部分。
例如:

>>> 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模块复制的:https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/pytweening 该模块不必安装即可使用补间函数。
如果要创建自己的补间函数,请定义一个函数,该函数在(表示鼠标移动的开始)和(表示鼠标移动的结束)之间采用单个 float 参数,并在 和 之间返回浮点值。

鼠标点击

该函数模拟鼠标在鼠标当前位置单击一个左键。"咔哒"被定义为按下按钮,然后向上释放。

>>> pyautogui.click()

要在单击之前合并调用,请为 and 关键字参数传递整数:moveTo()

>>> pyautogui.click(x=100, y=200)  # 移动到100,200,然后点击鼠标左键。  

要指定其他鼠标按钮来单击、传递 、或为关键字参数指定,请执行以下操作:‘left’‘middle’'right’button

>>> pyautogui.click(button='right')  # 右击鼠标

若要执行多次单击,请将整数传递给关键字参数。(可选)您可以将浮点数或整数传递给关键字参数,以指定两次点击之间的暂停量(以秒为单位)。例如:clicks

>>> pyautogui.click(clicks=2)  # 双击鼠标左键
>>> pyautogui.click(clicks=2, interval=0.25)  # 双击鼠标左键,但每次单击之间有四分之一秒的停顿
>>> pyautogui.click(button='right', clicks=3, interval=0.25)  # 三次点击鼠标右键,在两次点击之间暂停四分之一秒

作为一个方便的快捷方式,该功能将执行双击鼠标左键。它还具有可选的和关键字参数。例如:doubleClick()

>>> pyautogui.doubleClick()  # 双击左键

还有一个函数具有类似的可选关键字参数。tripleClick()
该函数具有可选参数和关键字参数。rightClick()

鼠标按下和鼠标悬停函数

鼠标单击和拖动由按下鼠标按钮和将其释放回来组成。如果要单独执行这些操作,请调用 and 函数。它们具有相同的 、 和

>>> pyautogui.mouseDown(); pyautogui.mouseUp()  # 这和点击鼠标左键是一样的
>>> pyautogui.mouseDown(button='right')  # 按下正确的按钮
>>> pyautogui.mouseUp(button='right', x=100, y=200)  # 将鼠标移动到100,200,然后松开右键向上。  

鼠标滚动

可以通过调用该函数并传递整数次的"单击"来模拟鼠标滚轮滚动。"点击"中的滚动量因平台而异。(可选)可以为 and 关键字参数传递整数,以便在执行滚动之前移动鼠标光标。例如:scroll()xy

>>> pyautogui.scroll(10)   # 向上滚动10“单击”
>>> pyautogui.scroll(-10)  # 向下滚动10“单击”
>>> pyautogui.scroll(10, x=100, y=100)  # 将鼠标光标移动到100,200,然后向上滚动10“单击”

在OS X和Linux平台上,PyAutoGUI还可以通过调用hscroll()函数来执行水平滚动。例如:

>>> pyautogui.hscroll(10)   # 向右滚动10“点击”
>>> pyautogui.hscroll(-10)   # 滚动左10“点击”

该函数是 执行垂直滚动的 包装器。

键盘控制功能

write()函数

主要键盘功能是 。此函数将键入传递的字符串中的字符。若要在按每个字符键之间添加延迟间隔,请为关键字参数传递 int 或 float。
例如:

>>> pyautogui.write('Hello world!')                 # 打印出“你好世界!”即刻
>>> pyautogui.write('Hello world!', interval=0.25)  # 输出“Hello world!”,每个字符后面有四分之一秒的延迟 

例如,您只能使用 的单字符键与 按 键,因此无法按 Shift 或 F1 键。write()

press(), keyDown(), keyUp()函数

若要按这些键,请调用该函数,并将其传递给来自 、 、 的字符串。
例如:

>>> pyautogui.press('enter')  # 按ENTER键
>>> pyautogui.press('f1')     # 按f1键
>>> pyautogui.press('left')   # 按左箭头键

该函数实际上只是 and 函数的包装器,它模拟按下一个键,然后将其释放起来。这些函数可以自己调用。例如,若要在按住 Shift 键的同时按三次向左箭头键,请调用以下命令:press(),keyDown(),keyUp()

>>> pyautogui.keyDown('shift')  # 按住Shift键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.keyUp('shift')    # 释放Shift键

要按与按下多个键类似的键,请将字符串列表传递给 。例如:write()press()

>>> pyautogui.press(['left', 'left', 'left'])

或者您可以设置按压次数:left

>>> pyautogui.press('left', presses=3)

若要在每次按下之间添加延迟间隔,请为关键字参数传递 int 或 float。interval

hold()上下文管理器

为了方便持有密钥,该函数可以用作上下文管理器,并从 , , 等传递字符串,并且此密钥将在上下文块的持续时间内保留。

>>> with pyautogui.hold('shift'):
        pyautogui.press(['left', 'left', 'left'])

…等效于以下代码:

>>> pyautogui.keyDown('shift')  # 按住Shift键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.press('left')     # 按左箭头键
>>> pyautogui.keyUp('shift')    # 释放Shift键

hotkey()函数

为了方便按热键或键盘快捷键,可以传递几个键串,这些键串将按顺序按下,然后以相反的顺序释放。

>>> pyautogui.hotkey('ctrl', 'shift', 'esc')

…等效于以下代码:

>>> pyautogui.keyDown('ctrl')
>>> pyautogui.keyDown('shift')
>>> pyautogui.keyDown('esc')
>>> pyautogui.keyUp('esc')
>>> pyautogui.keyUp('shift')
>>> pyautogui.keyUp('ctrl')

若要在每次按下之间添加延迟间隔,请为关键字参数传递 int 或 float。

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']

消息框功能

alert()函数

>>> alert(text='', title='', button='OK')

显示一个简单的消息框,其中包含文本和单个"确定"按钮。返回单击的按钮的文本。

confirm()函数

>>> confirm(text='', title='', buttons=['OK', 'Cancel'])

显示一个带有"确定"和"取消"按钮的消息框。可以自定义按钮的数量和文本。返回单击的按钮的文本。

prompt() 函数

>>> prompt(text='', title='' , default='')

显示一个带有文本输入以及"确定"和"取消"按钮的消息框。返回输入的文本,如果单击了"取消",则返回"无"。

password() 函数

>>> password(text='', title='', default='', mask='*')

显示一个带有文本输入以及"确定"和"取消"按钮的消息框。键入的字符显示为 。返回输入的文本,如果单击了"取消",则返回"无"。

截图函数

PyAutoGUI 可以截取屏幕截图,将其保存到文件中,并在屏幕中找到图像。如果您有一个小图像,例如,需要单击的按钮并希望在屏幕上找到它,这将非常有用。这些功能由 PyScreeze 模块提供,该模块随 PyAutoGUI 一起安装。

屏幕截图功能需要枕头模块。OS X 使用该命令,该命令随操作系统一起提供。Linux 使用该命令,该命令可以通过运行 来安装。

screenshot() 函数

调用将返回一个 Image 对象(有关详细信息,请参阅枕头或 PIL 模块文档)。传递文件名字符串会将屏幕截图保存到文件中,并将其作为 Image 对象返回。

>>> import pyautogui
>>> im1 = pyautogui.screenshot()
>>> im2 = pyautogui.screenshot('my_screenshot.png')

在1920 x 1080屏幕上,该功能大约需要100毫秒 - 它不快,但并不慢。screenshot()

如果您不想查看整个屏幕的屏幕截图,还有一个可选的关键字参数。您可以传递要捕获的区域的左侧、顶部、宽度和高度的四个整数元组:region

>>> import pyautogui
>>> im = pyautogui.screenshot(region=(0,0, 300, 400))

定位功能

注意:从版本 0.9.41 开始,如果 locate 函数找不到提供的图像,它们将引发而不是返回 。
如果您有图像文件,则可以在屏幕上直观地找到它。例如,假设计算器应用正在您的计算机上运行,如下所示:
在这里插入图片描述
如果您不知道计算器按钮所在位置的确切屏幕坐标,则无法调用 and 函数。计算器每次启动时都可能出现在稍微不同的位置,导致您每次都重新找到坐标。但是,如果您有按钮的图像,例如 7 按钮的图像:moveTo(),click()
…您可以调用该函数来获取屏幕坐标。返回值是一个 4 整数元组:(左、上、宽、高)。可以传递此元组以获取该区域中心的 X 和 Y 坐标。如果在屏幕上找不到该图像,则 引发 。

>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png')
>>> button7location
Box(left=1416, top=562, width=50, height=41)
>>> button7location[0]
1416
>>> button7location.left
1416
>>> button7point = pyautogui.center(button7location)
>>> button7point
Point(x=1441, y=582)
>>> button7point[0]
1441
>>> button7point.x
1441
>>> button7x, button7y = button7point
>>> pyautogui.click(button7x, button7y)  # 点击找到7按钮的中心
>>> pyautogui.click('calc7key.png') # 要点击找到7按钮的中心的快捷方式版本

可选的关键字参数指定函数在屏幕上定位图像的准确性。如果函数由于像素差异可以忽略不计而无法定位图像,这将很有帮助:confidence

>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png', confidence=0.9)
>>> button7location
Box(left=1416, top=562, width=50, height=41)

注意:您需要安装 OpenCV 才能使用该关键字
该函数结合了和:locateCenterOnScreen(),locateOnScreen(),center()

>>> import pyautogui
>>> x, y = pyautogui.locateCenterOnScreen('calc7key.png')
>>> pyautogui.click(x, y)

在 1920 x 1080 屏幕上,定位函数调用大约需要 1 或 2 秒。这对于动作视频游戏来说可能太慢了,但适用于大多数目的和应用程序。

有几个"定位"功能。他们都开始看屏幕(或图像)的左上角,然后向右看,然后向下看。参数可以是

locateOnScreen(image, grayscale=False)- 返回(左,上,宽,高)在屏幕上首次找到的实例的坐标。如果在屏幕上找不到,则引发。imageImageNotFoundException
locateCenterOnScreen(image, grayscale=False)- 返回 (x, y) 坐标,该坐标是屏幕上第一个找到的 实例的中心。如果在屏幕上找不到,则引发。imageImageNotFoundException
locateAllOnScreen(image, grayscale=False)- 返回一个生成器,该生成器为图像在屏幕上的位置生成(左、上、宽、高)元组。
locate(needleImage, haystackImage, grayscale=False)- 返回 (左、 顶部、 宽度、 高度) 第一个找到的实例的坐标。如果在屏幕上找不到,则引发。needleImagehaystackImageImageNotFoundException
locateAll(needleImage, haystackImage, grayscale=False)- 返回一个生成器,该生成器(左、上、宽、高)元组,用于在 中找到的位置。needleImagehaystackImage
"查找全部"函数可以在 for 循环中使用,也可以传递给: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)]

这些"定位"功能相当昂贵;他们可能需要整整一秒钟才能运行。加快速度的最佳方法是传递一个参数(一个 4 整数元组(左、上、宽、高))以仅搜索屏幕的较小区域,而不是全屏:region

>>> import pyautogui
>>> pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))

灰度匹配

(可选)您可以传递到定位函数以提供轻微的加速(约 30%左右)。这会降低图像和屏幕截图中的颜色饱和度,从而加快定位速度,但可能导致误报匹配。grayscale=True

>>> 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()

>>> import pyautogui
>>> pix = pyautogui.pixel(100, 200)
>>> pix
RGB(red=130, green=135, blue=144)
>>> pix[0]
130
>>> pix.red
130

如果只需要验证单个像素是否与给定像素匹配,请调用该函数,向其传递它所表示颜色的 X 坐标、Y 坐标和 RGB 元组:pixelMatchesColor()

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (0, 0, 0))
False

可选的关键字参数指定每个红色、绿色和蓝色值在仍然匹配时可以变化的程度:tolerance

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (140, 125, 134))
False
>>> pyautogui.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10)
True

标签:PyAutoGUI,pyautogui,鼠标,函数,100,屏幕,left
来源: https://blog.csdn.net/qq_43108964/article/details/123199628