Python自动化控制鼠标和键盘操作—— PyAutoGUI_python控制键盘怎么对指定的应用产生 不影响其他键盘使用-程序员宅基地

技术标签: python  工具  



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

关键词 PyAutoGUI、Python

§01 PyAutoGUI功能简介


一、基本功能

  • 移动鼠标并在其他应用程序的窗口中单击或键入;
  • 向应用程序发送keystrokes(例如,填写表格);
  • 截取屏幕截图,并可根据给定的图像(例如,按钮或复选框),在屏幕上找到它;
  • 定位应用程序的窗口,并移动、调整大小、最大化、最小化或关闭它(仅限 Windows,目前);
  • 在 GUI 自动化脚本运行时显示用于用户交互的消息框。

二、安全设置

  就像巫师学徒的魔法扫帚被编程为不断用水填充(然后过度填充)浴缸一样,程序中的错误可能会使其失控。如果鼠标光标自行移动,则很难使用鼠标关闭程序。

▲ 图1 巫师学徒的魔法扫帚与不断用水填充浴缸

  作为一项安全功能,默认情况下启用故障安全功能。当调用 PyAutoGUI 函数时,如果鼠标位于主监视器的四个角中的任何一个,它们将引发 pyautogui.FailSafeException。调用每个 PyAutoGUI 函数后都有十分之一秒的延迟,让用户有时间将鼠标猛击到角落以触发故障安全。

  您可以通过设置 pyautogui.FAILSAFE = False 来禁用此故障保护。我强烈建议您不要禁用故障保护

§02


  在 Windows 上,您可以使用 py.exe 程序运行最新版本的 Python:

  py -m pip install pyautogui

▲ 图2 安装pyautogui

§03 本功能概览


一、一般功能

1、获取当前鼠标坐标

  pyautogui.position()

2、获取当前屏幕分辨率

  pyautogui.size()

3、判断坐标(x, y)是否在屏幕内

  pyautogui.onScreen(x, y)

▲ 图3.1 一般功能演示结果

二、安全设置

  • 在每次 PyAutoGUI 调用后设置 2.5 秒的暂停:

  pyautogui.PAUSE = 2.5

  • 当故障安全模式为 True 时,将鼠标移动到左上角将引发一个 pyautogui.FailSafeException 可以中止您的程序(默认情况下启用FAILSAFE = True):

  pyautogui.FAILSAFE = True

三、鼠标功能

1、移动、拖动鼠标

  XY 坐标在屏幕左上角有 0, 0 原点。 X 向右增加,Y 向下增加。如果 duration 为 0 或未指定,则立即移动。注意: 在 Mac 上不能立即拖动。

(1)在 num_second 秒内将鼠标移动到 XY 坐标

  pyautogui.moveTo(x, y, duration=num_seconds)

(2)相对于当前位置移动鼠标

  pyautogui.move(xOffset, yOffset, duration=num_seconds)
  pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

  注: 以上两函数功能相同

(3)将鼠标拖到 XY

  pyautogui.dragTo(x, y, duration=num_seconds)

(4)相对于其当前位置拖动鼠标

  pyautogui.drag(xOffset, yOffset, duration=num_seconds)
  pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)

  注: 以上两函数功能相同

(5)其他说明

  以上四种函数中的xyxOffsetyOffset参数可以取值为None,此时表示 “当前鼠标光标位置” ,如:

>>> pyautogui.moveTo(100, 200)    # 把鼠标移动到(100, 200)处
>>> pyautogui.moveTo(None, 500)   # 把鼠标移动到(100, 500)处
>>> pyautogui.moveTo(600, None)   # 把鼠标移动到(600, 500)处
>>> pyautogui.move(-30, 0)        # 把鼠标向左移动 30 pixels
>>> pyautogui.move(-30, None)     # 把鼠标向左移动 30 pixels
(6)补间/缓动功能

  补间是一个额外的功能,可以使 鼠标光标开始缓慢移动,然后向目的地加速鼠标光标开始快速移动,但在接近目的地时变慢。如果您不关心这一点,您可以跳过本节;如果您对此功能感兴趣,可以查看 PyAutoGUI的Tween / Easing功能

2、点击鼠标

(1)总函数click()

  调用 click() 只需在鼠标当前位置用左键单击鼠标一次,但关键字参数可以改变这一点:

  pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')

  button 关键字参数可以是'left''middle''right'

  ■ 如下例:

pyautogui.click(10,10)   # 鼠标点击指定位置,默认左键
pyautogui.click(10,10,button='left')  # 单击左键
pyautogui.click(1000,300,button='right')  # 单击右键
pyautogui.click(1000,300,button='middle')  # 单击中间
(2)独立函数

  所有的点击都可以用 click() 来完成,但下面这些函数的存在是为了便于阅读。关键字参数是可选的:

  pyautogui.rightClick(x=moveToX, y=moveToY)(右键)

  pyautogui.middleClick(x=moveToX, y=moveToY)(点击滚轮)

  pyautogui.doubleClick(x=moveToX, y=moveToY)(双击)

  pyautogui.tripleClick(x=moveToX, y=moveToY)(三连击)

(3)其他功能

  可以单独调用单个按钮按下和释放事件:

  pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')(按下)

  pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')(释放)

3、滚动滚轮

  正向滚动将向上滚动,负向滚动将向下滚动:

  pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)

  ■ 如下例:

pyautogui.scroll(300)   # 向上滚动300个单位
pyautogui.scroll(-300)  # 向下滚动300个单位

四、键盘功能

