抖音上经常看到,魔兽玩家为了不掉线让女友一直帮忙按空格键,而我这条单身狗出去吃个饭就要继续排队几小时,无奈只能自力更生,下面让我向大家介绍下如何自动化控制鼠标键盘,让我们从重复无聊的工作中解放出来。

一、 安装pyautogui模块

第一步先要安装pyautogui模块,如果有不会安装的可以查看我之前的文章:

《如何方便的安装各类python库》

Python能以你想象不到的速度移动鼠标和敲击键盘,实际上它有可能太快,导致其他程序跟不上(python:怪我喽),如果你写的程序失去控制最简单的方式是注销,ctrl+alt+del,通过注销,你会失去所有未保存的工作,但至少不需要等计算机完全重启。

更好的做法是设置pyautogui.Pause变量,让pyautogui函数调用在执行结束之后停顿一下。

Pyautogui也有自动防故障功能,将pyautogui.FAILSAFE设置为True的情况下尽可能快速的向左上移动鼠标,自动防故障功能会停止程序工作。

#设置pyautogui函数调用成功后停止0.5spyautogui.PAUSE = 0.5# 开启Pyautogui自动防故障功能 pyautogui.FAILSAFE = True

二、 控制鼠标

1. 获取屏幕大小

Pyautogui的鼠标函数使用x、y坐标,屏幕的左上角x、y都是零,向右x坐标增加,向下y坐标增加。

分辨率是指屏幕的宽和高有多少像素,如果屏幕的分辨率设置为1920*1080,那么左上角的坐标是(0, 0),右下角的坐标是(1919, 1079)

pyautogui.size()可以返回屏幕的宽和高

# 获取屏幕大小print(pyautogui.size())

2. 移动鼠标

Pyautogui.moveTo()函数可以将鼠标移动到指定地点,其中第一和第二个参数分别代表x、y的坐标的整数值(小数部分会被忽略),可选的duration关键字可设置将鼠标移动到指定位置所需要的秒数(可以为整数或浮点数),如果不指定默认为0,表示立即移动。

# 使用Pyautogui.moveTo()循环画正方形for i in range(5): pyautogui.moveTo(200, 200, duration=0.25) pyautogui.moveTo(400, 200, duration=0.25) pyautogui.moveTo(400, 400, duration=0.25) pyautogui.moveTo(200, 400, duration=0.25)

pyautogui.moveRel()函数相对于当前位置移动鼠标,也接受三个参数,第一个参数如果为正表示向右移动的像素数,第二个参数如果为正表示向下移动的像素数,如果为负则表示相反的方向,第三个参数duration和Pyautogui.moveTo()的一样。

# 使用pyautogui.moveRel循环画正方形for i in range(5): pyautogui.moveRel(200, 0, duration=0.25)pyautogui.moveRel(0, 200, duration=0.25)pyautogui.moveRel(-200, 0, duration=0.25)pyautogui.moveRel(0, -200, duration=0.25)

3. 获取鼠标位置

pyautogui.position()函数可以确定鼠标当前的位置。

下面是循环获取鼠标位置的代码,后面章节获取元素位置的时候需要用到它。

# 获取鼠标位置while True: print(pyautogui.position()) time.sleep(1)

4. 点击鼠标

pyautogui.click()函数,默认点击使用鼠标左键,点击鼠标当前位置,如果想点击其他位置,可传入x、y坐标作为可选的第一第二参数,如果想指定鼠标按键,需加入button关键字参数,示例如下:

# 在鼠标当前位置单击鼠标左键pyautogui.click()# 指定位置单击鼠标左键pyautogui.click(50, 500)# 指定位置单击鼠标右键pyautogui.click(50, 500, button='right')# 指定位置单击鼠标中键pyautogui.click(50, 500, button='middle')

双击鼠标操作,可传入x,y坐标在指定位置双击,示例如下:

# 双击鼠标左键pyautogui.doubleClick(50, 500)# 双击鼠标右键pyautogui.rightClick()# 双击鼠标中键pyautogui.middleClick()

5. 拖动鼠标

“拖动”意味着移动鼠标,同时按住一个键不放。

Pyautogui提供了pyautogui.dragTo()和pyautogui.dragRel()函数,分别实现将鼠标拖动到一个新的位置,或相对于当前的位置。

dragTo()和dragRel()函数的参数与moveTo()和moveRel相同,在此不再赘述。

下面是一个自动画图的示例:

# 启动画图软件,启用下面程序,5秒内将鼠标放置在画图软件上,开始自动画图time.sleep(5)pyautogui.click()distance = 200while distance > 0: pyautogui.dragRel(distance, 0, duration=0.5) # move right distance -= 5 pyautogui.dragRel(0, distance, duration=0.5) # move down pyautogui.dragRel(-distance, 0, duration=0.5) # move left distance -= 5 pyautogui.dragRel(0, -distance, duration=0.5) # move up

