官方文档:https://pyautogui.readthedocs.io/en/latest/#

安装pyautogui模块

在 Windows 上,不需要安装其他模块。

在 OS X 上,运行 sudo pip3 install pyobjc-framework-Quartz,sudo pip3 install pyobjc-core,然后 sudo pip3 install pyobjc。

在 Linux 上,运行 sudo pip3 install python3-xlib,sudo apt-get install scrot,sudo apt-get install python3-tk,以及 sudo apt-get install python3-dev(Scrot 是PyAutoGUI 使用的屏幕快照程序)。

在这些依赖安装后,运行 pip install pyautogui (或在 OS X 和 Linux 上运行 pip3),安装 pyautogui。

注意事项

有时候自动控制键盘鼠标的测试程序可能会导致人工无法停止的状态

通过注销关闭所有程序

停止失去控制的 GUI 自动化程序,最简单的方法可能是注销,这将关闭所有运行的程序。在 Windows 和 Linux 上,注销的热键是 Ctrl-Alt-Del。在 OS X,热键是 -Shift-Option-Q。通过注销,你会丢失所有未保存的工作,但至少不需要等计算机完全重启。

暂停和自动防故障装置

你可以告诉脚本在每次函数调用后等一会儿,在出问题的时候,让你有很短的时间窗口来控制鼠标和键盘。要做到这一点,将 pyautogui.PAUSE 变量设置为要暂停的秒数。例如,在设置 pyautogui.PAUSE = 1.5 之后,每个 PyAutoGUI 函数调用在执行动作之后,都会等待一秒半。非 PyAutoGUI 指令不会停顿。

pyautogui 也有自动防故障功能。将鼠标移到屏幕的左上角,这将导致 pyautogui产生 pyautogui .FailSafeException 异常。你的程序可以用 try 和 except 语句来处理这个异常,也可以让异常导致程序崩溃。这两种情况下,如果你尽可能快地向左上移动鼠标,自动防故障功能都将停止程序。可以设置 pyautogui. FAILSAFE = False,禁止这项功能。

我们导入 pyautogui,并将 pyautogui.PAUSE 设置为 1,即每次函数调用后暂停一秒。将 pyautogui.FAILSAFE 设置为 True,启动自动防故障功能。

控制鼠标

屏幕的坐标

pyautogui.size() 函数返回两个整数的元组,包含屏幕的宽和高的像素数。

移动鼠标

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

  • x,y:移动到的坐标位置
  • duration:移动所花费的时间;默认值为0,表示立刻到终点;

获取鼠标的位置

pyautogui.position()

这个函数返回鼠标当前位置x,y的元组;

小例子:现在鼠标在哪里?

import pyautogui

try:
print("按Ctrl+C结束:")
while True:
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
except:
pass

点击鼠标

pyautogui.click(x, y, button=.. )

  • x和y为鼠标点击的坐标
  • button指定是鼠标哪个键点击;默认为鼠标左键;可选(left, right, middle)

pyautogui.doubleClick():鼠标左键双击

pyautogui.rightClick():鼠标右键单击

pyautogui.middleClick():鼠标中键单击

另外还有:pyautogui. mouseDown()pyautogui.mouseUp()类似,分别是鼠标按下和鼠标抬起。

拖动鼠标

  • pyautogui.dragTo():拖动到指定位置
  • pyautogui.dragRel():按偏移量进行拖动

一个小例子:

import pyautogui
import time
time.sleep(5)
pyautogui.click() # click to put drawing program in focus
distance = 200
while distance > 0:
pyautogui.dragRel(distance, 0, duration=0.05) # move right
distance = distance - 5
pyautogui.dragRel(0, distance, duration=0.05) # move down
pyautogui.dragRel(-distance, 0, duration=0.05) # move left
distance = distance - 5
pyautogui.dragRel(0, -distance, duration=0.05) # move up

打开画图工具,选择画笔,然后运行这个程序,将鼠标放在画板上,5秒后,它就会画出一个图形:

滚动鼠标

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

处理屏幕

在 Linux 计算机上,需要安装 scrot 程序,才能在 pyautogui 中使用屏幕快照功能。在终端窗口中,执行 sudo apt-get install scrot,安装该程序。如果你使用 Windows或 OS X,就跳过这一步

获取屏幕快照

要在 Python 中获取屏幕快照,就调用 pyautogui.screenshot() 函数:im = pyautogui.screenshot()

im 变量将包含一个屏幕快照的 Image 对象。现在可以调用 im 变量中 Image 对象的方法,就像所有其他 Image 对象一样。

