使用PyAutoGui操作键盘和鼠标
简介
PyAutoGui是一个可以控制鼠标和键盘的python库,当需要完成一些繁琐且重复的工作时,可以使用这个库来帮助完成
安装
1 | pip install pyautogui |
使用
写在前面
导入
1 | import pyautogui |
故障安全
如果鼠标位于主监视器的四个角的任意一个时,它将触发pyautogui.FailSafeException,调用每个PyAutoGui函数时,有0.1s的延迟可以将鼠标移动到四个角中的任意一个位置,这个延迟的时间可由pyautogui.PAUSE设置,如果不需要故障保护可以设置pyautogui.FAILSAFE=FALSE
鼠标控制功能
屏幕和鼠标位置
屏幕上的位置由笛卡尔坐标引用,原点位于左上角处,X和Y均是从0开始
1 | 0,0 X increases --> |
所以1920*1080的屏幕右下角像素为(1919,1079)
1 | pyautogui.size()#获取屏幕的大小 |
鼠标移动
鼠标移动使用moveTo功能
1 | >>>pyautogui.moveTo(100,200,1)#移动到100,200处,移动的时间为1s |
如果参数是None,则该处坐标使用之前鼠标的位置
1 | >>>pyautogui.moveTo(None,500)#X坐标使用之前鼠标位置的X坐标,Y移动到500 |
move()函数是将坐标移动到相对之前位置的几个像素上
1 | >>>pyautogui.moveTo(100,200)#将光标移动到(100,200) |
鼠标拖动
鼠标拖动有函数dragTo()、drag(),除此之外还有一个button关键字,用来设置用什么键拖动
1 | >>>pyautogui.dragTo(100,200,2,button='left')#将鼠标左键在2s拖动到(100,200) |
补间/缓动函数
使用该函数可以让光标在移动过程中的速度发生变化
1 | pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) #开始慢,后边快 |
更多参考https://pypi.python.org/pypi/PyTweening
鼠标点击
点击函数为click(),默认为点击左键
1 | >>>pyautogui.click(x=100,y=200,button='right',clicks=2,interval=0.25)#点击(100,200)位置处,右键双击,两次按键之间相隔0.25s |
此外还有doubleClick()和tripleClick(),参数类似。除此之外还有rightClick()函数,参数也类似
mouseDown()和mouseUp()
鼠标按下和松开分别用mouseDown()和mouseUp()函数
1 | pyautogui.mouseDown(x=200,y=200,button='right') |
鼠标滚动
鼠标滚动使用scroll函数
1 | pyautogui.scroll(500,x=100,y=200)#光标移动到(100,200)处,页面向上滚500像素 |
键盘控制功能
write()函数
此函数将键入传递的字符串中的字符,要在每个字符键入时添加延迟间隔可以使用interval参数,这个函数一次只能键入一个字符
1 | pyautogui.write("Hello World!",interval=0.25) |
press()、keyDown()、keyUp()函数
press()按下一个键然后松开它,keyDown()按住某个键,keyUp()松开某个键
1 | pyautogui.keyDown('shift') #按住shift |
hold()上下文管理器
1 | with pyautogui.hold('shift'): |
相当于
1 | pyautogui.keyDown('shift') |
hotkey()函数
1 | pyautogui.hotkey('ctrl', 'shift', 'esc') |
相当于
1 | pyautogui.keyDown('ctrl') |
关键字
1 | ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', |
消息框功能
PyAutoGui提供了四种消息框功能
alert()函数
1 | pyautogui.alert(button="OK",text="text",title="title") |
显示效果:

confirm()函数
1 | pyautogui.confirm(text="test",title="title",buttons=['OK','Cancel','none'])#注意这里是buttons,即可以设置多个按键 |
显示效果:

prompt()函数
1 | pyautogui.prompt(text="test",title="title",default="ewrw") |
显示效果:

password()函数
1 | pyautogui.password(text='test',title='title',default='123',mask='*') |
显示效果:

如果按取消则返回None
截图功能
pyautogui的截图功能使用的是pillow模块
截图函数
1 | import pyautogui |
如果参数传递文件名字符串则将截图保存到文件,并且返回image图像
在1920*1080屏幕上,screenshot函数大约需要100毫秒(实测约36ms)
可以用region来选取截图的范围
1 | import pyautogui |
定位功能
如果你有要点击窗口的某个位置,但是这个按钮的位置随每次打开窗口都在发生变化。只要你有这个按钮的图像可以通过locateOnScreen()函数查找
1 | import pyautogui as pag |
如果找不到图像则返回None
可选参数confidence(需安装OpenCV),用于设置因为像素点差异而引起的无法找到图像
1 | import pyautogui |
定位功能实际使用大约需要200ms(将PAUSE时间取消)
如果要找到全部图像则使用locateAllOnScreen()函数
1 | import pyautogui |
定位功能非常耗时,最好的方法就是传递一个region参数来限制搜索区域
1
2 import pyautogui
pyautogui.locateOnScreen('test.png', region=(0,0, 300, 400))
灰度匹配
可以传递grayscale=True给locate函数加速(大约30%左右),这会加快定位速度,但可能导致误报匹配
1 | import pyautogui |
像素匹配
要获取屏幕中像素的RGB颜色可以使用getpixel()函数
1 | import pyautogui |
或作为单个函数调用pixel()函数,偶尔会报错,不稳定
1 | import pyautogui |
如果要验证某点像素值与给定像素是否匹配,则可以调用pixelMatchesColor()函数,tolerance为像素值匹配时可以变化的程度。
1 | import pyautogui |