您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

程序员用Python实现自动化控制键盘和鼠标

时间:2020-06-07 17:26:28  来源:  作者:

要解决什么问题

在我们实际工作生活中,有许多重复性的工作,比如新员工入职流程。除了员工个人信息的不同,其他的流程应该是完全一样,因此此类工作完全可以自动化解决。但是问题来了,有的流程需要填写Excel表格,而有些流程需要填写网页表格,这就导致可能比较复杂。那么有没有办法,一个通用的办法来解决这些问题呢?答案是肯定有,我们用最简单的方法,通过Python来控制键盘和鼠标。

程序员用Python实现自动化控制键盘和鼠标

 

实现思路

对于本章的内容我觉得可以帮我们几乎完成任何事情,因为我们可以通过程序来模拟键盘和鼠标的任何操作,这就意味着我们的程序可以像一个机器人一样,根据我们的指令去做任何事情。我们对电脑的操作也就是键盘和鼠标了,因此如果可以通过程序控制键盘鼠标,那么也就意味着我们可以用程序实现任何事情。

当然了,针对某些场景,我们仅仅能够操作鼠标和键盘,还是不能搞定。因为键盘和鼠标仅仅是输入,我们无法获取相应输入操作的输出,比如鼠标点击了某个按钮,我们不知道这个点击操作是否被正确的响应了。那么我们就需要去对输入操作的结果进行一些判定,比如某个按钮的操作完成后,会弹出成功或失败的提示框。仅仅通过键盘和鼠标,我们是无法感知是否有提示框弹出,更不可能知道弹出框的内容是什么。

那么怎么解决这个问题呢?我们前面学习过PIL模块,这里我们可以通过该模块的来进行图片解析,从而确定输入执行后对应的输出是否正确。这样,我们的程序就有一个比较完成的交互行为。

相关模块的安装及介绍

本节将会介绍本章自动化控制键盘和鼠标中会使用到的相关模块。

pyperclip模块

pyperclip模块是一个跨平台的粘贴板模块,实现了复制和粘贴功能。可以通过pip命令进行安装,命令如下。

pip install pyperclip

下面是一个简单的使用pyperclip模块的例子。

>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'

pyautogui模块

pyautogui模块是一个面向人类的跨平台GUI自动化模块,可以用编程的方式控制键盘和鼠标,也就是给我们提供了一种通过程序来控制键盘和鼠标的方式。通过pip命令可以进行安装,安装过程如下所示。

PS C:Program Files (x86)Python3.6.8Scripts> pip3 install pyautogui
Collecting pyautogui
Using cached https://files.pythonhosted.org/packages/ec/e6/4aec992002f5bdb3de852978181faa47f79dc176b5447bf9fda2b1a985c6/PyAutoGUI-0.9.47.tar.gz
Collecting pymsgbox (from pyautogui)
Using cached https://files.pythonhosted.org/packages/ac/e0/0ac1ac67178a71b92e46f46788ddd799bb40bff40acd60c47c50be170374/PyMsgBox-1.0.7.tar.gz
Collecting PyTweening>=1.0.1 (from pyautogui)
Using cached https://files.pythonhosted.org/packages/b9/f8/c32a58d6e4dff8aa5c27e907194d69f3b57e525c2e4af96f39c6e9c854d2/PyTweening-1.0.3.zip
Collecting Pillow (from pyautogui)
Using cached https://files.pythonhosted.org/packages/86/00/52d0e56d787c437cd5e6f39929d1ed53b37cbe01280457e29d677b86eceb/Pillow-6.1.0-cp36-cp36m-win32.whl
Collecting pyscreeze>=0.1.21 (from pyautogui)
Using cached https://files.pythonhosted.org/packages/51/11/878e1319ccb41dce8aaf1b6af84d5088d5f4a40fda0348e51b3d1d53f96b/PyScreeze-0.1.22.tar.gz
Collecting pygetwindow>=0.0.5 (from pyautogui)
Using cached https://files.pythonhosted.org/packages/a3/e1/0a96db293bbcb56dd08209f6c1275e9282385526a8900a3411d669b140ee/PyGetWindow-0.0.7.tar.gz
Collecting mouseinfo (from pyautogui)
Using cached https://files.pythonhosted.org/packages/bb/06/07882cebab86cae3c59a1cc99587ccb39ba29f0ba34b463d859df48a2575/MouseInfo-0.0.4.tar.gz
Collecting pyrect (from pygetwindow>=0.0.5->pyautogui)
Using cached https://files.pythonhosted.org/packages/2f/68/bd7bf96fc44217e769f27912e6c9bb3e9987cba286054af6120448ce8212/PyRect-0.1.4.tar.gz
Collecting pyperclip (from mouseinfo->pyautogui)
Using cached https://files.pythonhosted.org/packages/2d/0f/4eda562dffd085945d57c2d9a5da745cfb5228c02bc90f2c74bbac746243/pyperclip-1.7.0.tar.gz
Installing collected packages: pymsgbox, PyTweening, Pillow, pyscreeze, pyrect, pygetwindow, pyperclip, mouseinfo, pyautogui
Running setup.py install for pymsgbox ... done
Running setup.py install for PyTweening ... done
Running setup.py install for pyscreeze ... done
Running setup.py install for pyrect ... done
Running setup.py install for pygetwindow ... done
Running setup.py install for pyperclip ... done
Running setup.py install for mouseinfo ... done
Running setup.py install for pyautogui ... done
Successfully installed Pillow-6.1.0 PyTweening-1.0.3 mouseinfo-0.0.4 pyautogui-0.9.47 pygetwindow-0.0.7 pymsgbox-1.0.7 pyperclip-1.7.0 pyrect-0.1.4 pyscreeze-0.1.22

