Python自动操作神器PyAutoGUI的使用教程


Posted in Python onJune 16, 2022

我们以前讲过怎样使用 Python 在浏览器中实现页面自动化操作,不管用哪种方式实现,都是通过定位页面中的元素来进行相应的操作。

今天我们来聊一聊如何在桌面实现自动化操作。与浏览器页面自动化操作类似,桌面自动化操作也是需要定位鼠标在桌面的位置,然后根据定位的位置执行对应的操作。

GUI 控制神器

我们今天的主人公是 pyautogui,pyautogui 是一个纯 Python 的 GUI 自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。

这个模块的安装也是老一套:

pip3 install pyautogui

安装好了就可以直接使用了。

鼠标操作

鼠标移动

桌面操作最基本的就是鼠标操作了,我们可以控制鼠标的移动:

# 移动鼠标
pyautogui.moveTo(200,400,duration=2)
pyautogui.moveRel(200,500,duration=2)

整个桌面是以左上角为坐标轴的原点,所有的操作都以这个原点,来确定操作位置。

第一行是将鼠标移动到指定的像素(200,400)位置,第二行代码是将鼠标按照当前点向右移动200px,向下移动400px这个方向移动。

两行代码中都有一个共同的参数 duration,这个参数表示移动时间,即在指定时间内完成移动操作,单位是秒。

运行这两行代码,观察屏幕鼠标的变化,是不是很神奇?

我们还可以获取鼠标位置:

print(pyautogui.position())  

这个很好理解,就是获取鼠标在当前屏幕中的坐标位置,运行这行代码,我们会得到诸如下面的信息:

Point(x=400, y=900)

鼠标点击

通常,我们的鼠标有左右两个按键,高级点的鼠标中间还有个按键。

我的鼠标只有两个按键,中间没有按键,唉~

pyautogui针对这三个按键操作都有相应的处理:

# 鼠标点击,默认左键
pyautogui.click(100,100)   
# 单击左键
pyautogui.click(100,100,button='left')  
# 单击右键
pyautogui.click(100,300,button='right') 
# 单击中间 
pyautogui.click(100,300,button='middle')  

鼠标点击,如果不指定 button 参数,默认是点击左键,前面两个参数就是点击坐标的位置。

运行这段代码,看看你的桌面会发生什么?

鼠标除了点击操作,还有双击操作:

# 双击左键
pyautogui.doubleClick(10,10)  
# 双击右键
pyautogui.rightClick(10,10)   
# 双击中键
pyautogui.middleClick(10,10) 

操作函数也很简单,相信大家一眼就能看明白,如果一眼看不明白,请多看几眼!

熟悉前端的小伙伴可能会马上联想到,鼠标操作有按下和释放的过程,我们屏幕操作也有对应的控制:

# 鼠标按下
pyautogui.mouseDown()   
# 鼠标释放
pyautogui.mouseUp()    

鼠标拖动

我们可以控制鼠标拖动到指定坐标位置,并且设置操作时间:

pyautogui.dragTo(100,300,duration=1)   

这个运行效果和前面移动类似。

根据前面移动的经验,我们也有按照方向拖动鼠标:

pyautogui.dragRel(100,300,duration=4) 

鼠标滚动

在桌面操作中,我们有时候需要滚动鼠标到达向上或者向下的位置,这时候我们可以使用 scroll 这个函数来控制:

pyautogui.scroll(30000) 

参数是整数,表示向上或向下滚动多少个单位,这个单位根据不同的操作系统可能不一样。如果向上滚动,传入正整数,向下滚动传入负整数。

屏幕处理

获取屏幕截图

我们先来假设一个场景:我现在要在屏幕上找到一个红色的点,你会怎么做?通常的做法是拿到这个红色点的颜色值,然后再对屏幕上的点逐个进行比较,直到找到为止。

pyautogui 为我们这个操作场景提供了支持,分别有三个函数可以完成这三件事情。

im = pyautogui.screenshot()
im.save('screenshot.png')
rgb = im.getpixel((100, 500))
print(rgb)
match = pyautogui.pixelMatchesColor(500,500,(12,120,400))
print(match)

第一个是获取屏幕截图函数,它可以返回一个 Pillow 的 image 对象; 第二个是获取屏幕截图中指定坐标点的颜色,返回 rgb 颜色值;第三个是将指定坐标点的颜色和目标的颜色进行比对,返回布尔值。

我们再来升级一下需求:

我现在要在屏幕上找到 edge 浏览器的图标,你会怎么做?

通常的做法是先知道 edge 浏览器的图标长啥样,是绿色还是蓝色,是胖的还是瘦的,对吧?然后再在屏幕上去进行图标的匹配,直到找到一个图标跟我们目标图标一样,就得到了结果。

