目录

  • GUI自动化工具
    • 鼠标
      • 鼠标移动
      • 鼠标拖动
      • 鼠标 补间/缓动
      • 鼠标点击
      • 鼠标的滚动功能
    • 键盘

GUI自动化工具

PyAutoGUI可在Windows / Mac / Linux和Python 2&3上运行。
pip install pyautogui

import pyautogui

注意:在运行PyAutoGUI库时请加入以下2行代码,防止程序失控,进行补救措施

故障保护机制
在每次PyAutoGUI调用之后设置2.5秒的暂停:

pyautogui.PAUSE = 2.5  # 为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。

当故障安全模式为时True,将鼠标移到左上角将会弹出pyautogui.FailSafeException,这可能会中止当前运行的程序:

  pyautogui.FAILSAFE = True # 保护措施,避免失控

鼠标

  1. size() 方法
pyautogui.size()  # 返回屏幕宽高像素数的元组

如果屏幕分辨率为1920*1080,那么左上角的坐标为(0,0)
右下角的坐标是(1919,1079)(因为坐标始于0,而不是1)
X坐标从左侧的0开始,向右增加。
Y坐标从顶部的0开始,向下增加。

  1. position() 方法
pyautogui.position()   # 返回鼠标光标的当前X和Y坐标
  1. onScreen() 方法
pyautogui.onScreen(x, y)   # 检查XY坐标是否在屏幕上 返回True 和 False

鼠标移动

  1. moveTo() 方法
pyautogui.moveTo(x, y)  # 将鼠标光标移动到传递的X和Y整数坐标
pyautogui.moveTo(None, y)  # None可以为坐标传递该值,以表示“当前鼠标光标位置
pyautogui.moveTo(x, None) 

例如

pyautogui.moveTo(100, 200)  # 鼠标移动到x轴100像素,y轴200像素的位置
pyautogui.moveTo(None, 300) # 鼠标移动到x轴100像素,y轴300像素的位置
pyautogui.moveTo(400, None) # 鼠标移动到x轴400像素,y轴300像素的位置
pyautogui.moveTo(x, y, [duration = t])  # 在给定时间内将鼠标移动到屏幕指定位置 duration(以秒为单位)

x,y是目标位置的横纵坐标,duration指定鼠标光标移动到目标位置所需要的秒数,
t可以为整数或浮点数,省略duration参数表示立即将光标移动到指定位置
(在PyAutoGUI函数中,所有的duration关键字参数都是可选的)
如果持续时间小于pyautogui.MINIMUM_DURATION该运动将是即时的。默认pyautogui.MINIMUM_DURATION值为0.1。

  1. move()方法
pyautogui.move(x, y)  # 将鼠标光标相对于其当前位置移动几个像素

这里的x,y不再是目标位置的坐标,而是偏移量
例如:

pyautogui.moveTo(100, 200)  # 鼠标移动到x轴100像素,y轴200像素的位置
pyautogui.move(100,0) # 表示光标相对于当前所在位置(100, 200)向右移动100个像素(200, 200)

鼠标拖动

  1. dragTo() 方法
pyautogui.dragTo(x, y, [duration=t]) #将鼠标拖动到指定位置

PyAutoGUI的dragTo()和drag()功能也有类似的参数作为moveTo()和move()功能。此外,他们有一个button可以被设置为关键字’left’,‘middle’,'right’在拖动时按住该鼠标键不放。

pyautogui.dragTo(x, y, [duration=t], button='left') # 按住鼠标左键,将鼠标拖动到指定位置
pyautogui.dragTo(x, y, [duration=t], button='middle') # 按住鼠标中键,将鼠标拖动到指定位置
pyautogui.dragTo(x, y, [duration=t], button='right') # 按住鼠标右键,将鼠标拖动到指定位置
  1. drag()方法
pyautogui.drag(x, y, [duration=t]) # 将鼠标光标相对于其当前位置移动几个像素

这里的x,y不再是目标位置的坐标,而是偏移量
使用方法和dragTo()一样

鼠标 补间/缓动

补间或缓动功能指示鼠标移至目的地时的进度。通常,当在一段时间内移动鼠标时,鼠标将以恒定的速度沿直线直接移向目标。这称为线性补间或线性缓动函数。

PyAutoGUI在pyautogui模块中还有其他补间功能。
moveTo(),move(),dragTo()和drag()方法都可以使用该功能,可通过传递第四个参数来使鼠标光标以指定的线性函数进行移动。
总持续时间仍与传递给函数的参数相同。

