Python控制桌面——pyautogui模块
目录
pyautogui可以用于实现自动化任务,如控制鼠标、键盘,进行屏幕截图等操作,方法与selenium、uiautomator2类似,基本属于一通百通,而pyautogui是我认为最容易上手的
GUI控制鼠标
防故障功能
如果在PC端直接使用该功能的话GUI会直接和你抢鼠标,因此为了避免出现鼠标被控制导致无法关闭程序首先需要了解的是GUI防故障功能
pyautogui.FAILSAFE =False
FAILSAFE
默认为True,这意味着当鼠标移动到最左上角时程序会自动停止,避免出现无法结束程序的问题
pyautogui.PAUSE = 1
该功能是GUI自带的停顿功能,上述代码意思是每次执行GUI指令时都要停顿1秒
获取屏幕分辨率
width, height = pyautogui.size()
移动鼠标到指定坐标
pyautogui.moveTo(200, 300, duration=1)
移动到x轴200、y轴300的位置,duration意思是移动花费的时间,几乎所有GUI指令都可以塞这个参数
获取鼠标位置
now_place = pyautogui.position()
# Point(x=666, y=300)
print(tuple(now_place))
# (666, 300)
获取鼠标当前坐标,可以直接转换类型为元组
鼠标点击/长按
pyautogui.click(200, 300) # 单击
pyautogui.doubleClick(200, 300) # 双击
当括号里不放任何参数时默认点击当前位置
pyautogui.mouseDown() # 鼠标按下
pyautogui.mouseUp() # 鼠标释放
鼠标拖拽
pyautogui.dragTo(100,300)
将鼠标拖拽到指定坐标
pyautogui.dragRel(xOffset=100,yOffset=300)
将鼠标往指定方向拖拽,xOffset是横轴,yOffset是纵轴
鼠标滚动
pyautogui.scroll(-500)
向下滚动500个单位
GUI控制键盘
pyautogui.keyDown('shift') # 按下shift
pyautogui.keyUp('shift') # 松开shift
pyautogui.press('shift') # 按一次shift
二者区别就是前者在没有收到keyUp不会松开按键,因此可以和其他按键组合(比如输出:!@#¥%……,亦或是ctrl+c复制ctrl+v粘贴)
pyautogui.typewrite('Hello,World', 1)
输出Hello,World
,每个单词间隔一秒,注意GUI无法输出中文以及中文符号
操作特殊按键
有时我们需要输入一些特殊的按键,比如向左的箭头,这些有相对应的键盘字符串表示,例如:
pyautogui.typewrite(['T','i','s','left','left','h',]) # 输出:This
一些特殊按键对应的字符
键盘字符串 | 说明 |
---|---|
enter | 回车 |
esc | ESC键 |
shiftleft | 左SHIFT键 |
shiftright | 右SHIFT键 |
altleft | 左ALT键 |
altright | 右ALT键 |
ctrlleft | 左CTRL键 |
ctrlright | 右CTRL键 |
tab (\t) | TAB键 |
backspace | BACKSPACE键 |
delete | DELETE键 |
pageup | PAGE UP键 |
pagedown | PAGE DOWN键 |
home | HOME键 |
end | END键 |
up | 上箭头键 |
down | 下箭头键 |
left | 左箭头键 |
right | 右箭头键 |
f1 - f12 | F1 - F12键 |
volumemute | 静音键 |
volumedown | 声音变小键 |
volumeup | 声音变大键 |
pause | 暂停键 |
capslock | 大写锁定键 |
numlock | 数字锁定键 |
scrolllock | 滚动锁定键 |
insert | INSERT键 |
printscreen | PRINT SCREEN键 |
winleft | 左Win键(windows) |
winright | 右Win键(windows) |
command | Command键(Mac OS X) |
option | Option键(Mac OS X) |
GUI识别屏幕
获取屏幕快照
img = pyautogui.screenshot()
img.save('1.png')
截取当前屏幕的图像信息,并保存到目录下
识别图像
img = pyautogui.locateOnScreen('img.png')
print(img)
# Box(left=460, top=292, width=546, height=137)
pyautogui.moveTo(img[0], img[1])
判断'img.png'
这张图片是否存在于当前屏幕中,如果存在则赋值给img并将鼠标移动到该区域,否则报错
如果值存在,则返回类型为
Box(left=460, top=292, width=546, height=137)
left
: 矩形框左上角的 x 坐标为 460top
: 矩形框左上角的 y 坐标为 292width
: 矩形框的宽度为 546height
: 矩形框的高度为 137
识别多个图像
img_list = pyautogui.locateAllOnScreen('img.png')
当目标图片在屏幕上出现多次时将返回的坐标轴封装进列表,例如:
[Box(left=1280, top=344, width=22, height=22), Box(left=25, top=594, width=22, height=22)]
GUI的图像识别不是万能的,首先他不能进行识别度调节,然后也不能做灰度处理,这意味着它与复杂的图像处理基本无缘,如果想要做验证码校验、动态图像处理等复杂的程序建议使用OpenCV库