一.安装

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. 大家都能看得懂的源码 - ahooks 是怎么处理 DOM 的?

    本文是深入浅出 ahooks 源码系列文章的第十三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇文章探讨一下 ahooks 对 DOM 类 Hooks 使用 ...

  2. Redis6.0.6的三大内存过期策略和八大淘汰策略

    一.前言 Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜.点赞.消息队列.购物车等等:当然还有分布式锁Redisson,我们使用肯定少不了集群!小编 ...

  3. 在Windows 2012 R2上安装vcenter 5.5

    在Windows 2012 R2上安装vCenter 5.5做个实验,发现安装的时候卡在Install Directory service了. 重启后,再装也一样. 上网查了一下,说是要装好ADLDS ...

  4. 《Java Web程序设计——开发环境搭建》

    Java Web程序设计--开发环境搭建       一.JDK下载.安装以及环境变量的配置: 官网:https://www.oracle.com/java/technologies/download ...

  5. ES配置生成SSL使用的证书

    cd /usr/local/elasticsearch/bin/ ./elasticsearch-certgen ##################################### Pleas ...

  6. Elasticsearch:单节点数据迁移

    Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...

  7. 1_Linux

    一. Linux介绍 1.1 引言 在学习Linux之前, 大家先了解开发环境,生产,测试环境 开发环境: 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的 ...

  8. C#.NET ORM 如何访问 Access 数据库 [FreeSql]

    最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没.依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群: ...

  9. echarts 饼图中间添加图片

    饼图添加图片只需要配置两部分 option = { graphic: { // 这个属性可以在饼图内部填充图片,文字等 elements: [{ type: 'image',//需要填充图片,配置im ...

  10. [题解] Atcoder ABC 225 H Social Distance 2 生成函数,分治FFT

    题目 首先还没有安排座位的\(m-k\)个人之间是有顺序的,所以先把答案乘上\((m-k)!\),就可以把这些人看作不可区分的. 已经确定的k个人把所有座位分成了k+1段.对于第i段,如果我们能求出这 ...