程序员用Python实现自动化控制键盘和鼠标
off999 2024-12-05 15:19 18 浏览 0 评论
本文的主题为介绍如何通过程序自动化控制键盘和鼠标。
要解决什么问题
在我们实际工作生活中,有许多重复性的工作,比如新员工入职流程。除了员工个人信息的不同,其他的流程应该是完全一样,因此此类工作完全可以自动化解决。但是问题来了,有的流程需要填写excel表格,而有些流程需要填写网页表格,这就导致可能比较复杂。那么有没有办法,一个通用的办法来解决这些问题呢?答案是肯定有,我们用最简单的方法,通过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.8\Scripts> 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 os\r\nprint('Hello python')\r\n", 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自动化控制键盘和鼠标,这样当我们遇到一些很棘手的问题,如果没有第三方库支持,那么我们就可以利用本章进行去解决。因为所有的事情都是可以通过键盘和鼠标来完成的,复杂的事情,我们可能需要更多代码和操作步骤,但终究都是可以被搞定的。因此,当读者遇到任何难题的时候,不要轻易彻底放弃,可以短暂搁置,让这件事一直盘旋在自己的脑海中,在空闲的时候,或者某一刻就会有思路从脑海中冒出来。
相关推荐
- win10有产品id没有密钥(win10 我没有产品密钥)
-
WIN10,在左下角输入WINDOWSPOWERSHELL,然后点击系统查询结果第一项,在弹出的窗口中输入:(Get-WmiObject-query‘select*fromSoftware...
- win10截屏后找不到了(win10截屏后找不到了怎么办)
-
Win10系统截屏后没有更新通知并不是一个常见的问题。可能是由于系统设置或者安装的软件造成的。如果系统设置为静音或者禁用通知,那么截屏后不会有通知。另外,一些截屏软件可能会阻止系统通知,需要手动设置...
- 运行定时关机命令(运行定时关机命令怎么设置)
-
1、打开电脑,按住【Win+R】组合键,弹出运行命令,在编辑框内输入如下命令:shutdown-s-t3600;电脑定时关机运行2、shutdown-s-t3600命令的含义如下:shut...
- 键盘快捷键(键盘快捷键是哪个)
-
电脑键盘快捷键大全:Ctrl+1,2,3... 功能:切换到从左边数起第1,2,3...个标签Ctrl+A 功能:全部选中当前页面内容Ctrl+C 功能:复制当前选中内容Ctrl+D 功能:打开“添加...
- 宏基acer官网商城(宏基官方商城)
-
宏碁本本底部有个序列号标签,不是粉色的那个,粉色的是系统的序列号,白色的是本本的出厂序列号,上宏碁官网查查你的序列号就知道真假了。在盖子的后面就可以查询到序列号,或者是去网上查询宏碁笔记本在官网下...
- 网盘在哪里打开(华为网盘在哪里打开)
-
给你的是一个网盘地址吧,直接把这个地址放到浏览器地址栏就好了,如果有提取码,他会提示你输入提取码的。一般都是在网上找到百度云链接,然后把文件保存在自己的百度网盘文件夹里面的。打开百度网盘app,...
- win7sp1专业版(win7专业版vl)
-
Win7系统SP1是系统发布后第一个SP包x64是64位操作系统。Windows7指的是微软公司的Windows7操作系统ultimate指的是旗舰版(with表示伴随,说明这是提供商所提供...
- 手写输入法手写板怎么设置(手写输入法手写板怎么设置 iphone)
-
手写输入法设置方法:1、打开手机至桌面主页,保持手机处于工作状态; 2、在手机桌面主页列表找到设置,点击打开并进入设置主界面; 3、在设置主界面找到系统设置选项,点击打开并进入系统设置主界面; ...
-
- 推荐杀毒软件(下载杀毒软件最新版)
-
好的杀毒软件有360杀毒,金山毒霸,AVG杀毒等等。1,360杀毒,品牌介绍:360安全卫士品牌是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐...
-
2025-11-12 08:51 off999
- 百度云盘官网(百度云盘官网下载)
-
网盘在手机上面仅仅是一个图标,他是不占用手机硬盘的,当然,如果你从网盘上下载了文件到本地,下载的文件就会占用手机的硬盘空间。要找到这个文件,可以通过文件管理器来进行查找,也可以通过路径的方式来查找,但...
-
- 路由器设置管理系统(路由器设置管理员密码怎么设置)
-
电脑端:把华为路由器接通电源,并开启WIFI,如果你使用电脑PC端,请使用网线连接路由器;成功连接到路由器之后,打开电脑浏览器,在浏览器中输入IP地址:192.168.3.1即可进入华为路由器管理界面;进入我要上网页面。在上网方式下拉框中,...
-
2025-11-12 07:51 off999
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
