详解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 在服务配置工具选项卡中,设置服务项中的名称,路径,激活 ...
随机推荐
- 大家都能看得懂的源码 - ahooks 是怎么处理 DOM 的?
本文是深入浅出 ahooks 源码系列文章的第十三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇文章探讨一下 ahooks 对 DOM 类 Hooks 使用 ...
- Redis6.0.6的三大内存过期策略和八大淘汰策略
一.前言 Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜.点赞.消息队列.购物车等等:当然还有分布式锁Redisson,我们使用肯定少不了集群!小编 ...
- 在Windows 2012 R2上安装vcenter 5.5
在Windows 2012 R2上安装vCenter 5.5做个实验,发现安装的时候卡在Install Directory service了. 重启后,再装也一样. 上网查了一下,说是要装好ADLDS ...
- 《Java Web程序设计——开发环境搭建》
Java Web程序设计--开发环境搭建 一.JDK下载.安装以及环境变量的配置: 官网:https://www.oracle.com/java/technologies/download ...
- ES配置生成SSL使用的证书
cd /usr/local/elasticsearch/bin/ ./elasticsearch-certgen ##################################### Pleas ...
- Elasticsearch:单节点数据迁移
Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...
- 1_Linux
一. Linux介绍 1.1 引言 在学习Linux之前, 大家先了解开发环境,生产,测试环境 开发环境: 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的 ...
- C#.NET ORM 如何访问 Access 数据库 [FreeSql]
最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没.依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群: ...
- echarts 饼图中间添加图片
饼图添加图片只需要配置两部分 option = { graphic: { // 这个属性可以在饼图内部填充图片,文字等 elements: [{ type: 'image',//需要填充图片,配置im ...
- [题解] Atcoder ABC 225 H Social Distance 2 生成函数,分治FFT
题目 首先还没有安排座位的\(m-k\)个人之间是有顺序的,所以先把答案乘上\((m-k)!\),就可以把这些人看作不可区分的. 已经确定的k个人把所有座位分成了k+1段.对于第i段,如果我们能求出这 ...