使用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 | 100, 100, 2, pyautogui.easeInQuad) #开始慢,后边快 pyautogui.moveTo( |
更多参考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 | 200,y=200,button='right') pyautogui.mouseDown(x= |
鼠标滚动
鼠标滚动使用scroll
函数
1 | 500,x=100,y=200)#光标移动到(100,200)处,页面向上滚500像素 pyautogui.scroll( |
键盘控制功能
write()函数
此函数将键入传递的字符串中的字符,要在每个字符键入时添加延迟间隔可以使用interval
参数,这个函数一次只能键入一个字符
1 | "Hello World!",interval=0.25) pyautogui.write( |
press()、keyDown()、keyUp()函数
press()
按下一个键然后松开它,keyDown()
按住某个键,keyUp()
松开某个键
1 | 'shift') #按住shift pyautogui.keyDown( |
hold()上下文管理器
1 | with pyautogui.hold('shift'): |
相当于
1 | 'shift') pyautogui.keyDown( |
hotkey()函数
1 | 'ctrl', 'shift', 'esc') pyautogui.hotkey( |
相当于
1 | 'ctrl') pyautogui.keyDown( |
关键字
1 | ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', |
消息框功能
PyAutoGui提供了四种消息框功能
alert()函数
1 | "OK",text="text",title="title") pyautogui.alert(button= |
显示效果:
confirm()函数
1 | "test",title="title",buttons=['OK','Cancel','none'])#注意这里是buttons,即可以设置多个按键 pyautogui.confirm(text= |
显示效果:
prompt()函数
1 | "test",title="title",default="ewrw") pyautogui.prompt(text= |
显示效果:
password()函数
1 | 'test',title='title',default='123',mask='*') pyautogui.password(text= |
显示效果:
如果按取消则返回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
'test.png', region=(0,0, 300, 400)) pyautogui.locateOnScreen(
灰度匹配
可以传递grayscale=True给locate函数加速(大约30%左右),这会加快定位速度,但可能导致误报匹配
1 | import pyautogui |
像素匹配
要获取屏幕中像素的RGB颜色可以使用getpixel()
函数
1 | import pyautogui |
或作为单个函数调用pixel()
函数,偶尔会报错,不稳定
1 | import pyautogui |
如果要验证某点像素值与给定像素是否匹配,则可以调用pixelMatchesColor()
函数,tolerance
为像素值匹配时可以变化的程度。
1 | import pyautogui |