用GUI 自动化控制鼠标和键盘
GUI自动化,被称为 ‘图形用户界面自动化’。有人调侃过,有了GUI自动化,你的程序就像一个活人用户坐在计算机面前,能做任何事情,除了将咖啡泼在键盘上。
安装 pyautogui 模块
pyautogui模块可以向Windows,OS X 和Linux发送虚拟的键盘和鼠标点。根据不同的系统,在安装pyautogui之前,需要安装相关的依赖模块。
- Windows:免除了所有烦恼,直接安装就可以了;
- OS X:需要运行如下代码:
sudo pip3 install pyobjc-framework-Quartz
sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
- Linux:需要运行如下代码:
sudo pip3 install pytohn3-xlib
sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev
安装pyautogui的代码如下:
pip install pyautogui
下载之后,在交互式环境或者pycharm中import pyautogui, 如果没爆红,就说明安装成功了
# 导入模块后重命名,下面所有代码中的gui==pyautogui
Import pyautogui as gui
为了更好的体验
在自动运行过程中,运行的方向和本来的意图可能有偏差,为了防止各种意外发生,我们需要做出相关的预防措施。
- 暂停
我们可以告诉脚本,在每次函数调用之后等一会,在出问题的时候,让我们有机会去弥补(键盘和鼠标让我们来控制);要做到这一点,就需要将gui.PAUSE 设置为你想要暂停的秒数:
每个pyautogui函数调用后会等待1秒
gui.PAUSE = 1
- 自动防故障装置
pyautogui中的自动防故障功能,是你在尽快将鼠标向左上移动的时候,自动防故障系统会停止程序,gui.FAILSAFE=Flase会禁止这项功能,但是,为了更好让我们行使主宰的权利,还是打开比较好:
gui.FAILSAFE = True
控制鼠标移动
- 获取屏幕的像素数(屏幕的宽和高)
width, height = gui.size()
print(width, height)
- 鼠标的移动
gui.moveTo(x, y)
: 将鼠标移动到指定位置, x,y是坐标;gui.moveRel(x, y)
: 是相对于当前位置进行鼠标的移动,x,y是相对于当前位置的坐标;- 上面两个函数,还可以有一个关键字参数
duration
是将鼠标移动到目的位置所需要的秒数,默认值是0,表示立即移动,参数可以接收整数或者浮点数。
参考代码:
# 以正方形的模式,顺时针移动鼠标
for i in range(10):gui.moveTo(100, 100, duration=0.5)gui.moveTo(200, 100, duration=0.5)gui.moveTo(200, 200, duration=0.5)gui.moveTo(100, 200, duration=0.5)
# 也是按照正方形移动鼠标,只不过是在鼠标所在位置开始的
for i in range(5):gui.moveRel(200, 0, duration=0.5)gui.moveRel(0, 200, duration=0.5)gui.moveRel(-200, 0, duration=0.5)gui.moveRel(0, -200, duration=0.5)
- 获取鼠标位置
调用gui.position()
函数,可以获取鼠标当前的位置。函数返回的是一个元组,表示当前鼠标的位置(x,y坐标)
案例-----在终端中实时显示鼠标的位置
# 在终端中运行,提示按Ctrl-C可以关闭程序
print('Press Ctrl-C to quit.')
try:while True:x, y = gui.position()positionStr = 'X:' + str(x).rjust(4) + ' ' + 'Y:' + str(y).rjust(4)print(positionStr, end='')print('\b'*len(positionStr), end='', flush=True)
except KeyboardInterrupt:print('\nDone.')
这里解释以下\b'*len(positionStr), end='', flush=True
的作用:
因为每次鼠标的位置数据显示是需要在打印位置将上一次打印数据进行擦除的,就可以打印\b 退格转义字符;这个字符可以擦除屏幕当前行末尾的字符,利用*len(positionStr)
,将根据原来字符串的长度进行全部覆盖。
当然,flush=True是完成屏幕按照我们的期望进行刷新。
鼠标的点击
单击
鼠标的点击是调用gui.click()
函数,默认情况下是点击左键,点击发生在鼠标当前位置,当然,也可以通过传入参数来指定想要进行点击的位置;
那么,如果想点击右键呢,别担心,gui.click()
函数也是提供一个关键字参数button,值分别可以是‘left’,‘middle’,‘right’,分别对应单击鼠标的左键,中间以及右键。双击
gui.doubleClick : 执行双击鼠标左键
gui.rightClick: 执行双击右键
gui.middleClick: 执行双击中键鼠标的按下和释放
gui.mouseDown() : 按下鼠标按键
gui.mouseUp(): 释放鼠标按键
实际上,click是将上面两个按下和释放进行封装了而已。
- 拖动鼠标
‘拖动’意味着需要移动鼠标,同时需要按住一个按键不放。
gui.dragTo(x, y, duration=0)
: 将鼠标拖动到指定位置,x,y为指定的位置,duration默认是0,也可以自己进行关键字传参;
gui.dragRel(x,y,duration): 将鼠标拖动到相对当前位置的位置,参数传递和上面的一样;
案例-----在画图软件中,让鼠标自己进行画图
import time
time.sleep(3) # 在运行pycharm之后,进入到画图界面
gui.click() # 获取焦点
distance = 200
while distance > 0:gui.dragRel(distance, 0, duration=0.5)distance -= 5gui.dragRel(0, distance, duration=0.5)gui.dragRel(-distance, 0, duration=0.5)distance -= 5gui.dragRel(0, -distance, duration=0.5)
运行完的结果,就是这样的,不过,在运行之前,你要先选择铅笔或者画笔工具。
屏幕数据的处理
- 获取屏幕快照
使用 gui.screenshot()
函数 获取整个屏幕的快照
比如: image = gui.screenshot()
- 获取图片中相应位置的像素颜色
使用 .getpixel((x, y))
, 返回的是颜色RGB的一个元组
比如: color = image.getpixel((0, 0))
返回结果 (176,176,175)
- 对屏幕快照进行分析
使用: gui.pixelMatchesColor()
在获取屏幕快照,并使用.getpixel((x, y))
函数获取特定坐标处的像素颜色的RGB元组之后, 将我们想要与之匹配的坐标进行比对(使用的是gui.pixelMatchesColor() ),如果是完全一样的,则返回True,反之,则返回False;
- 图像识别
获取指定图片的坐标
可以通过gui.locateOnScreen('图片名.png')
获取图片文件的对应坐标,这个函数的返回值是一个4个整数的元组,分别是 图像左边的x坐标,顶边的y坐标, 宽度, 高度; 如果没有找到该图像,则返回None; 如果不止一个,那么则返回一个Generator对象,可以将其传递给list(), 然后进行遍历或者其他操作进行获取。获取坐标的中心位置
可以将坐标的数据传递给gui.center()
函数,获取这个指定图像的中心位置坐标
案例 ---- 根据指定图片进行双击打开,比如打开桌面的 我的电脑
import time
time.sleep(3)
# 一:最小化pycharm
loca1 = gui.locateOnScreen('close.png') # close.png是pycharm右上角最小化的图像
center = gui.center(loca1)
gui.click(center, duration=1)time.sleep(3)
# 1.根据图片找到指定位置的图片位置
loca2 = gui.locateOnScreen('computer.png') # computer.png是桌面的我的电脑的图像
# 2.获取中心位置
center = gui.center(loca2)
# 3. 双击指定位置
gui.doubleClick(center, duration=1)
键盘的控制
gui.tupewrite(‘输入的内容’ ,time)
函数向计算机发送虚拟按键,这些按键产生的效果,取决于当前获得焦点的窗口和文本输入框。一般需要先向文本输入框发送一次鼠标点击,确保它获取到焦点。
time是表示在每个内容打出后等待多长时间再进行下一个字的打印,是种渐进的打字机效果。
比如:
gui.click(150, 150)
gui.typewrite('Hello World!', 0.25)
- 按下和释放键盘
这个和鼠标的按下释放是一个道理,这里提供了 gui.keyDown() 和 gui.keyUp() 向键盘发送虚拟的按键和释放;同时 pyautogui还提供了.press() 函数, 它通过和按键/释放的配合,模拟完成一次完整的击键;
打印$美元字符串:
gui.keyDown('shift')
gui.press('4')
gui.keyUp('shift')
- 热键组合
‘热键’或‘快捷键’是一种组合,比如常用的Ctrl-C是复制, 其执行过程是,用户先按下Ctrl,再按下C,再释放C,最后释放Ctrl。
代码如下:
gui.keyDown('Ctrl')
gui.keyDown('C')
gui.keyUp('C')
gui.keyUp('Ctrl')
这个相对就比较复杂了,我们就可以使用hotkey()函数,它可以接收多个键字符串参数,按顺序按下,再按照相反的顺序释放,所以上面的代码简化如下:
gui.hotkey('Ctrl', 'C')
That's all...
用GUI 自动化控制鼠标和键盘相关推荐
- pyautogui自动化控制鼠标和键盘操作
pyautogui自动化控制鼠标和键盘操作 安装 pyautogui鼠标操作样例 pyautogui键盘操作样例 按键支持 提示信息 alert option password prompt 截屏 整 ...
- PyAutoGUI——自动化控制鼠标和键盘操作
PyAutoGUI模块通过屏幕xy坐标系统确定目标位置,控制鼠标和键盘发送虚拟击键和鼠标点击,完成点击按钮.填写表单等操作,在没有模块对应你要操作的无聊任务的时候,也不失为一个不错的选择. PyAut ...
- Python自动化控制鼠标和键盘操作—— PyAutoGUI
简 介:PyAutoGUI是一个Python语言的键鼠自动化库,简单来说和按键精灵的功能一样.但是因为是Python的类库,所以可以使用Python代码配合一些其他类库完成更加强大的功能,本文对PyA ...
- 通过python里面的pyautogui自动化控制鼠标和键盘操作
PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux). 安装 pip3 install pyautog ...
- python反恐精英基础版_cs客户端自动化控制鼠标和键盘操作,python+pyautogui
PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux). 安装 pip3 install pyautog ...
- pyautogui库自动化控制鼠标和键盘操作
常用操作 import pyautoguipyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep pyaut ...
- python使用笔记:pyautogui自动化控制鼠标和键盘
标题 安装 获取当前屏幕分辨率 pyautogui鼠标操作 获取/移动鼠标位置 鼠标点击 鼠标拖拽 移动后按下/松开 滚轮 pyautogui键盘操作 提示信息 alert 弹窗 option 选择框 ...
- python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
抖音上经常看到,魔兽玩家为了不掉线让女友一直帮忙按空格键,而我这条单身狗出去吃个饭就要继续排队几小时,无奈只能自力更生,下面让我向大家介绍下如何自动化控制鼠标键盘,让我们从重复无聊的工作中解放出来. ...
- python自动控制库_python PyAUtoGUI库实现自动化控制鼠标键盘
PyAutoGUI 不知道你有没有用过,它是一款用Python自动化控制键盘.鼠标的库.但凡是你不想手动重复操作的工作都可以用这个库来解决. 比如,我想半夜时候定时给发个微信,或者每天自动刷页面等操作 ...
最新文章
- MySQL关系数据库
- stm32启动文件ld md hd cl vl xl分析及选择
- ajax17,17个使用AJAX技术的数据表格控件
- 【POJ - 1961】Period(KMP,循环节问题)
- 转:OWASP发布Web应用程序的十大安全风险
- 操作DataTable
- 指数函数用计算机怎么计算器,万能计算器怎么使用 使用科学计算器方法
- QT5.1.0,QT4.8.0以及VC2010、VC2012的测试对比
- linux /etc/fstab详解
- 找最大ASCII字符
- “看到他的汇报,我彻底服了!”:这个工具能让你的图表多炫酷?
- Java接口:实现防盗门功能
- 信息时代的生活到底给我们带来了什么?
- Java 学习笔记 Day005 (补day5 的练习题)
- 可扩展区块链的墨客实践——硅谷陈小虎
- 神经网络中的梯度爆炸
- 互联网大脑的情绪,智商和梦境-互联网神经学系列第四篇
- 2020焊工(技师)考试题及焊工(技师)复审模拟考试
- Win10打开游戏提示需要新应用打开此ms-gamingoverlay的解决方法
- 专访简书刘英滕 | 未来,以「产品设计」定位自己的设计师会越来越多
热门文章
- 无需越狱,Android通话记录、通讯录、短信同步到iphone6
- 寻找5个数的中位数,只需6次比较的,思路与实现
- 火爆涨薪,还不来看看?成为2022年自动化测试工程师的7种技能
- 昨天写了这些骚代码,今天上班差点被同事揍了
- 计算机辅助功能应用,计算机辅助设计在艺术设计中有哪些应用
- 四月英语总结——《坚不可摧》
- 使用ChatGPT可以下载全景图
- python画黑白线条_python实现彩照转黑白以及图片转素描画
- 远程桌面连接出现 CredSSP 加密Oracle修正 错误
- 记录一次美团+小米+VIPKId+CVTE的Java后台开发面试经历