目录
- GUI自动化工具
- 鼠标
- 鼠标移动
- 鼠标拖动
- 鼠标 补间/缓动
- 鼠标点击
- 鼠标的滚动功能
- 键盘
GUI自动化工具
PyAutoGUI可在Windows / Mac / Linux和Python 2&3上运行。
pip install pyautogui
注意:在运行PyAutoGUI库时请加入以下2行代码,防止程序失控,进行补救措施
故障保护机制
在每次PyAutoGUI调用之后设置2.5秒的暂停:
当故障安全模式为时True,将鼠标移到左上角将会弹出pyautogui.FailSafeException,这可能会中止当前运行的程序:
pyautogui.FAILSAFE = True # 保护措施,避免失控鼠标
如果屏幕分辨率为1920*1080,那么左上角的坐标为(0,0)
右下角的坐标是(1919,1079)(因为坐标始于0,而不是1)
X坐标从左侧的0开始,向右增加。
Y坐标从顶部的0开始,向下增加。
鼠标移动
pyautogui.moveTo(None, y) # None可以为坐标传递该值,以表示“当前鼠标光标位置
pyautogui.moveTo(x, None)
例如
pyautogui.moveTo(100, 200) # 鼠标移动到x轴100像素,y轴200像素的位置pyautogui.moveTo(None, 300) # 鼠标移动到x轴100像素,y轴300像素的位置
pyautogui.moveTo(400, None) # 鼠标移动到x轴400像素,y轴300像素的位置pyautogui.moveTo(x, y, [duration = t]) # 在给定时间内将鼠标移动到屏幕指定位置 duration(以秒为单位)
x,y是目标位置的横纵坐标,duration指定鼠标光标移动到目标位置所需要的秒数,
t可以为整数或浮点数,省略duration参数表示立即将光标移动到指定位置
(在PyAutoGUI函数中,所有的duration关键字参数都是可选的)
如果持续时间小于pyautogui.MINIMUM_DURATION该运动将是即时的。默认pyautogui.MINIMUM_DURATION值为0.1。
这里的x,y不再是目标位置的坐标,而是偏移量
例如:
pyautogui.move(100,0) # 表示光标相对于当前所在位置(100, 200)向右移动100个像素(200, 200)
鼠标拖动
PyAutoGUI的dragTo()和drag()功能也有类似的参数作为moveTo()和move()功能。此外,他们有一个button可以被设置为关键字’left’,‘middle’,'right’在拖动时按住该鼠标键不放。
pyautogui.dragTo(x, y, [duration=t], button= 'left') # 按住鼠标左键,将鼠标拖动到指定位置pyautogui.dragTo(x, y, [duration=t], button= 'middle') # 按住鼠标中键,将鼠标拖动到指定位置
pyautogui.dragTo(x, y, [duration=t], button= 'right') # 按住鼠标右键,将鼠标拖动到指定位置
这里的x,y不再是目标位置的坐标,而是偏移量
使用方法和dragTo()一样
鼠标 补间/缓动
补间或缓动功能指示鼠标移至目的地时的进度。通常,当在一段时间内移动鼠标时,鼠标将以恒定的速度沿直线直接移向目标。这称为线性补间或线性缓动函数。
PyAutoGUI在pyautogui模块中还有其他补间功能。
moveTo(),move(),dragTo()和drag()方法都可以使用该功能,可通过传递第四个参数来使鼠标光标以指定的线性函数进行移动。
总持续时间仍与传递给函数的参数相同。
pyautogui.easeInQuad:开始缓慢移动,然后朝着目标加快。
pyautogui.easeOutQuad:鼠标指针开始移动速度快,但速度逐渐减慢
pyautogui.easeInOutQuad:开始和结束快,中间慢
pyautogui.easeOutQuad是相反的:把鼠标指针开始移动速度快,但速度减慢,因为它接近目的地。
pyautogui.easeOutElastic将冲过目标进行“橡皮筋”式来回移动直到它稳定在目的地。
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeOutQuad) # 鼠标指针开始移动速度快,但速度逐渐减慢
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInOutQuad) # 开始和结束快,中间慢
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInBounce) # 鼠标移动到目标位置进行反弹
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInElastic) # 将冲过目标进行“橡皮筋”式来回移动直到它稳定在目的地
这些补间功能是从Al Sweigart的PyTweening模块复制的:
https://github.com/asweigart/pytweening 不必安装此模块即可使用补间功能。
如果要创建自己的补间函数,请定义一个函数,该函数在0.0(代表鼠标移动的起点)和1.0(代表鼠标移动的终点)之间使用单个float参数,并在0.0和之间返回一个float值1.0。
鼠标点击
click() 、rightClick() 、middleClick()、 doubleClick()、tripleClick()均可传递以下参数:
x和y:将鼠标移动到目标区域
duration:鼠标移动目标位置的时间
button:要指定不同的鼠标键点击,‘left’ 左键,'middle’中键, 'right’右键
clicks:要进行多次单击,请将整数传递给clicks关键字参数
interval:指定点击之间的暂停量(以秒为单位)
moveTo()与click() 在点击之前合并调用,可以为click()传递x, y参数:
pyautogui.click(x, y) # 移动到目标位置,使用鼠标左键点击要指定不同的鼠标键点击,传递’left’,‘right’,'middle’等参数:
pyautogui.click(x, y, [button='left/right/middle'])要进行多次点击,请将整数传递给clicks关键字参数。
pyautogui.click(clicks=2) # 连续点击2次pyautogui.click(clicks=2) # 连续点击3次
interval关键字参数,是以指定两次点击之间的暂停时间(以秒为单位)
pyautogui.click(clicks=2, interval=0.25) # 连续点击2次,两次点击之间的暂停时间0.25秒综合使用
pyautogui.click(x=100, y=200, duration=2, clicks=2, interval=0.25, button='right')# 移动到x轴100像素 y轴200像素的位置,移动时间为2秒
# 进行右键点击2次,每次点击间隔时间0.25秒
pyautogui.mouseUp() # 释放鼠标左键
鼠标单击和拖动包括按下鼠标按钮并向上释放鼠标按钮。
如果要单独执行这些操作,请调用mouseDown()和mouseUp()方法。
例如
pyautogui.mouseDown(button='left', x=100, y=200, duration=2) # 先移动到目标位置按下鼠标左键(开始)pyautogui.mouseUp(button='left', x=300, y=400, duration=2) # 移动到目标位置后释放鼠标左键(结束)
此方法是将 dragTo()方法的拖动效果 拆开使用。可控制鼠标的点击和释放效果。
鼠标的滚动功能
可以通过调用scroll()方法并传递整数来滚动鼠标滚轮。
pyautogui.scroll(50) # 控制窗口上下滚动(滚动发生在鼠标的当前位置)填入正数为向上滚动pyautogui.scroll(-50) # 控制窗口上下滚动(滚动发生在鼠标的当前位置)填入负数为向下滚动
在不同平台上,滚动量会有所不同。(可选)可以传递x和y参数,以在执行滚动之前移动鼠标光标。
例如
在OS X和Linux平台上,PyAutoGUI也可以通过调用hscroll()函数执行水平滚动。
pyautogui.hscroll(10) # 向右滚动pyautogui.hscroll(-10) # 向左滚动
键盘
typewrite() 方法 模拟键盘输
要在按下每个字符键之间添加延迟间隔,请为interval关键字参数传递一个int或float值。
pyautogui.typewrite('Hello world!', interval=0.25) # 从键盘输入Hello world,每隔0.25秒输入一个字符除了单个字符串,还可以向typewrite()函数传递键字符串的列表
例如:
# 输出结果为catVV
typewrite()只能按下单字符键,无法按Shift或ctrl等组合键。
注意:只能输入英文
pyautogui.press('left') # 按下左键 (按下并释放)
还可以将字符串列表传递给press()
例如
利用press()方法可以实现中文输入
例如
pyautogui.press([ 'n', 'i'], interval=0.5) # press 可以对单个字符或者列表进行操作
pyautogui.press([ 'h', 'a', 'o'], interval=0.5)
pyautogui.press([ 's', 'h', 'i'], interval=0.5)
pyautogui.press([ 'j', 'i', 'e'], interval=0.5)
pyautogui.press( ' ')
press()方法实际上只是keyDown()和keyUp()函数的包装,它们模拟按下一个键然后释放它。
例如:
pyautogui.press( 'left') # 按左箭头键 (按下后释放)
pyautogui.press( 'left') # 按左箭头键 (按下后释放)
pyautogui.press( 'left') # 按左箭头键 (按下后释放)
pyautogui.keyUp( 'shift') # 释放shift键(进行释放)
总结
pyautogui.keyDown() #根据传入的键字符串,向计算机发送虚拟的按键(按下)
pyautogui.keyUp() #根据传入的键字符串,向计算机发送虚拟的释放(释放)
pyautogui.press() #前面两个方法的封装,模拟完整的击键(按下并释放)
为了方便快捷地按下热键或键盘快捷键,hotkey()可以传递几个键的字符串,这些字符串将按顺序按下,然后以相反的顺序释放。
例如:
# 相当于这段代码
pyautogui.keyDown( 'ctrl')
pyautogui.keyDown( 'shift')
pyautogui.keyDown( 'esc')
pyautogui.keyUp( 'esc')
pyautogui.keyUp( 'shift')
pyautogui.keyUp( 'ctrl')
例如:
pyautogui.hotkey( 'ctrl','c')# 相当于
pyautogui.keyDown( 'ctrl')
pyautogui.keyDown( 'c')
pyautogui.keyUp( 'c')
pyautogui.keyUp( 'ctrl')pyautogui.hotkey( 'ctrl','v')
# 相当于
pyautogui.keyDown( 'ctrl')
pyautogui.keyDown( 'v')
pyautogui.keyUp( 'v')
pyautogui.keyUp( 'ctrl')
pyautogui.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’]
键盘键字符串
含义
‘a’,‘b’,‘c’,‘A’,‘C’,‘1’,‘2’,‘3’,’!’,’@’,’#'等
单个字符的键
‘enter’
回车
‘esc’
ESC键
‘shiftleft’,‘shiftright’
左右Shift键
‘altleft’,‘altright’
左右Alt键
‘ctrlleft’,‘ctrlright’
左右Ctrl键
‘tab’(or ‘\t’)
Tab键
‘backspace’,‘delete’
Backspace键和Delete键
‘pageup’,‘pagedown’
Page Up 和Page Down键
‘home’,‘end’
Home键和End键
‘up’,‘down’,‘left’,‘right’
上下左右箭头键
‘f1’,‘f2’,'f3’等
F1至F12键
‘volumemute’,‘volumeup’,volumedown’
静音,放大音量和减小音量键
‘pause’ 暂停键
‘capslock’,‘numlock’,‘scrolllock’
Caps Lock,Num Lock和 Scroll Lock键
‘insert’
Insert键
‘printscreen’
Prtsc或Print Screen键
‘winleft’,‘winright’
左右Win键(在windows上)
‘command’
Command键(在OS X上)
‘option’
Option键(在OS X上)