pyautogui.easeInQuad:开始缓慢移动,然后朝着目标加快。
pyautogui.easeOutQuad:鼠标指针开始移动速度快,但速度逐渐减慢
pyautogui.easeInOutQuad:开始和结束快,中间慢
pyautogui.easeOutQuad是相反的:把鼠标指针开始移动速度快,但速度减慢,因为它接近目的地。
pyautogui.easeOutElastic将冲过目标进行“橡皮筋”式来回移动直到它稳定在目的地。

pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInQuad)    # 开始缓慢移动,然后朝着目标加快
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeOutQuad)   # 鼠标指针开始移动速度快,但速度逐渐减慢
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInOutQuad) # 开始和结束快,中间慢
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInBounce)  # 鼠标移动到目标位置进行反弹
pyautogui.moveTo(x, y, [duration=t], pyautogui.easeInElastic) # 将冲过目标进行“橡皮筋”式来回移动直到它稳定在目的地

这些补间功能是从Al Sweigart的PyTweening模块复制的:
https://github.com/asweigart/pytweening
不必安装此模块即可使用补间功能。

如果要创建自己的补间函数,请定义一个函数,该函数在0.0(代表鼠标移动的起点)和1.0(代表鼠标移动的终点)之间使用单个float参数,并在0.0和之间返回一个float值1.0。

鼠标点击

click() 、rightClick() 、middleClick()、 doubleClick()、tripleClick()均可传递以下参数:
x和y:将鼠标移动到目标区域
duration:鼠标移动目标位置的时间
button:要指定不同的鼠标键点击,‘left’ 左键,'middle’中键, 'right’右键
clicks:要进行多次单击,请将整数传递给clicks关键字参数
interval:指定点击之间的暂停量(以秒为单位)

  1. click() 方法
pyautogui.click()  # 默认在当前光标位置,使用鼠标左键点击

moveTo()与click() 在点击之前合并调用,可以为click()传递x, y参数:

pyautogui.click(x, y)  # 移动到目标位置,使用鼠标左键点击

要指定不同的鼠标键点击,传递’left’,‘right’,'middle’等参数:

pyautogui.click(x, y, [button='left/right/middle'])

要进行多次点击,请将整数传递给clicks关键字参数。

 pyautogui.click(clicks=2) # 连续点击2次pyautogui.click(clicks=2) # 连续点击3次

interval关键字参数,是以指定两次点击之间的暂停时间(以秒为单位)

 pyautogui.click(clicks=2, interval=0.25) # 连续点击2次,两次点击之间的暂停时间0.25秒

综合使用

 pyautogui.click(x=100, y=200, duration=2, clicks=2, interval=0.25, button='right')# 移动到x轴100像素 y轴200像素的位置,移动时间为2秒# 进行右键点击2次,每次点击间隔时间0.25秒
  1. rightClick() 方法
pyautogui.rightClick()  # 默认在当前光标位置,使用鼠标右键点击
  1. middleClick() 方法
pyautogui.middleClick()  # 默认在当前光标位置,使用鼠标中键点击
  1. doubleClick() 方法
pyautogui.doubleClick() # 默认在当前光标位置,双击鼠标左键
  1. tripleClick() 方法
pyautogui.tripleClick() # 默认在当前光标位置,鼠标左键点击三次
  1. mouseDown()和mouseUp()方法
pyautogui.mouseDown() # 按下鼠标左键
pyautogui.mouseUp()  # 释放鼠标左键

鼠标单击和拖动包括按下鼠标按钮并向上释放鼠标按钮。
如果要单独执行这些操作,请调用mouseDown()和mouseUp()方法。

例如

pyautogui.mouseDown(button='left', x=100, y=200, duration=2) # 先移动到目标位置按下鼠标左键(开始)
pyautogui.mouseUp(button='left', x=300, y=400, duration=2) # 移动到目标位置后释放鼠标左键(结束)

此方法是将 dragTo()方法的拖动效果 拆开使用。可控制鼠标的点击和释放效果。

鼠标的滚动功能

可以通过调用scroll()方法并传递整数来滚动鼠标滚轮。

pyautogui.scroll(50)  # 控制窗口上下滚动(滚动发生在鼠标的当前位置)填入正数为向上滚动
pyautogui.scroll(-50)  # 控制窗口上下滚动(滚动发生在鼠标的当前位置)填入负数为向下滚动