向 getpixel() 函数传入坐标元组,如(0,0)或(50,200),它将告诉你图像中这些坐标处的像素颜色。getpixel() 函数的返回值是一个RGB 元组,包含3 个整数,表示像素的红绿蓝值(没有第四个值表示 alpha,因为屏幕快照是完全不透明的)。这就是你的程序“看到”当前屏幕上内容的方法。

分析屏幕快照

如果屏幕上指定的 x、y 坐标处的像素与指定的颜色匹配,PyAutoGUI 的pixelMatchesColor() 函数将返回 True。第一和第二个参数是整数,对应 x 和 y 坐标。第三个参数是一个元组,包含 3 个整数,是屏幕像素必须匹配的 RGB 颜色。

在获取屏幕快照,并用 getpixel() 函数取得特定坐标处像素颜色的 RGB 元组之后,将同样的坐标和 RGB 元组传递给 pixelMatchesColor(),这应该返回 True。然后改变 RBG 元组中的一个值,用同样的坐标再次调用 pixelMatches Color(),这应该返回 False。你的 GUI 自动化程序要调用 click() 之前,这种方法应该有用。请注意,给定坐标处的颜色应该“完全”匹配。即使只是稍有差异(例如,是(255,255,254)而不是(255,255,255)),那么函数也会返回 False。

图像识别

locateOnScreen('图像') 函数返回4个整数的元组,是屏幕上首次发现该图像时左边的x 坐标、顶边的 y 坐标、宽度以及高度

如果屏幕上找不到该图像,locateOnScreen() 函数将返回 None。请注意要成功识别,屏幕上的图像必须与提供的图像完全匹配。即使只差一个像素,locateOnScreen() 函数也会返回 None。

如果该图像在屏幕上能够找到多处,locateAllOnScreen() 函数将返回一个Generator 对象。可以将它传递给 list() ,返回一个 4 整数元组的列表。每个4整数元组代表了屏幕上的一个区域。如果图像只找到一次,返回的列表就只包含一个元组。

在得到图像所在屏幕区域的 4 整数元组后,就可以点击这个区域的中心。将元组传递给 center() 函数,它将返回该区域中心的 x、y 坐标。

控制键盘

通过键盘发送一个字符串

pyautogui.typewrite() 函数向计算机发送虚拟按键。

pyautogui.typewrite('Hello world!')

默认情况下,typewrite() 函数将立即打印出完整字符串。但是,你可以传入可选的第二参数,在每个字符之间添加短时间暂停。例如,pyautogui.typewrite('Helloworld!',0.25)将在打出H 后等待1/4 秒。打出e 以后再等待1/4 秒,如此等等。这种渐进的打字机效果,对于较慢的应用可能有用,它们处理击键的速度不够快,跟不上pyautogui。对于 A 或!这样的字符,pyautogui 将自动模拟按住 Shift 键。

键名

不是所有的键都很容易用单个文本字符来表示, 在PyAutoGUI 中,这些键表示为短的字符串值:'esc' 表示Esc 键,'enter' 表示 Enter。

除了单个字符串参数,还可以向 typewrite() 函数传递这些键字符串的列表

也可以查看 pyautogui.KEYBOARD_KEYS 列表,看看 pyautogui 接受的所有可能的键字符串

按下和释放键盘

pyautogui.keyDown() 和 pyautogui.keyUp() 将向计算发送虚拟的按键和释放

pyautogui提供了pyautogui.press() 函数,它调用这两个函数,模拟完整的击键。

热键组合

“热键”或“快捷键”是一种按键组合,它调用某种应用功能

可以使用按下抬起的组合,但是相当麻烦

可以使用 pyautogui.hotkey() 函数,它接受多个键字符串参数,按顺序按下,再按相反的顺序释放

常用函数总结

moveTo(x,y)将鼠标移动到指定的 x、y 坐标。

moveRel(xOffset,yOffset)相对于当前位置移动鼠标。

dragTo(x,y)按下左键移动鼠标。

dragRel(xOffset,yOffset)按下左键,相对于当前位置移动鼠标。

click(x,y,button)模拟点击(默认是左键)。

rightClick() 模拟右键点击。

middleClick() 模拟中键点击。

doubleClick()模拟左键双击。

mouseDown(x,y,button)模拟在 x、y 处按下指定鼠标按键。

mouseUp(x,y,button)模拟在 x、y 处释放指定键。

scroll(units)模拟滚动滚轮。正参数表示向上滚动,负参数表示向下滚动。

typewrite(message)键入给定消息字符串中的字符。

typewrite([key1,key2,key3])键入给定键字符串。

press(key)按下并释放给定键。

keyDown(key)模拟按下给定键。

keyUp(key)模拟释放给定键。

hotkey([key1,key2,key3])模拟按顺序按下给定键字符串,然后以相反的顺序释放。

