在Python中如何使用GUI自动化控制键盘和鼠标来实现高效的办公

2020-12-22 10:51:35 浏览数 (1)

参考链接: 使用Python进行鼠标和键盘自动化

在计算机上打开程序和进行操作的最直接方法就是,直接控制键盘和鼠标来模仿人们想要进行的行为,就像人们坐在计算机跟前自己操作一样,这种技术被称为“图形用户界面自动化”,也可称为“GUI自动化” 

将 GUI 自动化看成是对一个机械臂编程。你可以对机械臂编程,让它敲键盘或移动鼠标。对于涉及许多无脑点击或填表的任务,这种技术特别有用。 pyautogui 模块包含了一些函数,可以模拟鼠标移动、按键和滚动鼠标滚轮。 

 这是我的GUI上部分,还有下一部分在下一篇文章里,如果帮到你的话,记得点个赞 

 文章目录

 1.1 安装pyautogui 模块1.2 解决程序出现的错误,及时制止1.2.1 通过任务管理器来关闭程序

   1.2.2 暂停和自动防故障设置1.3 控制鼠标移动1.3.1 移动鼠标1.3.2 获取鼠标位置

   1.4 控制鼠标交互1.4.1 点击鼠标1.4.2 拖动鼠标1.4.3 滚动鼠标

   1.5 处理屏幕1.5.1 捕获屏幕快照1.5.2 分析屏幕快照

1.1 安装pyautogui 模块 

在cmd命令行界面输入 pip install pyautogui 国内会有延迟,可能出现超时读取数据失败,多安装几遍就好了,建议安装时候保持界面在安装界面,保持你的宽带最大程度的给与这个安装进程 安装完毕后在python界面引入模块  

1.2 解决程序出现的错误,及时制止 

在开始 GUI 自动化之前,你需要知道如何解决可能发生的问题。Python 能以很快的速度移动鼠标并击键。实际上,它可能太快,从而导致其他程序跟不上。而且, 如果出了问题,但你的程序继续到处移动鼠标,可能很难搞清楚程序到底在做什么,或者如何从问题中恢复。你可能没有办法及时关闭IDLE运行窗口或者是DOS界面的python运行窗口,幸而python有几种办法来防止或者恢复这种错误。 

1.2.1 通过任务管理器来关闭程序 

windows中可以使用 Ctrl Alt Delete键来启动,并且在进程中进行关闭,或者直接注销计算机来阻止程序的乱作为 

1.2.2 暂停和自动防故障设置 

(1)可以告诉脚本在每次调用函数以后有暂停的时间来允许我们关闭窗口,可以通过设置pyautogui.PAUSE来规定暂停的秒数。这个只针对pyautogui指令有效。其它指令不会受影响 (2)pyautogui也有自动防故障功能。将鼠标移到屏幕的左上角,这将导致 pyautogui 产生 pyautogui .FailSafeException 异常。你可以使用try和except语句来处理这种异常,也可以让程序自动发生崩溃而停止。  将pyautogui.FAILSAFE置为True将启动自动防故障 

1.3 控制鼠标移动 

pyautogui的鼠标函数使用x,y坐标。原点的横纵纵坐标都为0,原点在屏幕的左上角,x的坐标为从左向右递增,y的坐标为从上向下递增,所有的坐标都是正整数,没有负数坐标,如果你的屏幕分辨率为1920×1080,那么右下角的坐标为(1919,1079) pyautogui.size() 函数返回两个整数的元组,包含屏幕的宽和高的像素数。   

1.3.1 移动鼠标 

pyautogui.moveTo() 函数将鼠标立即移动到屏幕的指定位置。表示 x、y 坐标的整数值分别构成了函数的第一个 和第二个参数。可选的 duration 整数或浮点数表示的关键字参数,指定了将鼠标移到目的位置所需的秒数。如果不指定,默认值是零,意为立即移动。  如上所示,上面的代码运行时,鼠标从运行前的工作位置移动到第一个点,然后移向下一个点,如此循环十次 当然,鼠标也可以以当前工作位置为起点,来移动鼠标。利用moveRle函数,第一个参数设置为负数意为向左移动,第二个参数设置为负数意为向上移动,第一个参数为0意为横坐标不变,第二个参数为0意为着纵坐标不变。  