于是,我们的代码如下:

# 图像识别(一个)
oneLocation = pyautogui.locateOnScreen('1.png')
print(oneLocation)  

# 图像识别(多个)
allLocation = pyautogui.locateAllOnScreen('1.png')
print(list(allLocation))

你可以在桌面上将某个应用的图标截取下来,保存为图片,然后使用上面几行代码来识别,识别成功,你会返回类似下面的结果:

Box(left=20, top=89, width=33, height=34)
[Box(left=20, top=89, width=33, height=34)]

这就是图片在桌面的位置,如果找不到图片,就会返回 None。

键盘输入

键盘函数

键盘输入有下面几个常用的函数:

  • keyDown():模拟按键按下
  • keyUP():模拟按键松开
  • press():模拟一次按键过程,即 keyDown 和 keyUP 的组合
  • typewrite():模拟键盘输出内容

举个例子,大家平时输入感叹号(!)是怎么操作键盘的?

按住 shift 按键,然后再按住 1 按键,就可以了。用 pyautogui 控制就是:

pyautogui.keyDown('shift')    
pyautogui.press('1')    
pyautogui.keyUp('shift')   

运行上面的代码,如果你的鼠标是放在编辑框中,你会得到一个感叹号!

我们还可以直接输出内容:

pyautogui.typewrite('python', 1)

第一个参数是输出的内容,第二个参数是间隔时间,单位是秒。

运行上面代码,你的编辑器里面就会每隔1秒钟按顺序输出 python 的6个字母。

特殊符号

有时我们需要输入键盘的一些特殊的符号按键,比如 换行、方向键等,这些有相对应的键盘字符串表示:

pyautogui.typewrite(['p','y','t','h','o','n','enter'])   

运行上面代码,编辑器里面就会输出 python 之后换行。

其他特殊按键对应的字符串请参考官方说明。

快捷键

如果我要复制一个内容,大部分情况下会使用快键键 ctrl + c,按照上面讲的,我们应该这么实现:

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')

这样写起来很麻烦,而且需要掌控按键的按下和释放的顺序。

pyautogui 为我们提供了一个快捷的函数:

pyautogui.hotkey('ctrl','c')

实现的效果和上面的4行代码相同。

信息框

当你在模拟一个桌面操作的时候,如果有分支操作需要根据实际情况来判断,你是不是需要有一个地方可以让你选择走哪个分支?

pyautogui 贴心地考虑到了这种情况,你可以通过弹出一个选择框来中断当前的操作,选择操作分支。

way = pyautogui.confirm('领导,该走哪条路?', buttons=['农村路', '水路', '陆路'])
print(way)

这里就是我们 HTML 页面的 confirm 选择框,选择了选项之后,我们可以获取到选择的选项,然后基于这个选项做判断,进入相应的操作分支。

除了选择确认框之外,还有其他一些提示信息框:

# 警告框
alert = pyautogui.alert(text='警告!敌军来袭!', title='警告框')
print(alert)
# 密码框
password = pyautogui.password('请输入密码')
print(password)
# 普通输入框
input = pyautogui.prompt('请输入指令:')
print(input)

总结

pyautogui 的基本知识就给大家介绍到这里,这个 python 模块的功能十分强大,函数都非常简单,对 python 初学者比较友好。学了这些基本知识之后,你可以运用这些基本知识的组合,去实现一些有趣的桌面自动化操作,快去尝试一把吧!

以上就是Python自动操作神器PyAutoGUI的使用教程的详细内容,更多关于Python PyAutoGUI的资料请关注三水点靠木其它相关文章!


Tags in this post...

Python 相关文章推荐
Python专用方法与迭代机制实例分析
Sep 15 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
python中的数据结构比较
May 13 Python
Python爬虫学习之翻译小程序
Jul 30 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
利用python 下载bilibili视频
Nov 13 Python
python 爬取京东指定商品评论并进行情感分析
May 27 Python
Python必备技巧之函数的使用详解
Apr 04 Python
Python安装使用Scrapy框架
Apr 12 Python
python内置模块之上下文管理contextlib
Jun 14 #Python
Python时间操作之pytz模块使用详解
Django框架之路由用法
Jun 10 #Python
深入理解pytorch库的dockerfile
Jun 10 #Python
如何利用python实现列表嵌套字典取值
Jun 10 #Python
python中filter,map,reduce的作用
Jun 10 #Python
Django框架中模型的用法
Jun 10 #Python
You might like
PHP 上传文件的方法(类)
2009/07/30 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
python学习教程之使用py2exe打包
2017/09/24 Python
python实现flappy bird小游戏
2018/12/24 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
物业管理计划书
2014/01/10 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
Python图像处理之图像拼接
2021/04/28 Python