在不同平台上,滚动量会有所不同。(可选)可以传递x和y参数,以在执行滚动之前移动鼠标光标。
例如

pyautogui.scroll(10, x=100, y=200) # 移动到目标位置,滚轮向上滚动

在OS X和Linux平台上,PyAutoGUI也可以通过调用hscroll()函数执行水平滚动。

pyautogui.hscroll(10)  # 向右滚动
pyautogui.hscroll(-10) # 向左滚动

键盘

  1. typewrite() 方法
    typewrite() 方法 模拟键盘输
pyautogui.typewrite('Hello world!') # 从键盘输入Hello world(向文本框发送字符串)

要在按下每个字符键之间添加延迟间隔,请为interval关键字参数传递一个int或float值。

 pyautogui.typewrite('Hello world!', interval=0.25) # 从键盘输入Hello world,每隔0.25秒输入一个字符

除了单个字符串,还可以向typewrite()函数传递键字符串的列表
例如:

  pyautogui.typewrite(['V','V','left','left','c','a','t'])   # 按'V'键,'V'键,然后按左箭头两次,然后按'c'、'a'、't'# 输出结果为catVV

typewrite()只能按下单字符键,无法按Shift或ctrl等组合键。
注意:只能输入英文

  1. press()方法
 pyautogui.press('enter')  # 按下回车键(按下并释放)pyautogui.press('left') # 按下左键 (按下并释放)

还可以将字符串列表传递给press()
例如

 pyautogui.press(['left', 'left', 'left'])

利用press()方法可以实现中文输入
例如

pyautogui.press('shift') # 切换输入法的中英文
pyautogui.press(['n', 'i'], interval=0.5)  # press 可以对单个字符或者列表进行操作
pyautogui.press(['h', 'a', 'o'], interval=0.5)
pyautogui.press(['s', 'h', 'i'], interval=0.5)
pyautogui.press(['j', 'i', 'e'], interval=0.5)
pyautogui.press(' ')
  1. keyDown()和 keyUp()方法
    press()方法实际上只是keyDown()和keyUp()函数的包装,它们模拟按下一个键然后释放它。
    例如:
pyautogui.keyDown('shift') # 按下shift键(不进行释放)
pyautogui.press('left')    # 按左箭头键 (按下后释放)
pyautogui.press('left')    # 按左箭头键 (按下后释放)
pyautogui.press('left')    # 按左箭头键  (按下后释放)
pyautogui.keyUp('shift')   # 释放shift键(进行释放)

总结
pyautogui.keyDown() #根据传入的键字符串,向计算机发送虚拟的按键(按下)
pyautogui.keyUp() #根据传入的键字符串,向计算机发送虚拟的释放(释放)
pyautogui.press() #前面两个方法的封装,模拟完整的击键(按下并释放)

  1. hotkey()方法
    为了方便快捷地按下热键或键盘快捷键,hotkey()可以传递几个键的字符串,这些字符串将按顺序按下,然后以相反的顺序释放。
    例如:
 pyautogui.hotkey('ctrl', 'shift', 'esc')# 相当于这段代码pyautogui.keyDown('ctrl')pyautogui.keyDown('shift')pyautogui.keyDown('esc')pyautogui.keyUp('esc')pyautogui.keyUp('shift')pyautogui.keyUp('ctrl')

例如:

 pyautogui.hotkey('ctrl','c')# 相当于pyautogui.keyDown('ctrl')pyautogui.keyDown('c')pyautogui.keyUp('c')pyautogui.keyUp('ctrl')
 pyautogui.hotkey('ctrl','v')# 相当于pyautogui.keyDown('ctrl')pyautogui.keyDown('v')pyautogui.keyUp('v')pyautogui.keyUp('ctrl')

