详解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模块

也可手动更改

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

详解pyautogui模块

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() :水平滚动

详解pyautogui模块

这个不做多余介绍了,只有linux系统支持

pyautogui.vscroll() :垂直滚动,负下正上

pyautogui.vscroll(-100)  # 垂直滚动,负下正
文章来源:https://www.cnblogs.com/lihongtaoya/ ,请勿转载

Original: https://www.cnblogs.com/lihongtaoya/p/16839051.html
Author: 余生没有余生
Title: 详解pyautogui模块

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/799325/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL复习大纲

    思维导图大纲 下面我将根据思维导图来复习 MySQL基本数据类型 常见的其实就分为3种:字符串: char[&#x5B57;&#x7B26;&#x578B;…

    Python 2023年6月10日
    075
  • BUUCTF-模板注入专项刷题

    SSTI: 目录 简单 [CSCCTF 2019 Qual]FlaskLight 签到 [BJDCTF2020]Cookie is so stable twig模板注入 [West…

    Python 2023年8月10日
    057
  • 深入理解并发编程同步工具类

    大家好,我是陶朱公Boy。 今天跟大家分享一个并发编程领域中的一个知识点—— 同步工具类。 我将结合一个真实线上案例作为背景来展开讲解这一知识点。给大家讲清楚什么是同步工具类、适合…

    Python 2023年10月19日
    039
  • 重温Python基础——if语句

    哈喽兄弟们,本节咱们来复习一下 Python基础入门中的 if语句。 编程中经常需要检查一系列条件,并据此决定采取什么措施。在python中,if语句能检测你的程序的当前状态,并据…

    Python 2023年10月30日
    038
  • Scrapy 源码分析 4 extensions middlewares详解

    1 简介 scrapy默认的extensions middlewares共有9个 EXTENSIONS = {} EXTENSIONS_BASE = { ‘scrapy.exten…

    Python 2023年10月6日
    032
  • Libgdx游戏开发(2)——接水滴游戏实现

    原文:Libgdx游戏开发(2)——接水滴游戏实现 – Stars-One的杂货小窝 本文使用Kotlin语言开发 通过本文的学习可以初步了解以下基础知识的使用: Ba…

    Python 2023年10月20日
    040
  • c++ 模板 指针类型偏特化

    一步步来,先简单点. 目标:我们要实现一个模板类,例化后,可以通过get_val获取到值,通过get_ptr获取到指针.具体什么意思结合例子来看看吧. 例子: //&#x4…

    Python 2023年10月16日
    025
  • 针对Numpy中axis的理解

    针对numpy中经常看到axis这个参数。这里对axis这个参数的学习做个记录。 本文章以numpy.mean()函数为例 一、numpy.mean()不带任何参数的时候 不带任何…

    Python 2023年8月28日
    053
  • okhttp请求django服务器-ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接的处理

    异常log如下: Exception occurred during processing of request from (‘127.0.0.1’, 67…

    Python 2023年8月3日
    074
  • python-tkinter小程序之数独游戏

    提前透露: 大家好,我是涵子。看到了上面的图片了吗? 一看就知道:这不就是一个数独吗?今天我要为大家带来tkinter-gui版的数独! python小游戏:建议你去看一看哦~(都…

    Python 2023年9月23日
    079
  • Pandas基础命令速查表

    前言最近发现写的关于python的博客慢慢有人在看,并且关注。突然觉得分享学习内容供大家参考是一件快乐的事情,虽然跟其他大博主相差太远,文章质量也不在一个level。但是还是想在这…

    Python 2023年8月16日
    064
  • Python函数:reset_index()

    resert_index()函数: Series.reset_index(level=None, drop=False, name=NoDefault.no_default, in…

    Python 2023年8月19日
    040
  • 【python123】题目答案整理 ——更多答案见专栏

    二老鼠打洞 来自计算机的问候-任意数量参数 自定义幂函数 来自计算机的问候-多参函数 编写函数输出自除数 最大素数 求数列前n项的平方和 生兔子 计算圆周率——割圆法 数列求前n项…

    Python 2023年8月1日
    066
  • 阿里巴巴2022年最新最全500道Java后端面试大全(值得收藏)

    进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全其中概括的知识点有:Java基础、spring、springmvc、s…

    Python 2023年10月9日
    055
  • Vue整理

    一、Vue Vue是遵循MVVM架构模式实现的前端框架 MVVM架构 Model数据 View模板 ViewModel处理数据 变量的定义,var,let,const 箭头函数的t…

    Python 2023年6月3日
    074
  • django中的路由层

    1.什么是路由层 简单来说,就是通过路由层中的path函数,告诉django遇到那个url,执行那个视图函数 2.路由层的请求流程 1.&#x5BA2;&#x623…

    Python 2023年6月9日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球