1.3.2 获取鼠标位置 

position()函数可以返回当前鼠标的位置,即由x,y组成的元组  

1.4 控制鼠标交互 

随着我们知道了鼠标在屏幕上的位置,我们就可以学着来点击,拖动和滚动鼠标。 

1.4.1 点击鼠标 

(1)如果向计算机发送虚拟的鼠标点击,就要调用pyautogui.click()函数,默认为在当前的位置点击鼠标左键,如果需要在其他地方点击,需要传入分别代表x和y的第一个和第二个参数 (2)如果想指定鼠标按键,可以传入button参数,参数值可以设定为left,middle或者right 分别代表左键,中键,右键 (3)pyautogui.mouseDown()意为按下鼠标按键,pyautogui.mouseUp()意为松开鼠标按键 (4)pyautogui.doubleClick() 函 数 只 执 行 双 击 鼠 标 左 键 。 pyautogui.rightClick() 和pyautogui.middleClick() 函数将分别执行双击右键和双击中键。 

1.4.2 拖动鼠标 

拖动即移动鼠标,按着一个按键不放来移动屏幕上的位置,例如:可以在文件夹中拖动文件来移动位置,或者将文件等拉入发送框内相当于复制粘贴的操作 pyautogui提供了一个pyautogui.dragTo()和pyautogui.dragRel()函数,相当于从指定位置拖动和从当前位置的区别。传入两个相当于x和y的参数。 下面我们将打开windows自带的paint程序,来演示鼠标拖动 

#! python3

#DisplayDrag.py-To paint the picture in the software of paint.

import pyautogui,time

time.sleep(5)

pyautogui.click() #Start a point to draw a picture

temp=200

while temp>0:

    pyautogui.dragRel(temp,0,duration=0.2) #move right

    temp=temp-10

    pyautogui.dragRel(0,-temp,duration=0.2) #move up

    pyautogui.dragRel(-temp,0,duration=0.2) #move left

    temp=temp-10

    pyautogui.dragRel(0,temp,duration=0.2) #move down

上面的代码所示为设置一个temp循环变量,并让程序先休眠五秒,方便你找到画图开始的位置并定位。  

1.4.3 滚动鼠标 

最后一个 pyautogui 鼠标函数是 scroll()。你可以向它提供一个整型参数,说明向上或向下滚动多少单位。单位的意义在每个操作系统和应用上不一样,所以你必须试验,看看在你的情况下滚动多远。滚动发生在鼠标的当前位置。传递正整数表示向 上滚动,传递负整数表示向下滚动。  

可以将上图的结果粘到粘贴板,然后利用休眠函数,定位到粘贴板,然后向上翻滚100个单位,我的计算机翻滚10000个单位,看到的效果比较明显  

1.5 处理屏幕 

你的 GUI 自动化程序没有必要盲目地点击和输入。pyautogui 拥有屏幕快照的 功能,可以根据当前屏幕的内容创建图形文件。这些函数也可以返回一个 Pillow 的 Image 对象,包含当前屏幕的内容。 

1.5.1 捕获屏幕快照 

利用pyautogui.screenshot()来捕捉屏幕快照,将该捕捉快照赋予一个变量,通过向捕捉对象的getpixel()函数传入x,y的参数来返回一个元组,包含三个整数,意为着RGB的颜色值  

1.5.2 分析屏幕快照 

假设你的 GUI 自动化程序中,有一步是点击蓝色选项。在调用 click() 方法之前, 你可以获取屏幕快照,查看脚本要点击处的像素。可以利用语句来判断跟原来的颜色是否相同,如果它的颜色和灰色按钮不一样, 那么程序就知道出问题了。意外也许是窗口发生了意外的移动,也许是弹出式对话框挡住了该按钮。这时不应该继续(可能会点击到错误的东西,造成严重破坏),程序可以 “看到”它没有点击在正确的东西上,并自行停止。

0 人点赞