我们之前讲过如何使用Python在浏览器中实现页面自动化。无论使用哪种方法,都是通过定位页面中的元素来进行相应的操作。今天我们就来说说如何实现桌面操作的自动化。与浏览器页面自动化操作类似,桌面自动化操作也需要定位鼠标在桌面上的位置,然后根据定位的位置进行相应的操作。GUI控制神器我们今天的主角是pyautogui,它是一个纯Python的GUI自动化工具,通过它程序可以自动控制鼠标键盘的一系列操作,从而达到自动化测试的目的。这个模块的安装也是老办法:pip3installpyautogui安装后可以直接使用。鼠标操作鼠标移动桌面最基本的操作就是鼠标操作。我们可以控制鼠标的移动:#移动鼠标是坐标轴的原点,所有的操作都是以这个原点来确定操作位置。第一行是将鼠标移动到指定像素(200,400)位置,第二行代码是将鼠标根据当前点向右移动200px,向下移动400px。两行代码中都有一个共同的参数duration。该参数表示移动时间,即在指定时间内完成移动操作,单位为秒。运行这两行代码,观察鼠标在屏幕上的变化是不是很神奇?我们还可以获取鼠标位置:print(pyautogui.position())这个很好理解,就是获取鼠标在当前屏幕的坐标位置,运行这行代码,我们会得到如下信息下图:Point(x=400,y=900)mouseclick通常我们的鼠标有左右两个按键,高级鼠标中间还有一个按键。我的鼠标只有两个按键,中间没有按键。唉~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()鼠标拖动us可以控制鼠标拖动到指定坐标位置,并设置运行时间: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))打印(匹配)th一是获取截图功能,可以返回一个Pillow图片对象;二是获取截图中指定坐标点的颜色,返回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的结合比如键盘输出内容,输入感叹号(!)时,你平时是怎么操作键盘的?按住shift键,然后按1键,就完成了。pyautogui的控件是:pyautogui.keyDown('shift')pyautogui.press('1')pyautogui.keyUp('shift')运行上面的代码,如果你的鼠标在编辑框中,你会得到一个感叹号!我们也可以直接输出内容:pyautogui.typewrite('python',1)第一个参数是输出内容,第二个参数是间隔时间,单位秒。运行上面的代码,你的编辑器会每隔1秒依次输出python的6个字母。特殊符号有时候我们需要在键盘上输入一些特殊的符号键,比如换行符、方向键等,它们都有对应的键盘字符串表示:pyautogui.typewrite(['p','y','','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页面的确认选择框,select选项后,我们可以得到选中的选项,然后根据这个选项进行判断,进入相应的操作分支。除了选择确认框外,还有其他提示信息框:#Alertboxalert=pyautogui.alert(text='Warning!theenemyiscoming!',title='Alertbox')print(alert)#Passwordboxpassword=pyautogui.password('Pleaseenterthepassword')print(password)#普通输入框input=pyautogui.prompt('Pleaseenterthecommand:')print(input)总结pyautogui的基础知识,介绍给大家在这里,这个python模块的功能非常强大,而且功能非常简单,对python初学者比较友好。学完这些基础知识,你就可以结合这些基础知识,实现一些有趣的桌面自动化操作,快去试试吧!以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。