1、write() 函数

  主要的键盘函数是 write()。此函数将键入传递的字符串中的字符。要在按下每个字符键之间添加延迟间隔,请为 interval 关键字参数传递一个 intfloat 数据。注意:使用 write() 只能按单字符键,因此不能按 ShiftF1

>>> pyautogui.write('Hello world!')                 # 立即打印出"Hello world!"
>>> pyautogui.write('Hello world!', interval=0.25)  # 打印出"Hello world!",且每个字符后有四分之一秒的延迟

2、press(), keyDown() 和 keyUp() 函数

  1. 要解决上述问题,可调用 press()函数并将 pyautogui.KEYBOARD_KEYS 中的字符串传递给它,例如 enterescf1。请参阅 KEYBOARD_KEYS

  2. press() 函数实际上只是 keyDown()keyUp() 函数的包装器,它们模拟按下一个键然后松开它。这些函数可以自己调用。例如,要在按住 Shift 键的同时按向左箭头键三次,请调用以下代码:

>>> pyautogui.keyDown('shift')  # hold down the shift key
>>> pyautogui.press('left')     # press the left arrow key
>>> pyautogui.press('left')     # press the left arrow key
>>> pyautogui.press('left')     # press the left arrow key
>>> pyautogui.keyUp('shift')    # release the shift key

  注: pyautogui.press('left'); pyautogui.press('left'); pyautogui.press('left')等价于 pyautogui.press(['left', 'left', 'left'])pyautogui.press('left', presses=3) 要在每次按下之间添加延迟间隔,可以为 interval 关键字参数传递一个 intfloat 数据。

3、hotkey() 函数

  为了方便按下热键或键盘快捷键,可以向 hotkey() 传递几个按键字符串,这些字符串将按顺序按下,然后以相反的顺序释放。下面两段代码是等价的:

  代码一:

>>> pyautogui.hotkey('ctrl', 'shift', 'esc')

  代码二:

>>> pyautogui.keyDown('ctrl')
>>> pyautogui.keyDown('shift')
>>> pyautogui.keyDown('esc')
>>> pyautogui.keyUp('esc')
>>> pyautogui.keyUp('shift')
>>> pyautogui.keyUp('ctrl')

  注: 要在每次按下之间添加延迟间隔,可以为 interval 关键字参数传递一个 intfloat 数据。

4、KEYBOARD_KEYS

  以下是传递给 press()keyDown()keyUp()hotkey() 函数的有效字符串:

▲ 图4.1 KEYBOARD_KEYS有效字符串

五、消息框功能

  如果你需要暂停程序直到用户点击确定,或者想向用户显示一些信息,可以使用消息框功能,消息框函数的名称与 JavaScript 相似。

1、提示框/警告框

  pyautogui.alert('This displays some text with an OK button.')

▲ 图5.1.1 pyautogui.alert()效果1

▲ 图5.1.2 pyautogui.alert()效果2

2、选择框

  pyautogui.confirm('This displays text and has an OK and Cancel button.')

▲ 图5.2.1 pyautogui.confirm效果1

▲ 图5.2.2 pyautogui.confirm效果2

  pyautogui.confirm('选择一项', buttons=['A', 'B', 'C'])

▲ 图5.2.3 pyautogui.confirm效果3

3、普通输入

  pyautogui.prompt('This lets the user type in a string and press OK.')

▲ 图5.3.1 pyautogui.prompt效果1

▲ 图5.3.2 pyautogui.prompt效果2

4、密码输入

  pyautogui.password('Enter password (text will be hidden)')

▲ 图5.4.1 pyautogui.password效果1

▲ 图5.4.2 pyautogui.password效果2

六、截图功能

  我们控制鼠标的操作,不能盲目的进行,所以我们需要监控屏幕上的内容,从而决定要不要进行对应的操作。

1、获取屏幕截图

  pyautogui 提供了一个方法 screenshot(),可以返回一个Pillowimage对象,这里有三个常用函数:

(1)im = pyautogui.screenshot()

  返回屏幕的截图,是一个Pillowimage对象。

  

(2)im.getpixel((500, 500))

  返回im对象上,(500,500) 这一点像素的颜色,是一个RGB元组。

  

(3)pixelMatchesColor

  pyautogui.pixelMatchesColor(500,500,(12,120,400))

  一个对比函数,对比的是屏幕上 (500,500) 这一点像素的颜色,与所给的元素是否相同。

  

2、识别图像

  如果您有想要单击的内容的图像文件,您可以使用 locateOnScreen() 在屏幕上找到它。

# 返回第一次找到图像时的坐标与图像尺寸(left, top, width, height)
>>> pyautogui.locateOnScreen('looksLikeThis.png')  
(863, 417, 70, 13)

  locateAllOnScreen() 函数将为它在屏幕上找到的所有位置返回一个生成器:

>>> for i in pyautogui.locateAllOnScreen('looksLikeThis.png')
...
...
(863, 117, 70, 13)
(623, 137, 70, 13)
(853, 577, 70, 13)
(883, 617, 70, 13)
(973, 657, 70, 13)
(933, 877, 70, 13)
>>> list(pyautogui.locateAllOnScreen('looksLikeThis.png'))
[(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]

  locateCenterOnScreen() 函数只返回图像在屏幕上的中间位置的 XY 坐标:

>>> pyautogui.locateCenterOnScreen('looksLikeThis.png')  # returns center x and y
(898, 423)

  如果在屏幕上找不到图像,这些函数将返回 None
  注意:定位功能很慢,可能需要一两秒钟。


相关文章:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43964993/article/details/119845407

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法