详解pyautogui模块
一.安装
pip install pyautogui
或者
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyautogui
二.全局设置
s为秒数,不填默认0.1s。表示所有pyautogui相关的指令运行后等待s秒在运行下一条。相当于全局等待
pyautogui.PAUSE=s
防止操作失控,默认就是True,通过FAILSAFE_POINTS来设置坐标,默认(0,0)

也可手动更改
pyautogui.FAILSAFE = True # 防止操作失控,设置鼠标移动某点是抛异常
pyautogui.FAILSAFE_POINTS = [(100, 0)] # 鼠标移动到(100,0)位置时抛出异常
三.获取电脑分辨率
x, y = pyautogui.size()
print(x, y)
四.鼠标事件
1.pyautogui.click():单击点击事件
pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button=PRIMARY, duration=0.0, tween=linear)
# x,y:为点击的位置坐标,以电脑左上角为原点
# clicks:为点击次数,默认为1
# interval:多次点击间的间隔(比如双击,第一次点击完后,等待设置的秒数在执行下一次点击)
# button:设置左击还是右击,默认左击
# duration:设置执行的时间
# tween:鼠标移动到指定位置的规律
button:设置鼠标点击项(left:左击 ,right:右击 ,middle:中击)
除了click()方法可以单击外,pyautogui还提供了专用于左/右/中击的方法。
pyautogui.leftClick() # 左键单击
pyautogui.rightClick() # 单击右键
pyautogui.middleClick() # 中键单击
leftClick()的用法等同于click(button='left')
rightClick()的用法等同于click(button='right')
middleClick()的用法等同于click(button='middle')
2.pyautogui.doubleClick():双击点击事件
pyautogui.doubleClick() # 双击,默认左双击
# x,y:为点击的位置坐标,以电脑左上角为原点
# clicks:为点击次数,默认为1
# interval:两次点击间的间隔(比如双击,第一次点击完后,等待设置的秒数在执行下一次点击)
# button:设置左击还是右击,默认左击
# duration:设置执行的时间
# tween:鼠标移动到指定位置的规律
3.pyautogui.tripleClick():三击点击事件
pyautogui.tripleClick() # 单击三次,默认左击
4.鼠标移动
1)pyautogui.moveTo():以坐标为原点移动到指定的坐标上
pyautogui.moveTo(x=None, y=None, duration=0.0, tween=pyautogui.easeInOutElastic) # 鼠标移动到坐标位置,以电脑屏幕左上角为原地定位
# x,y:为移动的位置坐标,以电脑左上角为原点
# button:设置左击还是右击,默认左击
# duration:设置执行的时间
# tween:鼠标移动到指定位置的规律,默认匀速直线运行(linear)
这个介绍下tween参数的值共有哪些。
| easeInQuad |
|
| easeOutQuad | |
| easeInOutQuad | |
| easeInCubic | |
| easeOutCubic | |
| easeInOutCubic | |
| easeInQuart | |
| easeOutQuart | |
| easeInOutQuart | |
| easeInQuint | |
| easeOutQuint | |
| easeInOutQuint | |
| easeInSine | |
| easeOutSine | |
| easeInOutSine | |
| easeInExpo | |
| easeOutExpo | |
| easeInOutExpo | |
| easeInCirc | |
| easeOutCirc | |
| easeInOutCirc | |
| easeInElastic | |
| easeOutElastic | |
| easeInOutElastic | |
| easeInBack | |
| easeOutBack | |
| easeInOutBack | |
| easeInBounce | |
| easeOutBounce | |
| easeInOutBounce |
左边为属性,右侧为运行的方式(速度+轨迹),图片来源于’https://blog.csdn.net/S_clifftop?type=blog‘如有侵权,请告知删除。
pyautogui.position():可获取当前鼠标坐标
x, y = pyautogui.position() # 获取鼠标当前位置
print(x,y)
2)pyautogui.move():以鼠标当前位置移动x,y个像素
pyautogui.move(x=None, y=None, duration=0.0, tween=pyautogui.easeInQuad) # 在当前位置移动,以当前位置为坐标
该方法与moveTo()的区别在于开始移动的位置不一样,x,y参数是以当前位置相对移动的像素,可正值可负值。
5.按下与松开
pyautogui.mouseDown():按下鼠标
pyautogui.mouseDown(x=None, y=None, button='', duration=0.0) # 按下鼠标,填写坐标的话,就是移动到某个坐标下按下
# x,y为移动到某点按下,不填的话默认当前位置按下
# button按下的点击项,默认左按下
# duration整体指令运行的时间
pyautogui.mouseUp():松开鼠标
pyautogui.mouseUp() # 释放鼠标
我们在做登录验证滑块的时候,就可以用这两个方法+move()去拖拽滑块,并且还不会被检测出来
6.鼠标拖拽
pyautogui.dragRel():在鼠标当前位置点击后相对移动
pyautogui.dragRel(xOffset=20, yOffset=100, duration=3, tween=pyautogui.easeInQuad, button='left') # 在鼠标当前位置点击后相对移动,结束后自动松开
# xOffset,yOffset为移动的距离
# duration整个移动的耗时
# tween移动的速度+轨迹
# button设置点击项,默认左击
pyautogui.drag():该方法与dragRel()用法及效果一致,这里不做多余介绍了
pyautogui.dragTo():从当前位置拖拽到指定坐标轴
pyautogui.dragTo(x=None, y=None, duration=0.0, tween=pyautogui.easeInQuad, button="left") # 鼠标从当前位置拖拽到指定坐标
# x,y为坐标,鼠标移动到指定的坐标(x,y)
# duration整个移动的耗时
# tween移动的速度+轨迹
# button设置点击项,默认左击
五.键盘事件
1.按下与松开
pyautogui.keyDown('') :按下某键盘
pyautogui.keyDown('shift') # 按下shift键
pyautogui.keyUp('') :松开某键盘
pyautogui.keyUp('shift') # 松开shift键
常用的键盘表示(自己脑补用法吧)
KEY_NAMES = [
"\t", # tab
"\n", # 回车
"\r",
" ",
"!",
'"',
"#",
"$",
"%",
"&",
"'",
"(",
")",
"*",
"+",
",",
"-",
".",
"/",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
":",
";",
"<",
"=",
">",
"?",
"@",
"[",
"\\",
"]",
"^",
"_",
"`",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"{",
"|",
"}",
"~",
"accept",
"add",
"alt",
"altleft",
"altright",
"apps",
"backspace",
"browserback",
"browserfavorites",
"browserforward",
"browserhome",
"browserrefresh",
"browsersearch",
"browserstop",
"capslock",
"clear",
"convert",
"ctrl",
"ctrlleft",
"ctrlright",
"decimal",
"del",
"delete",
"divide",
"down",
"end",
"enter",
"esc",
"escape",
"execute",
"f1",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15",
"f16",
"f17",
"f18",
"f19",
"f2",
"f20",
"f21",
"f22",
"f23",
"f24",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"final",
"fn",
"hanguel",
"hangul",
"hanja",
"help",
"home",
"insert",
"junja",
"kana",
"kanji",
"launchapp1",
"launchapp2",
"launchmail",
"launchmediaselect",
"left",
"modechange",
"multiply",
"nexttrack",
"nonconvert",
"num0",
"num1",
"num2",
"num3",
"num4",
"num5",
"num6",
"num7",
"num8",
"num9",
"numlock",
"pagedown",
"pageup",
"pause",
"pgdn",
"pgup",
"playpause",
"prevtrack",
"print",
"printscreen",
"prntscrn",
"prtsc",
"prtscr",
"return",
"right",
"scrolllock",
"select",
"separator",
"shift",
"shiftleft",
"shiftright",
"sleep",
"space",
"stop",
"subtract",
"tab",
"up",
"volumedown",
"volumemute",
"volumeup",
"win",
"winleft",
"winright",
"yen",
"command",
"option",
"optionleft",
"optionright",
]
2.输入内容
pyautogui.press(' '):输入内容
pyautogui.keyDown('shift') # 按下shift键
pyautogui.press("a") # 打印A
pyautogui.keyUp('shift') # 松开shift键
3.缓慢输入
pyautogui.typewrite():缓慢输入
pyautogui.typewrite("message", interval=2) # 缓慢输入
# message:为输入的内容
# interval:设置每两个字符输入的时间间隔,单位s
4.多键组合使用
pyautogui.hotkey():多键组合使用(如以下设置全选)
pyautogui.hotkey('ctrl', 'a') # 多键组合使用
六.弹框
pyautogui.alert():alert弹框
a = pyautogui.alert(text='test', title='pyautogui') # alert弹框
# text:弹框内容
# title:弹框标题
print(a) # 打印ok
当弹框运行时程序会暂停往下走,点击取消/确定时才会继续往下执行
pyautogui.confirm():confirm弹框
a = pyautogui.confirm(text='test', title='pyautogui') # alert弹框,点击确定返回ok,点击取消返回cancel
# text:弹框内容
# title:弹框标题
print(a)
pyautogui.password():password弹框
pyautogui.prompt():prompt弹框
七.截图
pyautogui.screenshot():截图
img = pyautogui.screenshot() # 默认截取全屏
img.save("./img/gui.png") # 截取后的图片保存位置
如果我们想要截取某坐标的图片,可以添加region元组
region = (1690, 144, 100, 20) # 前两位为x,y坐标,第三位为截取图片的宽,第四位为截取图片的高
img = pyautogui.screenshot(region=region)
img.save("./img/gui.png")
pyautogui.locateCenterOnScreen():根据图片获取在当前屏幕匹配的第一个中心坐标
x, y = pyautogui.locateCenterOnScreen("./img/gui.png")
print(x,y) # 打印匹配的x,y坐标
若无匹配结果,则返回None,报cannot unpack non-iterable NoneType object异常
除了locateCenterOnScreen(),还有以下用法也可获取匹配图片坐标
a = pyautogui.locateOnScreen("./img/gui.png") # 返回匹配图片的左上角坐标+宽+高
x, y = pyautogui.center(a) # 或者中心坐标位置
print(x, y)
pyautogui.locateAllOnScreen():根据图片获取在当前屏幕匹配的所有坐标及宽高
img = pyautogui.locateAllOnScreen("./img/gui.png") # 返回页面所有可匹配的图片,返回一个生成器(左,顶,宽,高)
for i in img:
x, y, w, h = i
print(x, y)
这里需要注意的是,返回的结果是一个生成器,需for遍历输出
八.页面滚动
pyautogui.scroll():垂直滚动,负数为向下滚动,正数为向上滚动
pyautogui.scroll(-500)
如果想要缓慢滚动,可以加个for循环
for i in range(1, 100):
pyautogui.scroll(-i)
pyautogui.hscroll() :水平滚动