screenshot() 返回屏幕快照的 Image 对象(参见第 17 章关于 Image 对象的信息)。

使用pyperclip模块控制剪切板

1.该模块为第三方模块,需安装后使用pip install pyperclip

2.作用:向剪切板发送文本或读取剪切板文本

3.用法:

  • pyperclip.copy('dsd')#向剪切板发送文本
  • pyperclip.paste()读取剪切板文本

Python使用pyautogui控制鼠标键盘的更多相关文章

  1. python如何直接控制鼠标键盘

    一.简介 我们知道在windows下输入:win + r,会弹出下面的窗口,而在下面的窗口出现后我们接着按下esc键,下面的窗口会消失 现在设想我们想在python代码里控制键盘,想通过运行代码-&g ...

  2. pyautogui控制鼠标键盘自动填写数据

    import os import pyautogui import time, os import pyperclip # 复制 pyautogui.FAILSAFE = False class Au ...

  3. python 监视和控制鼠标键盘的输入(使用pynput 而非pyhook)

    百度上搜到的文章大多基于pyhook, pip不能直接安装,托管在sourceForge上的代码仓库也找不到. google上发现可以使用pynput,貌似控制更为简单,而且可以直接使用pip安装 示 ...

  4. Python直接控制鼠标键盘

    Python直接控制鼠标键盘 之前因为期末的原因已经很久没写博客了,今天博主发现一个好玩的模块PyAutoGUI,借助它可以使用Python脚本直接控制键盘鼠标,感觉可以解决很多无聊的机械运动.这里记 ...

  5. 安利下PyAUtoGUI这个库,可自动化控制鼠标键盘

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

  6. Python——控制鼠标键盘

    一.安装包 pip install pynput 二.引用包 from pynput import mouse,keyboard 三.控制鼠标 from pynput.mouse import But ...

  7. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  8. 【328】Python 控制鼠标/键盘+图片识别 综合应用

    本文是基于 [267]实现跨网络传数据 的基础上的,由于在弹出 putty 之后,需要手动输入命令(pass.sh.get.sh)来实现数据的传递,另外就是处理完之后需要手动关闭 putty,本文解决 ...

  9. python控制鼠标键盘

    1.安装类库 pip install pyautogui 2.代码: import pyautogui,time,random pyautogui.PAUSE = pyautogui.FAILSAFE ...

随机推荐

  1. map文章

    STL map常用操作简介 http://www.kuqin.com/cpluspluslib/20071231/3264.html STL中map用法详解 http://www.kuqin.com/ ...

  2. python中的数学类型及操作

    一.概述 整数类型 浮点数类型 复数类型 round()函数 数值运算符 数值运算函数 字符串类型 1.整数类型 整型:用来描述什么:比如身高,体重,年龄等 eg: age=20 height=168 ...

  3. java读/写文件

    读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/B ...

  4. 使用jps查看JVM进程信息

    VM进程状态工具 - 列出目标系统上已检测的HotSpot Java虚拟机进程信息.可直接在装有java运行环境的Windows 或者 Linux机器上使用命令行执行jps命令.一个典型的应用场景,例 ...

  5. Java Interview Questions Summary

    Spring 高并发 Java基础 多线程 正文. 多线程精选53题 1.什么是线程 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  6. js 获取年月日

    虽然网上关于这个的方法很多 但是自己还是总结了一个比较可用的方法 var date=new Date(); var year=date.getFullYear(); ); var day=change ...

  7. Jmeter_选项_函数助手_RandomString的用法

    1.用处:测试账户注册可以通过随机生成数实现,而不需要Excel手动输入, 缺点:随机生成数可能会重复 优点:不需要使用CSV config 或者excel ,txt格式 2.举例:之前我们通过CSV ...

  8. JSON parse error: default constructor not found. class java.time.YearMonth; nested exception is com.alibaba.fastjson.JSONException: default constructor not found. class java.time.YearMonth

    java8新出的YearMonth可以方便的用来表示某个月.我的项目中使用springmvc来接收YearMonth类型的数据时发现 x-www-from-urlencoded 格式的数据可以使用&q ...

  9. 【MySQL】表的操作

    " 目录 #. 表操作 1. 创建数据库 2. 进入指定库 3. 创建表 4. 添加记录 5. 查询表的数据和结构 /. 查指定表中的存储数据 /. 查指定表的结构 6. 复制表 /. 即复 ...

  10. MySQLroot密码的恢复方法

    MySQLroot密码的恢复方法 有可能你的系统没有 safe_MySQLd 程序(比如我现在用的 ubuntu操作系统, apt-get安装的MySQL) , 下面方法可以恢复 1.停止MySQLd ...