GUI自动化工具
PyAutoGUI可在Windows / Mac / Linux和Python 2&3上运行。
pip install pyautogui
import pyautogui
注意:在运行PyAutoGUI库时请加入以下2行代码,防止程序失控,进行补救措施
故障保护机制
在每次PyAutoGUI调用之后设置2.5秒的暂停:
pyautogui.PAUSE = 2.5 # 为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
当故障安全模式为时True,将鼠标移到左上角将会弹出pyautogui.FailSafeException,这可能会中止当前运行的程序:
pyautogui.FAILSAFE = True # 保护措施,避免失控
鼠标
- size() 方法
pyautogui.size() # 返回屏幕宽高像素数的元组
如果屏幕分辨率为1920*1080,那么左上角的坐标为(0,0)
右下角的坐标是(1919,1079)(因为坐标始于0,而不是1)
X坐标从左侧的0开始,向右增加。
Y坐标从顶部的0开始,向下增加。
- position() 方法
pyautogui.position() # 返回鼠标光标的当前X和Y坐标
- onScreen() 方法
pyautogui.onScreen(x, y) # 检查XY坐标是否在屏幕上 返回True 和 False
鼠标移动
- moveTo() 方法
pyautogui.moveTo(x, y) # 将鼠标光标移动到传递的X和Y整数坐标
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。
- move()方法
pyautogui.move(x, y) # 将鼠标光标相对于其当前位置移动几个像素
这里的x,y不再是目标位置的坐标,而是偏移量
例如:
pyautogui.moveTo(100, 200) # 鼠标移动到x轴100像素,y轴200像素的位置
pyautogui.move(100,0) # 表示光标相对于当前所在位置(100, 200)向右移动100个像素(200, 200)
鼠标拖动
- dragTo() 方法
pyautogui.dragTo(x, y, [duration=t]) #将鼠标拖动到指定位置
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') # 按住鼠标右键,将鼠标拖动到指定位置
- drag()方法
pyautogui.drag(x, y, [duration=t]) # 将鼠标光标相对于其当前位置移动几个像素
这里的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.easeInQuad) # 开始缓慢移动,然后朝着目标加快
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:指定点击之间的暂停量(以秒为单位)
- click() 方法
pyautogui.click() # 默认在当前光标位置,使用鼠标左键点击
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秒
- rightClick() 方法
pyautogui.rightClick() # 默认在当前光标位置,使用鼠标右键点击
- middleClick() 方法
pyautogui.middleClick() # 默认在当前光标位置,使用鼠标中键点击
- doubleClick() 方法
pyautogui.doubleClick() # 默认在当前光标位置,双击鼠标左键
- tripleClick() 方法
pyautogui.tripleClick() # 默认在当前光标位置,鼠标左键点击三次
- mouseDown()和mouseUp()方法
pyautogui.mouseDown() # 按下鼠标左键
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参数,以在执行滚动之前移动鼠标光标。
例如
pyautogui.scroll(10, x=100, y=200) # 移动到目标位置,滚轮向上滚动
在OS X和Linux平台上,PyAutoGUI也可以通过调用hscroll()函数执行水平滚动。
pyautogui.hscroll(10) # 向右滚动
pyautogui.hscroll(-10) # 向左滚动
键盘
- typewrite() 方法
typewrite() 方法 模拟键盘输
pyautogui.typewrite('Hello world!') # 从键盘输入Hello world(向文本框发送字符串)
要在按下每个字符键之间添加延迟间隔,请为interval关键字参数传递一个int或float值。
pyautogui.typewrite('Hello world!', interval=0.25) # 从键盘输入Hello world,每隔0.25秒输入一个字符
除了单个字符串,还可以向typewrite()函数传递键字符串的列表
例如:
pyautogui.typewrite(['V','V','left','left','c','a','t']) # 按'V'键,'V'键,然后按左箭头两次,然后按'c'、'a'、't'
# 输出结果为catVV
typewrite()只能按下单字符键,无法按Shift或ctrl等组合键。
注意:只能输入英文
- press()方法
pyautogui.press('enter') # 按下回车键(按下并释放)
pyautogui.press('left') # 按下左键 (按下并释放)
还可以将字符串列表传递给press()
例如
pyautogui.press(['left', 'left', 'left'])
利用press()方法可以实现中文输入
例如
pyautogui.press('shift') # 切换输入法的中英文
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(' ')
- keyDown()和 keyUp()方法
press()方法实际上只是keyDown()和keyUp()函数的包装,它们模拟按下一个键然后释放它。
例如:
pyautogui.keyDown('shift') # 按下shift键(不进行释放)
pyautogui.press('left') # 按左箭头键 (按下后释放)
pyautogui.press('left') # 按左箭头键 (按下后释放)
pyautogui.press('left') # 按左箭头键 (按下后释放)
pyautogui.keyUp('shift') # 释放shift键(进行释放)
总结
pyautogui.keyDown() #根据传入的键字符串,向计算机发送虚拟的按键(按下)
pyautogui.keyUp() #根据传入的键字符串,向计算机发送虚拟的释放(释放)
pyautogui.press() #前面两个方法的封装,模拟完整的击键(按下并释放)
- hotkey()方法
为了方便快捷地按下热键或键盘快捷键,hotkey()可以传递几个键的字符串,这些字符串将按顺序按下,然后以相反的顺序释放。
例如:
pyautogui.hotkey('ctrl', 'shift', 'esc')
# 相当于这段代码
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() # 接收多个字符串参数,顺序按下,再按相反的顺序释放
-
通过对以下是有效字符串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’] -
完整的键盘键字符串如下:
键盘键字符串 | 含义 |
---|---|
‘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上) |
转载:https://blog.csdn.net/qq_44989881/article/details/102308217