Python桌面自动化操作:pyautogui安装与使用全解析
[id_83[id_1238450508]715572]

我们之前讲过如何使用 Python 在浏览器里实现页面的自动化操作。无论采用哪种方式来实现,都是借助定位页面中的元素,进而进行相应的操作。
今天我们来聊一聊怎样在桌面达成自动化操作。浏览器页面自动化操作是这样的,桌面自动化操作也是如此,都需要先确定鼠标在桌面的位置,接着依据定位的位置去执行相应的操作。
[id_1059680021]
我们的主人公是 pyautogui。它是一个纯 Python 的 GUI 自动化工具。借助它,程序能够自动控制鼠标和键盘的一系列操作。这样就能达到自动化测试的目的。
[id_339062818]
pip3 install pyautogui
安装好了就可以直接使用了。
鼠标操作鼠标移动
桌面操作最基本的就是鼠标操作了,我们可以控制鼠标的移动:
# 移动鼠标
pyautogui.moveTo(200,400[id_1003082531]2)
pyautogui.moveRel(200,500,duration=2)
整个桌面以左上角作为坐标轴的原点。所有的操作都依据这个原点来确定操作位置。
第一行是将鼠标移至指定的像素位置,该位置坐标为(200,400)。第二行代码是使鼠标按照当前点向右移动 200px 且向下移动 400px 的方向进行移动。
两行代码都有一个参数叫 duration,这个参数的作用是表示移动时间,也就是要在指定的时间内完成移动操作,其单位是秒。
运行这两行代码,观察屏幕鼠标的变化,是不是很神奇?
我们还可以获取鼠标位置:
print(pyautogui.position())
这很容易理解,即获取鼠标在当下屏幕里的坐标位置。运行这行代码后,我们能够得到诸如以下的信息:
[id_611758992]
鼠标点击
我们的鼠标通常有左右两个按键,而有些高级的鼠标在中间还有一个按键。
我的鼠标只有两个按键,中间没有按键,唉~
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()
[id_1201418979]'screenshot.png')
rgb = im.getpixel((100, 500))
print(rgb)
match 是通过 pyautogui 来判断像素颜色是否匹配的,即 pyautogui.pixelMatchesColor( 这个操作所得到的结果就是 match 。500,500,(12,120,400))
print(match)
第一个是获取屏幕截图的函数,此函数能够返回一个 Pillow 的 image 对象;第二个是获取屏幕截图中特定坐标点的颜色,会返回 rgb 颜色值;第三个是把指定坐标点的颜色与目标颜色进行对比,进而返回布尔值。
我们再来升级一下需求:
我现在要在屏幕上找到 edge 浏览器的图标,你会怎么做?
通常的做法是先知晓 edge 浏览器的图标是什么样子,是绿色还是蓝色,是胖的还是瘦的。接着在屏幕上进行图标匹配,一直找到一个图标与我们的目标图标相同,这样就得到了结果。
于是,我们的代码如下:
# 图像识别(一个)
oneLocation 是通过 pyautogui.locateOnScreen 函数获取到的。'1.png')
print(oneLocation)
# 图像识别(多个)
allLocation 等于 pyautogui 在屏幕上进行全区域查找所得到的结果。'1.png')
print(list(allLocation))
你能够在桌面之上截取某个应用的图标,将其保存为图片。接着,运用上面的几行代码进行识别。倘若识别成功,你将会得到类似如下的结果。
Box(left=20, top=89, width=33, height=34)
[Box(left=20, top=89, width=33, height=34)]
这是图片在桌面所处的位置,要是找不到图片,就会给出 None 作为返回结果。
键盘输入键盘函数
键盘输入有下面几个常用的函数:
举个例子,大家平时输入感叹号(!)是怎么操作键盘的?
按住 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 生成的密码。'请输入密码')
print(password)
# 普通输入框
input = pyautogui.prompt('请输入指令:')
print(input)
总结
pyautogui 的基本知识已介绍完毕。这个 python 模块功能强大,其函数简单易懂,对 python 初学者较为友好。学习这些基本知识后,你可运用它们的组合来实现一些有趣的桌面自动化操作,快去尝试吧!
(完)
看完本文有收获?请转发分享给更多人
关注「Python那些事」,做全栈开发工程师
点「在看」的人都变好看了哦