效果如下:

自动画图效果

6. 滚动鼠标

Pyautogui.srcoll()可滚动鼠标中键,输入一个整形参数,如果为正向上滚动,反之向下,具体需要滚动多少需根据情况自行选择。

三、 处理屏幕

如果你想实现和计算机的自动交互,你还需要确认当前的屏幕内容和你的预期是否一致,比如你下一步的目标是点击微信图标,但屏幕上没有微信图标,那可能窗口出现了意外,程序需要作出对应的反馈。

1. 获取并分析屏幕快照

pyautogui.screenshot()可以获取一个屏幕快照的Image对象,Image对象的getpixel()函数,输入x、y坐标可以获取位置的像素颜色。

快照示例:

# 获取当前屏幕im = pyautogui.screenshot()# 获取该位置像素点颜色print(im.getpixel((385, 137)))

pyautogui.pixelMatchesColor()函数可以确认指定坐标颜色是否和指定颜色匹配,匹配返回True,否则返回False。

print(pyautogui.pixelMatchesColor(385, 137, (247, 245, 254)))

确认当前是否处于桌面示例:

# 按win+d回到桌面,后面章节会讲到pyautogui.hotkey('winleft', 'd')# 获取屏幕快照im = pyautogui.screenshot()# 获取a点颜色,可以多获取几个点colour_a = im.getpixel((385, 137))# 5秒之后查看,是否还处于桌面下time.sleep(5)if not pyautogui.pixelMatchesColor(385, 137, colour_a): print('something wrong')else: print('everything is ok')

2. 图像识别

如果你想点击微信图标,但不知道点击哪里怎么办,可以向PyAutoGUI提供微信的图像,让后让它去寻找坐标。

LocateOnScreen()函数接受一张图片,返回4个整数元组,是屏幕上首次发现该图片时左边的x坐标、顶边的y坐标、宽度以及高度。

使用LocateOnScreen()获取图片的位置元组后,将元组传递给center()函数,它将返回该区域中心的x、y坐标。

下面以识别微信图标并点击来做个示例:

先使用第二章介绍的不断获取鼠标位置的程序,获取屏幕上微信图标的位置(获取左上角坐标和右下角坐标,使用Image.Crop()方法截取图标。

Crop方法接受一个矩形元组,返回一个Image对象,矩形元组值得意义分别为,左:矩形最左边x坐标,顶:矩形顶边y坐标,右:矩形最右边x坐标,底:矩形底部y坐标。

# 回到桌面pyautogui.hotkey('winleft', 'd')# 获取屏幕截图im = pyautogui.screenshot()# 截取并保存微信图标croppedIm = im.crop((15, 454, 91, 523))croppedIm.save('wechat.png') # 在屏幕上寻找微信图标的位置,并将鼠标移至图标中心,然后双击pyautogui.moveTo(pyautogui.center(pyautogui.locateOnScreen('wechat.png ')))pyautogui.doubleClick()

四、 控制键盘

Pyautogui可以向计算机发送虚拟按键,类似魔兽世界里帮忙按空格这种小事当然小菜一碟,虽然这么方便,我怎么还是想找个女友帮我按呢。

1. 通过键盘发送一个字符串

Pyautogui.typewrite()函数像计算机发送虚拟按键,这些按键产生什么效果,取决于当前获得焦点的窗口和文本输入框,如果焦点在魔兽世界里,此时按空格,那角色就会跳起来,如果焦点处于word里那就是输入空格。

示例如下:

# 点击wordpyautogui.Click(100, 100)# 向word输入hello worldpyautogui.typewrite("hello world")

Pyautogui支持如下键名,几乎涵盖了所有字符,除了博大精深的中文字符,这个后面再说

支持的按键

2. 热键组合

热键或快捷键是一种按键组合,它调用某种应用功能,比如拷贝选择内容的常用热键是ctrl + c,这种按键组合需要按住ctrl键然后按着c键,还好有pyautogui.hotkey()函数,它接受多个键字符串参数,按顺序按下,再按相反的顺序释放,对于ctrl+c,代码如下:

pyautogui.hotkey('ctrl', 'c')

关于中文输入的问题,需要使用pyperclip.copy函数(需要安装pyperclip库),此函数可以将输入的参数放入剪切板,然后按ctrl +v进行粘贴,示例如下:

pyperclip.copy("我爱中华")pyautogui.hotkey('ctrl', 'v')

关于自动化控制键盘和鼠标的知识点就梳理结束啦,我的头条号里有一个完整的示例:

《python神奇代码之自动发微信给女友》

文章将上述这些功能串联起来,有兴趣的可以看看,觉得不错的话给我点赞,有问题可以留言哦。

python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘相关推荐

  1. python自动控制库_python PyAUtoGUI库实现自动化控制鼠标键盘

    PyAutoGUI 不知道你有没有用过,它是一款用Python自动化控制键盘.鼠标的库.但凡是你不想手动重复操作的工作都可以用这个库来解决. 比如,我想半夜时候定时给发个微信,或者每天自动刷页面等操作 ...

  2. pyautogui自动化控制鼠标和键盘操作

    pyautogui自动化控制鼠标和键盘操作 安装 pyautogui鼠标操作样例 pyautogui键盘操作样例 按键支持 提示信息 alert option password prompt 截屏 整 ...

  3. python pywinauto 单击鼠标_教你快速用 Python 控制键盘和鼠标,彻底解放双手

    你还在为在计算机上双击或提交表单而烦恼吗?今天就用python来控制键盘和鼠标,解放双手! 第一,Pyauogui库 我们可以首先安装pyauogui库,通过它我们可以编写一些Python脚本来控制鼠 ...

  4. Python自动化控制鼠标和键盘操作—— PyAutoGUI

    简 介:PyAutoGUI是一个Python语言的键鼠自动化库,简单来说和按键精灵的功能一样.但是因为是Python的类库,所以可以使用Python代码配合一些其他类库完成更加强大的功能,本文对PyA ...

  5. python自动控制库_一个可以自动化控制鼠标键盘的库:PyAUtoGUI

    PyAutoGUI 不知道你们有没有用过,它是一款用Python自动化控制键盘.鼠标的库.但凡是你不想手动重复操作的工作都可以用这个库来解决. 如果,我想半夜时候定时给发个微信,或者每天自动刷页面等操 ...

  6. 通过python里面的pyautogui自动化控制鼠标和键盘操作

    PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux). 安装 pip3 install pyautog ...

  7. python反恐精英基础版_cs客户端自动化控制鼠标和键盘操作,python+pyautogui

    PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux). 安装 pip3 install pyautog ...

  8. python使用笔记:pyautogui自动化控制鼠标和键盘

    标题 安装 获取当前屏幕分辨率 pyautogui鼠标操作 获取/移动鼠标位置 鼠标点击 鼠标拖拽 移动后按下/松开 滚轮 pyautogui键盘操作 提示信息 alert 弹窗 option 选择框 ...

  9. PyAutoGUI——自动化控制鼠标和键盘操作

    PyAutoGUI模块通过屏幕xy坐标系统确定目标位置,控制鼠标和键盘发送虚拟击键和鼠标点击,完成点击按钮.填写表单等操作,在没有模块对应你要操作的无聊任务的时候,也不失为一个不错的选择. PyAut ...

最新文章

  1. 当你学了现在的忘了前面的
  2. Mr Big [To be with you]
  3. 自动化运维工具Ansible详细部署
  4. 3kyu Path Finder #3: the Alpinist
  5. JAVA——RSA加密与解密
  6. Flex中创建Accordion报错
  7. 认知空间是什么意思_Number是“数”,one是“一”,那么number one什么意思?
  8. Spark源码分析之Job触发原理
  9. Spark学习之spark集群搭建
  10. zabbix触发器表达式详解
  11. 终端IO--unix环境高级编程读书笔记
  12. 设计模式(六)原型模式
  13. 全球经典《深入解析Windows 操作系统,第4 版》4月19日全国发货!
  14. 3dmax:3dmax三维建模中常用的材质、贴图、渲染设置之详细攻略
  15. 五菱“神车”再添一员,小型电动车迎来“均值回归”?
  16. MAXIMO学习笔记
  17. win10中修改mac地址(总有一款适合你)
  18. johnny仔向您推荐的三个专业微信交流QQ群,欢迎加入!
  19. Mysql数据库知识点归纳汇总
  20. 百度在线读音示例-中文+英文

热门文章

  1. 【ElasticSearch】Es 源码之 PeerRecoverySourceService 源码解读
  2. 95-10-092-启动-TokenManager
  3. 【elasticsearch】 document 查询原理
  4. 如何让JSON只从Model中输出一部分
  5. 自定义 Git - Git 钩子
  6. 95-190-438-源码-window-Trigger-总体概述
  7. 【Spark】Spark Streaming的back pressure
  8. php自动维护,window_Win7系统中的一些自动维护计划、任务关闭、禁用方法图文教程,  windows自动维护功能会在计 - phpStudy...
  9. 编写android驱动程序,Android 驱动编写LED-NDK程序
  10. Pandas一些小技巧