赞
踩
屏幕上的位置由 X 和 Y 笛卡尔坐标表示。X 坐标从左边的0开始,然后向右增加。与数学不同的是,Y 坐标从上面的0开始,然后向下增加。
左上角的像素位于坐标0,0。如果屏幕的分辨率是1920 x 1080,那么右下角的像素就是1919,1079(因为坐标是从0开始的,而不是1)。
Size ()函数将屏幕分辨率大小作为两个整数的元组返回。Position ()函数返回鼠标光标的当前 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 坐标,请将它们(作为两个整数参数或单个 tuple/list 参数和两个整数)传递给 onScreen ()函数,如果它们在屏幕的边界内,该函数将返回 True,如果不在,则返回 False。
例如:
>>> 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
MoveTo ()函数将鼠标光标移动到传递给它的 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) # 2秒内移动鼠标到X (100) Y (200)
(如果持续时间小于 pyautogui.MINIMUM _ DURATION,则移动将是即时的,默认情况下,pyautogui.MINIMUM _ DURATION 为0.1。)
如果希望将鼠标光标相对于其当前位置移动几个像素,请使用 move ()函数。此函数具有与 moveTo ()类似的参数。例如:
>>> pyautogui.moveTo(100, 200) #移动鼠标到X的100,Y的200。
>>> pyautogui.move(0, 50) # 将鼠标向下移动50像素。
>>> pyautogui.move(-30, 0) # 将鼠标向左移动30像素。
>>> pyautogui.move(-30, None) # 将鼠标向左移动30像素。
PyAutoGUI 的 dragTo ()和 drag ()函数具有与 moveTo ()和 move ()函数相似的参数。此外,他们有一个按钮关键字,可以设置为‘左’,‘中’,’右’鼠标按钮按住拖动。例如:
>>> pyautogui.dragTo(100, 200, button='left') # 拖动鼠标X到100,Y到200,同时按住鼠标左键
>>> pyautogui.dragTo(300, 400, 2, button='left') # 按住鼠标左键,在2秒内将鼠标拖动到X的300处,Y的400处
>>> pyautogui.drag(30, 0, 2, button='right') # 按住鼠标右键,在2秒内将鼠标向左拖动30像素
个性化控拖动是一个额外的功能,使鼠标的运动想象。如果您不关心这一部分,可以跳过这一部分。
在鼠标移动到目的地时,Teen 或 easy 函数指示鼠标的进度。通常,当鼠标在一段时间内移动时,鼠标以恒定的速度沿直线直接向目标移动。
PyAutoGUI 在 PyAutoGUI 模块中还有其他可用的 Tweing 函数。可以将 pyautogui.easeInQuad 函数作为第4个参数传递给 moveTo ()、 move ()、 dragTo ()和 drag ()函数,以使鼠标光标开始缓慢移动,然后加速到目标。总持续时间仍然与传递给函数的参数相同。Pyautogui.easeOutQuad 则相反: 鼠标光标开始快速移动,但在接近目标时速度减慢。
Pyautogui.easeOutElastic 会来回超过目的地和“橡皮筋”,直到到达目的地。
例如:
>>> 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) # 最后绑上橡皮筋
这些 tween 函数是从 Al Sweigart 的 Pytween 模块复制过来的: https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/PyTweening 这个模块不需要安装就可以使用 tween 函数。
如果您想要创建自己的 tween 函数,那么定义一个函数,该函数接受一个介于0.0(表示鼠标移动的开始)和1.0(表示鼠标移动的结束)之间的浮点参数,并返回一个介于0.0和1.0之间的浮点值。
Click ()函数模拟在鼠标当前位置单击左键鼠标。“点击”被定义为按下按钮,然后释放它。例如:
>>> pyautogui.click() # 点击鼠标
要在单击之前组合 moveTo ()调用,请为 x 和 y 关键字参数传递整数:
>>> pyautogui.click(x=100, y=200) # 移动到100,200,然后单击鼠标左键
若要指定要单击的不同鼠标按钮,请为按钮关键字参数传递“左”、“中”或“右”:
>>> pyautogui.click(button='right') # 鼠标右键双击
若要执行多次单击,请将一个整数传递给单击关键字参数。可选地,您可以传递浮点数或整数到间隔关键字参数,以指定单击之间以秒为单位的暂停次数。例如:
>>> pyautogui.click(clicks=2) # 双击鼠标左键
>>> pyautogui.click(clicks=2, interval=0.25) # 双击鼠标左键,但在单击之间有四分之一秒的暂停
>>> pyautogui.click(button='right', clicks=3, interval=0.25) ## 三次点击鼠标右键,在点击之间有0.25秒的停顿
作为一个方便的快捷方式,doubleClick ()函数将双击鼠标左键。它还具有可选的 x、 y、间隔和按钮关键字参数。例如:
>>> pyautogui.doubleClick() #执行左键双击
还有一个带有类似可选关键字参数的 tripleClick ()函数。
Right Click ()函数具有可选的 x 和 y 关键字参数。
鼠标点击和拖动是由按下鼠标按钮和释放它回来。如果希望分别执行这些操作,请调用 mouseDown ()和 mouseUp ()函数。它们有相同的 x,y 和按钮。例如:
>>> pyautogui.mouseDown(); pyautogui.mouseUp() # 是否与鼠标左键点击相同
>>> pyautogui.mouseDown(button='right') # 按下右边的按钮
>>> pyautogui.mouseUp(button='right', x=100, y=200) #将鼠标移动到100,200,然后释放右键向上
鼠标滚轮可以通过调用 roll ()函数并传递一个整数的“点击次数”来模拟滚动。在不同的平台上,“单击”的滚动量是不同的。可选地,可以为 x 和 y 关键字参数传递整数,以便在执行滚动之前移动鼠标光标。例如:
>>> pyautogui.scroll(10) # 向上滚动10“点击”
>>> pyautogui.scroll(-10) # 向下滚动10个“点击”
>>> pyautogui.scroll(10, x=100, y=100) #移动鼠标光标到100,200,然后向上滚动10 "点击"
在 OS X 和 Linux 平台上,PyAutoGUI 还可以通过调用 hroll ()函数来执行水平滚动:
>>> pyautogui.hscroll(10) #向右滚动10次点击
>>> pyautogui.hscroll(-10) #向左滚动10 "点击"
scroll()函数是 vscroll()的包装器,它执行垂直滚动。
主键盘函数是 write ()。此函数将在传递的字符串中键入字符。若要在按下每个字符键之间添加延迟间隔,请为间隔关键字参数传递 interval
例如:
>>> pyautogui.write('Hello world!') # 立即打印出“你好,世界!
>>> pyautogui.write('Hello world!', interval=0.25) # 打印出“Hello world!”,每个字符后面有0.25秒的延迟
要按下这些键,调用 press ()函数并从 pyautogui.KEYBOARD _ KEYS 中传递一个字符串给它,例如 enter、 esc、 f1。参见键盘键盘。
例如:
>>> pyautogui.press('enter') # press the Enter key
>>> pyautogui.press('f1') # press the F1 key
>>> pyautogui.press('left') # press the left arrow key
Press ()函数实际上只是 keyDown ()和 keyUp ()函数的包装器,它们模拟按下一个键然后释放它。这些函数可以自己调用。例如,要在按住 Shift 键的同时按左箭头键三次,请调用以下命令:
>>> pyautogui.keyDown('shift') # 按下shift键
>>> pyautogui.press('left') # 按左箭头键
>>> pyautogui.press('left') # 按左箭头键
>>> pyautogui.press('left') # 按左箭头键
>>> pyautogui.keyUp('shift') # 松开shift键
要按下与 write ()类似的多个键,需要传递一个字符串列表给 press ()。例如:
>>> pyautogui.press(['left', 'left', 'left'])
或者你可以设置按下次数:
>>> pyautogui.press('left', presses=3)
若要在每次按压之间添加延迟间隔,请为间隔关键字参数传递 interval 。
为了方便保存键,hold ()函数可以用作上下文管理器,并从 pyautogui.KEYBOARD _ KEYS 中传递一个字符串,比如 shift、 ctrl、 alt,这个键将在 with 上下文块期间保存。参见键盘键盘。
>>> 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键
为了方便按热键或键盘快捷键,热键()可以传递多个按顺序按下的按键字符串,然后按相反的顺序释放。这个代码:
>>> pyautogui.hotkey('ctrl', 'shift', 'esc')
相当于这个代码
>>> pyautogui.keyDown('ctrl')
>>> pyautogui.keyDown('shift')
>>> pyautogui.keyDown('esc')
>>> pyautogui.keyUp('esc')
>>> pyautogui.keyUp('shift')
>>> pyautogui.keyUp('ctrl')
若要在每次按压之间添加延迟间隔,请为间隔关键字参数传递interval
以下是传递给 press ()、 keyDown ()、 keyUp ()和 hotkey ()函数的有效字符串:
['\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']
PyAutoGUI 利用 PyMsgBox 中的消息框函数提供一种跨平台的纯 Python 方式来显示 JavaScript 风格的消息框。提供了四个消息框功能:
>>> alert(text='', title='', button='OK')
显示一个包含文本,标题和单个“确定”按钮的简单消息框。返回单击的按钮的文本。
>>> confirm(text='', title='', buttons=['OK', 'Cancel'])
显示带有“确定”和“取消”按钮的消息框。可以自定义按钮的数量和文本。返回单击的按钮的文本。
>>> prompt(text='', title='' , default='')
显示带有文本输入的消息框以及“确定”和“取消”按钮。返回输入的文本,如果单击“取消”则返回“无”。
>>> password(text='', title='', default='', mask='*')
显示带有文本输入的消息框以及“确定”和“取消”按钮。键入的字符显示为 * 。返回输入的文本,如果单击“取消”则返回“无”。
PyAutoGUI 可以截屏,将它们保存到文件中,并在屏幕中定位图像。这是有用的,如果你有一个小图像,例如,一个按钮,需要被点击,并希望在屏幕上找到它。这些特性由 PyScreeze 模块提供,该模块是与 PyAutoGUI 一起安装的。
屏幕截图功能需要Pillow模块。OS X 使用屏幕捕获命令,这是操作系统自带的。Linux 使用 scrot 命令,可以通过运行 sudo apt-get install scrot 来安装这个命令。
调用 screen shot ()将返回一个 Image 对象(有关详细信息,请参阅Pillow或 PIL 模块文档)。传递一个文件名字符串将把屏幕截图保存到一个文件中,并将其作为 Image 对象返回。
>>> import pyautogui
>>> im1 = pyautogui.screenshot()
>>> im2 = pyautogui.screenshot('my_screenshot.png')
在一个1920 x 1080的屏幕上,screenshot()截图功能大约需要100毫秒——它不快,但也不慢。
如果您不想要整个屏幕的截图,还有一个可选的 region 关键字参数。您可以传递区域的左边、顶部、宽度和高度的四个整数元组来捕获:
>>> import pyautogui
>>> im = pyautogui.screenshot(region=(0,0, 300, 400))
注意: 从版本0.9.41开始,如果 location 函数找不到提供的映像,它们将引发 ImageNotFoundException 而不是返回 Nothing。
如果你有一个图像文件,你可以在屏幕上直观地找到一些东西。例如,假设计算器应用程序在你的电脑上运行,看起来是这样的:
如果不知道计算器按钮的确切屏幕坐标,就不能调用 moveTo ()和 click ()函数。每次启动计算器时,它可能会出现在稍微不同的位置,导致您每次都要重新找到坐标。但是,如果你有一个按钮的图像,比如7号按钮的图像:
… 您可以调用 locateOnScreen (‘ calc7key.png’)函数来获取屏幕坐标。返回值是一个4-integer tuple: (左、上、宽、高)。这个元组可以传递给 center () ,以获得该区域中心的 X 和 Y 坐标。如果在屏幕上找不到图像,locateOnScreen ()会引发 ImageNotFoundException。
>>> import pyautogui >>> button7location = pyautogui.locateOnScreen('calc7key.png') >>> button7location Box(left=1416, top=562, width=50, height=41) #left,top图片的坐标x,y该位置并非图片中心位置而是左上角;width,height图片的长,宽 >>> 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 #返回图片中心坐标x,y >>> 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 才能使confidence关键字起作用。
LocateCenterOnScreen ()函数将 locateOnScreen ()和 center ()组合在一起:
>>> import pyautogui
>>> x, y = pyautogui.locateCenterOnScreen('calc7key.png')
>>> pyautogui.click(x, y)
在1920x1080屏幕上,定位函数调用大约需要1到2秒。这对于动作视频游戏来说可能太慢了,但是对于大多数目的和应用程序来说是可行的。
有几个“定位”函数。他们都开始看屏幕(或图像)的左上角,然后向右看然后向下看。参数可以是
● locateOnScreen(image, grayscale=False) - 返回屏幕上第一个找到的image实例的坐标(left, top, width, height). 如果没有在屏幕上找到,抛出ImageNotFoundException异常。
● locateCenterOnScreen(image, grayscale=False) - 返回屏幕上第一个找到的图像实例的中心坐标(x, y). 如果没有在屏幕上找到,抛出ImageNotFoundException异常。
● locateAllOnScreen(image, grayscale=False) - 返回一个生成器,生成图像在屏幕上的位置(left, top, width, height)元组
● locate(needleImage, haystackImage, grayscale=False) - 返回hayystackimage中第一个找到的needleImage实例的坐标(左,上,宽,高). 如果没有在屏幕上找到,抛出ImageNotFoundException异常。
● locateAll(needleImage, haystackImage, grayscale=False) - 返回一个生成器,该生成器生成haystackImage中找到needleImage的位置的元组(left, top, width, height)。
可以在 for 循环中使用“ location all”函数,也可以将其传递给 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整数的元组(左、上、宽、高)) ,只搜索屏幕的一个较小的区域,而不是全屏:
>>> import pyautogui
>>> pyautogui.locateOnScreen('someButton.png', region=(0,0, 300, 400))
可以选择将 grayscale = True 传递给定位函数,以稍微提高速度(大约30% 左右)。这会降低图像和截图的色彩饱和度,加快定位速度,但可能导致匹配不精准。
>>> import pyautogui
>>> button7location = pyautogui.locateOnScreen('calc7key.png', grayscale=True)
>>> button7location
(1416, 562, 50, 41)
要获得屏幕快照中像素的 RGB 颜色,请使用 Image 对象的 get敢像素()方法:
>>> import pyautogui
>>> im = pyautogui.screenshot()
>>> im.getpixel((100, 200))
(130, 135, 144)
或者作为一个单独的函数,调用Pixel() PyAutoGUI 函数,它是前面调用的包装器:
>>> import pyautogui
>>> pix = pyautogui.pixel(100, 200)
>>> pix
RGB(red=130, green=135, blue=144)
>>> pix[0]
130
>>> pix.red
130
如果您只是需要验证一个像素是否匹配给定的像素,那么调用 pixelMatchesColor ()函数,将它所代表的颜色的 X 坐标、 Y 坐标和 RGB 元组传递给它:
>>> 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。