Python控制桌面——pyautogui模块

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回车
escESC键
shiftleft左SHIFT键
shiftright右SHIFT键
altleft左ALT键
altright右ALT键
ctrlleft左CTRL键
ctrlright右CTRL键
tab (\t)TAB键
backspaceBACKSPACE键
deleteDELETE键
pageupPAGE UP键
pagedownPAGE DOWN键
homeHOME键
endEND键
up上箭头键
down下箭头键
left左箭头键
right右箭头键
f1 - f12F1 - F12键
volumemute静音键
volumedown声音变小键
volumeup声音变大键
pause暂停键
capslock大写锁定键
numlock数字锁定键
scrolllock滚动锁定键
insertINSERT键
printscreenPRINT SCREEN键
winleft左Win键(windows)
winright右Win键(windows)
commandCommand键(Mac OS X)
optionOption键(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 坐标为 460
  • top: 矩形框左上角的 y 坐标为 292
  • width: 矩形框的宽度为 546
  • height: 矩形框的高度为 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库

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值