这个不做多余介绍了,只有linux系统支持
pyautogui.vscroll() :垂直滚动,负下正上
pyautogui.vscroll(-100) # 垂直滚动,负下正
文章来源:https://www.cnblogs.com/lihongtaoya/ ,请勿转载
详解pyautogui模块的更多相关文章
- [转载]python 详解re模块
原文地址:python 详解re模块作者:Rocky 正则表达式的元字符有. ^ $ * ? { [ ] | ( ) .表示任意字符 []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字 ...
- 详解Python模块导入方法
python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...
- 【spring】jar包详解与模块依赖关系
以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...
- python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字 ...
- 【python】详解time模块功能asctime、localtime、mktime、sleep、strptime、strftime、time等函数以及时间的加减运算
在Python中,与时间处理相关的模块有:time.datetime以及calendar.学会计算时间,对程序的调优非常重要,可以在程序中狂打时间戳,来具体判断程序中哪一块耗时最多,从而找到程序调优的 ...
- Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...
- Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...
- python详解json模块
我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...
- 利用EPX Studio将C/S程序转成B/S的方法详解(在线模块方式)
采用 EPX 的在线模块,是最简单的方法,包括实现简单,客户端不需任何设置,客户使用就简单. 1. 设置服务器端参数(EPServer) 1.1 在服务配置工具选项卡中,设置服务项中的名称,路径,激活 ...
随机推荐
- 万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用
在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用. 我们以生产物料齐套分析为例来说明如何利用低代码 ...
- apk编辑器测评
hi你好,我今天要介绍的就是apk编辑器 这里我用的是apk编辑器专业版 APK编辑器 关于 APK 编辑器智友汉化组论坛:bbs.zhiyoo.com修改应用程序名称美化 UI: 更改背景图片删除广 ...
- PTA C语言作业
6-1 使用函数输出一个整数的逆序数 (20 分) 本题要求实现一个求整数的逆序数的简单函数. 函数接口定义: int reverse( int number ); 其中函数reverse须返回用户 ...
- bfile 类型数据的存取
KingbaseES 支持 bfile 数据类型.对于bfile ,实际数据是存储在操作系统上,数据库存储的只是指向文件的指针. 具体例子如下: test=# create directory BFI ...
- 通过VS下载的NuGet包,如何修改其下载存放路径?
一.了解NuGet包的默认存放路径 我们通过NuGet包管理器下载的引用包,默认是存放在C盘的,存储路径一般是: C:\Users\{系统用户名}\.nuget\packages 我们都知道,C盘的存 ...
- Centos7下安装postgresql(tar包形式安装)
Centos7下安装postgresql(tar包形式安装) 1.官网下载地址: https://www.postgresql.org/ftp/source/ 2.将下载来tar包上传到linux服务 ...
- 使用Receiver接收告警信息
告警接收器可以通过以下形式进行配置: receivers: - <receiver> ... 每一个receiver具有一个全局唯一的名称,并且对应一个或者多个通知方式: name: &l ...
- PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)可以看着是一个表的集合. 一个模式可以包含视图.索引.据类型.函数和操作符等. 相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 ...
- ElastAlert监控日志告警Web攻击行为---tomcat和nginx日志json格式
一.ELK安装 1.2 elk配置 logstash自定义配置文件,取名为filebeat_log.conf : input { beats { port => 5044 client_inac ...
- 02_快捷键及常用DOS命令
快捷键 一. 电脑快捷键 Ctrl + C:复制 Ctrl+ V:粘贴 Ctrl+ A:全选 Ctrl+ S:保存 Ctrl+ Z:撤销 Ctrl+ X:剪切 Alt + F4:关闭窗口 Shift ...