详解Python中pyautogui库的最全使用方法


Posted in Python onApril 01, 2020

在使用Python做脚本的话,有两个库可以使用,一个为PyUserInput库,另一个为pyautogui库。就本人而言,我更喜欢使用pyautogui库,该库功能多,使用便利。下面给大家介绍一下pyautogui库的使用方法。在cmd命令框中输入pip3 install pyautogui即可安装该库!

常用操作

我们在pyautogui库中常常使用的方法,如下:

import pyautogui

pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep
pyautogui.FAILSAFE = True # 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常

# 判断(x,y)是否在屏幕上
x, y = 122, 244
pyautogui.onScreen(x, y) # 结果为true

width, height = pyautogui.size() # 屏幕的宽度和高度
print(width, height)

鼠标操作

我们在pyautogui库对于鼠标的使用方法大体如下:

import pyautogui

currentMouseX, currentMouseY = pyautogui.position() # 鼠标当前位置
print(currentMouseX, currentMouseY)

# 控制鼠标移动,duration为持续时间
for i in range(2):
  pyautogui.moveTo(100, 100, duration=0.25) # 移动到 (100,100)
  pyautogui.moveTo(200, 100, duration=0.25)
  pyautogui.moveTo(200, 200, duration=0.25)
  pyautogui.moveTo(100, 200, duration=0.25)

for i in range(2):
  pyautogui.moveRel(50, 0, duration=0.25) # 从当前位置右移100像素
  pyautogui.moveRel(0, 50, duration=0.25) # 向下
  pyautogui.moveRel(-50, 0, duration=0.25) # 向左
  pyautogui.moveRel(0, -50, duration=0.25) # 向上

# 按住鼠标左键,把鼠标拖拽到(100, 200)位置
pyautogui.dragTo(100, 200, button='left')
# 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
pyautogui.dragTo(300, 400, 2, button='left')
# 按住鼠标左键,用0.2秒钟把鼠标向上拖拽
pyautogui.dragRel(0, -60, duration=0.2)

# pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
# 其中,button属性可以设置成left,middle和right。
pyautogui.click(10, 20, 2, 0.25, button='left')
pyautogui.click(x=100, y=200, duration=2) # 先移动到(100, 200)再单击
pyautogui.click() # 鼠标当前位置点击一下
pyautogui.doubleClick() # 鼠标当前位置左击两下
pyautogui.doubleClick(x=100, y=150, button="left") # 鼠标在(100,150)位置左击两下
pyautogui.tripleClick() # 鼠标当前位置左击三下

pyautogui.mouseDown() # 鼠标左键按下再松开
pyautogui.mouseUp()
pyautogui.mouseDown(button='right') # 按下鼠标右键
pyautogui.mouseUp(button='right', x=100, y=200) # 移动到(100, 200)位置,然后松开鼠标右键

# scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动
# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
pyautogui.scroll(5, 20, 2)
pyautogui.scroll(10) # 向上滚动10格
pyautogui.scroll(-10) # 向下滚动10格
pyautogui.scroll(10, x=100, y=100) # 移动到(100, 100)位置再向上滚动10格

# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。
# PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。
# 开始很慢,不断加速
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)
# 开始很快,不断减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)
# 一步一徘徊前进
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超过起点和终点
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

对于我们要获取鼠标在屏幕中的位置,我们可以采用如下代码:

# 案例获取鼠标的位置,方便复制我们定位的鼠标坐标点到代码中
import pyautogui
import time


# 获取鼠标位置
def get_mouse_positon():
  time.sleep(5) # 准备时间
  print('开始获取鼠标位置')
  try:
    for i in range(10):
      # Get and print the mouse coordinates.
      x, y = pyautogui.position()
      positionStr = '鼠标坐标点(X,Y)为:{},{}'.format(str(x).rjust(4), str(y).rjust(4))
      pix = pyautogui.screenshot().getpixel((x, y)) # 获取鼠标所在屏幕点的RGB颜色
      positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(
        3) + ')'
      print(positionStr)
      time.sleep(0.5) # 停顿时间
  except:
    print('获取鼠标位置失败')


if __name__ == "__main__":
  get_mouse_positon()

也可以使用pyautogui库帮助文档的方法,不过本人认为使用上面的方法,更加便利。pyautogui库帮助文档的获取鼠标位置的方法如下:

import pyautogui

print('Press Ctrl-C to quit.')
try:
  while True:
    # Get and print the mouse coordinates.
    x, y = pyautogui.position()
    positionStr = 'X:' + str(x).rjust(4) + ' Y:' + str(y).rjust(4)
    pix = pyautogui.screenshot().getpixel((x, y)) # 获取鼠标所在屏幕点的RGB颜色
    positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
    print(positionStr, end='') # end='' 替换了默认的换行
    print('\b' * len(positionStr), end='', flush=True) # 连续退格键并刷新,删除之前打印的坐标,就像直接更新坐标效果
except KeyboardInterrupt: # 处理 Ctrl-C 按键
  print('\nDone.')

键盘操作

