一.安装

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模块的更多相关文章

  1. [转载]python 详解re模块

    原文地址:python 详解re模块作者:Rocky 正则表达式的元字符有. ^ $ * ? { [ ] | ( ) .表示任意字符 []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字 ...

  2. 详解Python模块导入方法

    python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...

  3. 【spring】jar包详解与模块依赖关系

    以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...

  4. python 详解re模块

    正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字 ...

  5. 【python】详解time模块功能asctime、localtime、mktime、sleep、strptime、strftime、time等函数以及时间的加减运算

    在Python中,与时间处理相关的模块有:time.datetime以及calendar.学会计算时间,对程序的调优非常重要,可以在程序中狂打时间戳,来具体判断程序中哪一块耗时最多,从而找到程序调优的 ...

  6. Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...

  7. Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...

  8. python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  9. 利用EPX Studio将C/S程序转成B/S的方法详解(在线模块方式)

    采用 EPX 的在线模块,是最简单的方法,包括实现简单,客户端不需任何设置,客户使用就简单. 1. 设置服务器端参数(EPServer) 1.1 在服务配置工具选项卡中,设置服务项中的名称,路径,激活 ...

随机推荐

  1. java中list集合的几种去重方式

    public class ListDistinctExample { public static void main(String[] args) { List<Integer> list ...

  2. 第八十二篇:Vue购物车(三) 实现全选功能

    好家伙, 继续完善购物车相应功能 1.如何实现全选和反全选 1.1.全选框的状态显示(父传子) 来一波合理分析: 在页面中,有三个商品中 三个商品中的第二个未选择, 我么使用一个计算属性(fullSt ...

  3. KingbaseES R6 集群sys_monitor.sh change_password一键修改集群用户密码

    案例说明: kingbaseES R6集群用户密码修改,需要修改两处: 1)修改数据库用户密码(alter user): 2)修改.encpwd文件中用户密码: 可以通过sys_monitor.sh ...

  4. 基于 iframe 的微前端框架 —— 擎天

    vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...

  5. 2021年3月-第02阶段-前端基础-Flex 伸缩布局-移动WEB开发_流式布局

    移动web开发流式布局 1.0 移动端基础 1.1 浏览器现状 PC端常见浏览器:360浏览器.谷歌浏览器.火狐浏览器.QQ浏览器.百度浏览器.搜狗浏览器.IE浏览器. 移动端常见浏览器:UC浏览器, ...

  6. Java SE Object类

    1.Object类 equals 方法 == 和 equals 的对比 == 是一个比较运算符 == 既可以判断基本类型,又可以判断引用类型 == 如果判断的是基本类型,判断的是值是否相等 == 如果 ...

  7. C++ 自学笔记 对象的初始化

    数组的初始化: 在 C++中  struct ≈ Class:struct里面可以有函数. 默认构造函数: 没有参数的构造函数就是默认构造函数

  8. Docker容器获取宿主机信息

    最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...

  9. 简书是如何把用户wo逼疯的

    趁验证码还有一分钟时间,吐槽一下简书. 准备开始在简书写文章,遇到一些问题. 一.markdown的问题 1.不支持html 2....... 二.绑定手机--这是一个bug 我原来是使用邮箱注册的, ...

  10. C字符串和C++中string的区别

    在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作.以下是C字符串和C++中string的区别:   C字符串 string对象(C++) 所需的头文件名称 ...