pyautogui.hotkey() # 接收多个字符串参数,顺序按下,再按相反的顺序释放

  1. 通过对以下是有效字符串press(),keyDown(),keyUp(),和hotkey()功能:

    [’\t’, ‘\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. 完整的键盘键字符串如下:

键盘键字符串 含义
‘a’,‘b’,‘c’,‘A’,‘C’,‘1’,‘2’,‘3’,’!’,’@’,’#'等 单个字符的键
‘enter’ 回车
‘esc’ ESC键
‘shiftleft’,‘shiftright’ 左右Shift键
‘altleft’,‘altright’ 左右Alt键
‘ctrlleft’,‘ctrlright’ 左右Ctrl键
‘tab’(or ‘\t’) Tab键
‘backspace’,‘delete’ Backspace键和Delete键
‘pageup’,‘pagedown’ Page Up 和Page Down键
‘home’,‘end’ Home键和End键
‘up’,‘down’,‘left’,‘right’ 上下左右箭头键
‘f1’,‘f2’,'f3’等 F1至F12键
‘volumemute’,‘volumeup’,volumedown’ 静音,放大音量和减小音量键
‘pause’ 暂停键
‘capslock’,‘numlock’,‘scrolllock’ Caps Lock,Num Lock和 Scroll Lock键
‘insert’ Insert键
‘printscreen’ Prtsc或Print Screen键
‘winleft’,‘winright’ 左右Win键(在windows上)
‘command’ Command键(在OS X上)
‘option’ Option键(在OS X上)

Python调用PyAutoGUI模块相关推荐

  1. linux 下Python调用C模块

    在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明: (1)编写C代码,hello ...

  2. Linux下用Python调用C模块

    http://blog.chinaunix.net/uid-22920230-id-3418876.html 在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模 ...

  3. 使用python调用nmap模块实现端口扫描

    使用python调用nmap模块实现端口扫描 安装python-nmap模块 pip3 install python-nmapPortScanner()类,实现一个nmap工具的端口扫描功能封装; 代 ...

  4. Python调用pikepdf模块解密PDF文件(使用tkinter模块绘制GUI)

    Python调用pikepdf模块解密.合并PDF文件(使用tkinter模块绘制GUI) 安装模块 pip install pikepdf 代码 #!/usr/bin/pythonimport os ...

  5. layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

  6. cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

  7. Python调用MySQL模块初试

    学Python喊了很长时间了,总是因为各种各样的理由搁置,昨天想起来前同事推荐过一本Python的书<Python核心编程>第二版,就火速买了一本,Python的学习也算是个开始了. 当然 ...

  8. Python的pyautogui模块,自动化操作的强大工具

    在Python当中,不仅代码简单,而且有着非常丰富的模块,pyautogui就可以称之为自动化操作的"神器". 为什么说是神器呢?百度的搜索的解释如下: PyAutoGUI是一个纯 ...

  9. python email 附件_使用python调用email模块实现附件发送

    摘要: 平时运行一些脚本,需要把结果发送到邮箱,可以用python来处理. 需要模块: import datetime import time import sys import mimetypes ...

最新文章

  1. 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
  2. jzoj4016-圈地为王【状压,bfs,几何】
  3. java.lang.UnsatisfiedLinkError: D:\Program Files\apache-tomcat-9.0.30\bin
  4. 菜鸟学做——三层交换综合模拟实验【1】
  5. java进程的守护进程脚本
  6. Jfinal Quartz 插件
  7. c语言链表二路归并排序,链表的二路归并排序 Sort List
  8. Ms08067红队学员 “红蓝实战对抗”报告
  9. 【考研数学】微分中值定理计算极限专题
  10. SANGFOR深信服远程办公客户端EasyConnect在Windows11使用兼容性问题解决案例
  11. 基于神经网络识别抑郁症附matlab代码
  12. 基于惯性轮倒立摆原理的自行车
  13. English trip 自习内容 句子结构和成分
  14. ubuntu 黑体_Ubuntu 黑体解决方案
  15. 2020-11-7YTUOJ3545: 输出最长单词
  16. mysql登录其他电脑_如何连接另一台电脑的mysql数据库
  17. PDF补丁丁( PDFPatcher.)
  18. 机器学习中使用的神经网络(六) --第二课
  19. 云图数字iOS客户端
  20. 猿团宣布加入中国信息无障碍产品联盟,致力信息无障碍化公益事业

热门文章

  1. T400的5100无线网卡在Centos下跑起来了
  2. Servlet学习笔记 Servlet原理
  3. harmonyos2.0开发者beta,华为鸿蒙 HarmonyOS 2.0 手机开发者 Beta 活动(广州站)报名开启...
  4. Android 自定义控件打造史上最简单的侧滑菜单
  5. django 快速搭建blog
  6. 界面原型创建工具Axure 基本操作
  7. TrueNorth:IBM的百万神经元类人脑芯片
  8. 前端三十一:标签的属性
  9. 【前端词典】和媳妇讲代理后的意外收获
  10. 案例解读:小红书邂逅AWS,轻松玩转社区+电商