我们在pyautogui库对于键盘的使用方法大体如下:

import pyautogui

pyautogui.typewrite('Hello world!') # 输入Hello world!字符串
pyautogui.typewrite('Hello world!', interval=0.25) # 每次输入间隔0.25秒,输入Hello world!

pyautogui.press('enter') # 按下并松开(轻敲)回车键
pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松开(轻敲)四下左方向键
pyautogui.keyDown('shift') # 按下`shift`键
pyautogui.keyUp('shift') # 松开`shift`键

pyautogui.keyDown('shift')
pyautogui.press('4')
pyautogui.keyUp('shift') # 输出 $ 符号的按键

pyautogui.hotkey('ctrl', 'v') # 组合按键(Ctrl+V),粘贴功能,按下并松开'ctrl'和'v'按键

# pyautogui.KEYBOARD_KEYS数组中就是press(),keyDown(),keyUp()和hotkey()函数可以输入的按键名称
pyautogui.KEYBOARD_KEYS = ['\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']

弹窗操作

我们在pyautogui库对于弹出窗口的使用方法大体如下:

import pyautogui

# 显示一个简单的带文字和OK按钮的消息弹窗。用户点击后返回button的文字。
pyautogui.alert(text='', title='', button='OK')
b = pyautogui.alert(text='要开始程序么?', title='请求框', button='OK')
print(b) # 输出结果为OK

# 显示一个简单的带文字、OK和Cancel按钮的消息弹窗,用户点击后返回被点击button的文字,支持自定义数字、文字的列表。
pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # OK和Cancel按钮的消息弹窗
pyautogui.confirm(text='', title='', buttons=range(10)) # 10个按键0-9的消息弹窗
a = pyautogui.confirm(text='', title='', buttons=range(10))
print(a) # 输出结果为你选的数字

# 可以输入的消息弹窗,带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
pyautogui.prompt(text='', title='', default='')

# 样式同prompt(),用于输入密码,消息用*表示。带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
pyautogui.password(text='', title='', default='', mask='*')

图像操作

我们在pyautogui库对于图像的使用方法大体如下:

import pyautogui

pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\my_screenshot.png') # 截全屏并设置保存图片的位置和名称
im = pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\my_screenshot.png') # 截全屏并设置保存图片的位置和名称
print(im) # 打印图片的属性

# 不截全屏,截取区域图片。截取区域region参数为:左上角XY坐标值、宽度和高度
pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png', region=(0, 0, 300, 400))

pix = pyautogui.screenshot().getpixel((220, 200)) # 获取坐标(220,200)所在屏幕点的RGB颜色
positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
print(positionStr) # 打印结果为RGB:( 60, 63, 65)
pix = pyautogui.pixel(220, 200) # 获取坐标(220,200)所在屏幕点的RGB颜色与上面三行代码作用一样
positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
print(positionStr) # 打印结果为RGB:( 60, 63, 65)

# 如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函数,把X、Y和RGB元组值穿入即可
# 如果所在屏幕中(x,y)点的实际RGB三色与函数中的RGB一样就会返回True,否则返回False
# tolerance参数可以指定红、绿、蓝3种颜色误差范围
pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)

# 获得文件图片在现在的屏幕上面的坐标,返回的是一个元组(top, left, width, height)
# 如果截图没找到,pyautogui.locateOnScreen()函数返回None
a = pyautogui.locateOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png')
print(a) # 打印结果为Box(left=0, top=0, width=300, height=400)
x, y = pyautogui.center(a) # 获得文件图片在现在的屏幕上面的中心坐标
print(x, y) # 打印结果为150 200
x, y = pyautogui.locateCenterOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png') # 这步与上面的四行代码作用一样
print(x, y) # 打印结果为150 200

# 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出
pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png')
for pos in pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png'):
  print(pos)
# 打印结果为Box(left=0, top=0, width=300, height=400)
a = list(pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png'))
print(a) # 打印结果为[Box(left=0, top=0, width=300, height=400)]

参考资料

PyAutoGUI帮助文档:
https://blog.csdn.net/qq_34053552/article/details/79776671
pyautogui图形自动化,击败重复性办公任务:
https://blog.csdn.net/qq_43017750/article/details/90575240

到此这篇关于详解Python中pyautogui库的最全使用方法的文章就介绍到这了,更多相关Python pyautogui库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
python3中property使用方法详解
Apr 23 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
Nov 08 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
Pycharm github配置实现过程图解
Oct 13 Python
Python模块常用四种安装方式
Oct 20 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 #Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 #Python
Django数据库操作之save与update的使用
Apr 01 #Python
django model通过字典更新数据实例
Apr 01 #Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 #Python
python 日志 logging模块详细解析
Mar 31 #Python
django迁移文件migrations的实现
Mar 31 #Python
You might like
php 空格,换行,跳格使用说明
2009/12/18 PHP
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
详解vue axios中文文档
2017/09/12 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
企业内控岗位的职责
2014/02/07 职场文书
计算机专业自荐信
2014/05/24 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
Python中字符串对象语法分享
2022/02/24 Python