比如,鼠标的双击,单击和右击等操作,示例代码如下。

import pyautogui as lazy_boy

lazy_boy.click()
lazy_boy.doubleClick()
lazy_boy.rightClick()
lazy_boy.middleClick()

PIL模块

PIL模块是一个Python图像库模块,它包含了很多子模块,我们这里的例子将只使用ImageGrab模块用于图像操作。下面是的代码片段,展示了ImageGrab的简单用法。

from PIL import ImageGrab

def screenshots():
screen_width, screen_height = lazy_boy.size()
rect = (0, 0, screen_width, screen_height)
img = ImageGrab.grab(rect)
return img

代码实现

到现在相关的准备工作已经完成,接下来看看具体实现。

编写伪码

Python代码实现中,将先介绍pyautogui模块的一些基本操作,然后再介绍一个简单的例子,那就是让我们的程序自动打开Notepad++,新建一个文件,输入一段Python代码,最后将该文件保存为Python文件。

# pyautogui模块的基本操作

# 打开Notepad++
# 新建一个文件
# 输入Python代码
# 将该文件保存为Python文件

Python代码

下面的代码介绍pyautogui模块的基本用法,便于了解该模块的基本功能。

import pyautogui as lazy_boy

# 获取当前鼠标的坐标
current_x, current_y = lazy_boy.position()

# 鼠标操作
lazy_boy.moveTo(x, y)
lazy_boy.moveRel()
lazy_boy.locateOnScreen('./test.jpg')
lazy_boy.click(x, y) # 根据坐标x, y单击
lazy_boy.doubleClick()
lazy_boy.rightClick()
lazy_boy.middleClick()

# 拖拽鼠标
lazy_boy.mouseDown()
lazy_boy.dragTo()
lazy_boy.dragRel()
lazy_boy.mouseUp()
lazy_boy.scroll(200)

# 键盘操作
lazy_boy.typewrite(message='Hello world!', interval=0.5)
lazy_boy.press('esc')
lazy_boy.press('enter')
lazy_boy.keyDown('shift')
lazy_boy.keyUp('shift')
lazy_boy.hotkey('ctrl', 'c')
lazy_boy.hotkey('ctrl', 'v')

# 粘贴板操作
import pyperclip
pyperclip.copy('学习Python')
pyperclip.paste()

# 截屏
im = lazy_boy.screenshot('screenshot.png')
# 获取坐标位置的颜色
im.getpixel((x, y))
# 判断坐标(x, y)处的颜色是否为(r, g, b)
lazy_boy.pixelMatchesColor(x, y, (r, g, b))
# 在当前屏幕中查找指定图片(图片需要由系统截图功能截取的图),比如查找按钮坐标
coord = lazy_boy.locateOnScreen('button.png')
# 获取找到的按钮的中心坐标
x, y = lazy_boy.center(coord)
# 在该坐标点右击
lazy_boy.rightClick(x, y)

# 在坐标(120, 110)处输入"Python is a good language!"
lazy_boy.click(120, 110)
lazy_boy.typewrite('Python is a good language!')
# 为输入过程加入延迟
lazy_boy.typewrite('Python is a good language!', 0.3)

#
lazy_boy.FAILSAFE = True
lazy_boy.PAUSE = 1
下面的代码是一个实际案例,比较简单,用于打开Notepad++程序,并新建一个文件,输入两行Python代码,然后将该文件另存为"auto_crreate.py"。
为了点击保存按钮,我们需要提前将保存按钮截图,并存为save.png文件。
import pyperclip
import pyautogui as lazy_boy

lazy_boy.FAILSAFE = True
lazy_boy.PAUSE = 1

# 这个程序将自动打开Notpad++, 新建一个文件,并输入Python代码,最后将其保存为Python文件
lazy_boy.press('win')
lazy_boy.typewrite('Notepad++')
lazy_boy.press('enter')
lazy_boy.hotkey("ctrl", "n")
lazy_boy.typewrite("import osrnprint('Hello python')rn", 0.5)
pyperclip.copy("This is a test file")
pyperclip.paste()
lazy_boy.hotkey("ctrl", "s")
lazy_boy.typewrite("auto_create.py")

coord = lazy_boy.locateOnScreen('save.png')
print(coord)
# 获取定位到的图中间点坐标
x, y = lazy_boy.center(coord)
lazy_boy.click(x, y)

本文总结

本文介绍了一个非常实用的内容,用Python自动化控制键盘和鼠标,这样当我们遇到一些很棘手的问题,如果没有第三方库支持,那么我们就可以利用本章进行去解决。因为所有的事情都是可以通过键盘和鼠标来完成的,复杂的事情,我们可能需要更多代码和操作步骤,但终究都是可以被搞定的。因此,当读者遇到任何难题的时候,不要轻易彻底放弃,可以短暂搁置,让这件事一直盘旋在自己的脑海中,在空闲的时候,或者某一刻就会有思路从脑海中冒出来。



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  Tags: Python  点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  Tags: Python  点击:(4)  评论:(0)  加入收藏
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Tags: Python  点击:(6)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  Tags: Python  点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Python  点击:(8)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  Tags: Python  点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  Tags: Python  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(8)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条