关于python:Python自动操作-GUI-神器PyAutoGUI

8次阅读

共计 3718 个字符,预计需要花费 10 分钟才能阅读完成。

咱们以前讲过怎么应用 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 常识欢送返回公众号:Python 编程学习圈,发送“J”即可收费获取,每日干货分享

正文完
 0