Python使用pyautogui控制鼠标键盘
官方文档: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控制鼠标键盘的更多相关文章
- python如何直接控制鼠标键盘
一.简介 我们知道在windows下输入:win + r,会弹出下面的窗口,而在下面的窗口出现后我们接着按下esc键,下面的窗口会消失 现在设想我们想在python代码里控制键盘,想通过运行代码-&g ...
- pyautogui控制鼠标键盘自动填写数据
import os import pyautogui import time, os import pyperclip # 复制 pyautogui.FAILSAFE = False class Au ...
- python 监视和控制鼠标键盘的输入(使用pynput 而非pyhook)
百度上搜到的文章大多基于pyhook, pip不能直接安装,托管在sourceForge上的代码仓库也找不到. google上发现可以使用pynput,貌似控制更为简单,而且可以直接使用pip安装 示 ...
- Python直接控制鼠标键盘
Python直接控制鼠标键盘 之前因为期末的原因已经很久没写博客了,今天博主发现一个好玩的模块PyAutoGUI,借助它可以使用Python脚本直接控制键盘鼠标,感觉可以解决很多无聊的机械运动.这里记 ...
- 安利下PyAUtoGUI这个库,可自动化控制鼠标键盘
PyAutoGUI 不知道你有没有用过,它是一款用Python自动化控制键盘.鼠标的库.但凡是你不想手动重复操作的工作都可以用这个库来解决. 比如,我想半夜时候定时给发个微信,或者每天自动刷页面等操作 ...
- Python——控制鼠标键盘
一.安装包 pip install pynput 二.引用包 from pynput import mouse,keyboard 三.控制鼠标 from pynput.mouse import But ...
- Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...
- 【328】Python 控制鼠标/键盘+图片识别 综合应用
本文是基于 [267]实现跨网络传数据 的基础上的,由于在弹出 putty 之后,需要手动输入命令(pass.sh.get.sh)来实现数据的传递,另外就是处理完之后需要手动关闭 putty,本文解决 ...
- python控制鼠标键盘
1.安装类库 pip install pyautogui 2.代码: import pyautogui,time,random pyautogui.PAUSE = pyautogui.FAILSAFE ...
随机推荐
- fiddler抓包手机准备工作
1.勾选connections中的:Allow remote computers to connect 2.cmd中查找IP 3.在手机连接的WiFi中设置手动代理为:IP port:8888 4.在 ...
- 推荐几个c/c++语言编写的游戏源码下载网站
在游戏开发的学习或工作中,利用完好的游戏源码可以事半功倍,不仅可以逆向学习开拓思维,也可以大大减少设计周期.自己浏览了很游戏源码下载的网站,发现大多数质量都良莠不齐,且大部分需要消费才能下载,下面整理 ...
- Java 常见异常及处理方案
Java 常见异常处理方案 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error: ...
- qxdm,qpst,qcat抓包分析VoLTE SIP协商包
QXDM,QPST和QCAT是Qualcomm高通公司针对高通芯片的抓包分析工具. QXDM抓包分析,QPST与手机com口连接,QCAT用来分析抓包产生的isf文件(log). 使用版本: QXDM ...
- pyqt:布局删除小部件
参照:https://stackoverflow.com/questions/5899826/pyqt-how-to-remove-a-widget import sip layout.removeW ...
- Python 高级特性介绍 - 迭代的99种姿势 与协程
Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...
- spring boot 配置logback日志之jdbcTemplate打印sql语句配置
配置jdbcTemplate打印sql 用mybaties打印语句很好配置,后来用了JdbcTemplate就不知道怎么打印了,其实JdbcTemplate执行sql语句的过程会做打印sql语句的操作 ...
- Mysql主从复制,双主热备
Mysql主从复制: 主从复制: 主机准备工作: 开启bin.Log 注意:server-id 是唯一的值 重启mysql:service mysql restart 查看是否开启成功: 查看当前状 ...
- 【转载】MyEclipse6.5 KeyGen
输入自己的注册名,生成注册码,完成注册 package keyGenerate; import java.io.BufferedReader; import java.io.IOException; ...
- C语言:求n(n<10000)以内的所有四叶玫瑰数。-将字符串s1和s2合并形成新的字符串s3,先取出1的第一个字符放入3,再取出2的第一个字符放入3,
//函数fun功能:求n(n<10000)以内的所有四叶玫瑰数并逐个存放到result所指数组中,个数作为返回值.如果一个4位整数等于其各个位数字的4次方之和,则称该数为函数返回值. #incl ...