脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - pyautogui库的使用教程(超详细)

pyautogui库的使用教程(超详细)

2023-08-23 12:35QQVQQ... Python

这是 PyAutoGUI 的使用手册。PyAutoGUI 是适用于 Python 2 和 3 的跨平台 GUI 自动化模块。您可以控制鼠标和键盘以及执行基本图像识别以自动执行计算机上的任务。

一、前言

PyAutoGUI 让您的 Python 脚本控制鼠标和键盘以自动与其他应用程序交互。

官方文档:PyAutoGUI documentation

常用函数列表
  函数名 功能
基本 pyautogui.size() 返回包含分辨率的元组
pyautogui.PAUSE 每个函数的停顿时间,默认0.1s
pyautogui.FAILSAFE 是否开启防故障功能,默认True
     
键盘 pyautogui.press('键盘字符') 按下并松开指定按键
pyautogui.keyDown('键盘字符') 按下指定按键
pyautogui.keyUp('键盘字符') 松开指定按键
pyautogui.hotkey('键盘字符1', '键盘字符2') 按下多个指定键
     
鼠标 pyautogui.position() 返回当前鼠标当前位置的元组
pyautogui.moveTo(x,y,duration=1)    按绝对位置移动鼠标并设置移动时间
pyautogui.moveRel(x_rel,y_rel,duration=4)   按相对位置移动鼠标并设置移动时间
pyautogui.dragTo(x, y, duration=1)    按绝对位置拖动鼠标并设置移动时间
pyautogui.dragRel(x_rel, y_rel, duration=4)   按相对位置拖动鼠标并设置移动时间
pyautogui.click(x, y)  鼠标点击指定位置,默认左键
pyautogui.click(x, y, button='left') 鼠标单击左键
pyautogui.click(x, y, button='right') 鼠标单击右键
pyautogui.click(x, y, button='middle')   鼠标单击中间,即滚轮
pyautogui.doubleClick(10,10)  鼠标左键双击指定位置
pyautogui.rightClick(10,10) 鼠标右键双击指定位置
pyautogui.middleClick(10,10)  鼠标中键双击指定位置
pyautogui.scroll(10)  鼠标滚轮向上滚动10个单位

press(), keyDowm(),keyUp(),hotKey()支持的有效字符串列表如下:

类别  
字母 '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'
数字 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
符号 '\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', , ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~',
F键 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
数字键盘 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 
其他 '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', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', , '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'

二、基本使用

0. 坐标说明

pyautogui库的使用教程(超详细)

坐标的距离通过像素计算,如果你的屏幕分辨率是1920 x 1080,右下角的像素将是1919, 1079(因为坐标从0开始,而不是1)。 

1. 一般功能

① 获取鼠标当前坐标(以像素为单位)

pyautogui.position()

② 获取屏幕尺寸 

pyautogui.size()

③ 判断指定坐标 (x,y) 是否在屏幕内

 pyautogui.onScreen(x, y)

2. 故障保险

① 控制调用 PyAutoGUI 后的暂停时间(单位:秒)

pyautogui.PAUSE = 2.5

② 当故障安全模式为True时,将鼠标移动到左上角将引发一个 pyautogui.FailSafeException 从而中断程序(默认为:True)

pyautogui.FAILSAFE = True

3. 鼠标控制

① 在 num_Second 秒内将鼠标移动到指定坐标

pyautogui.moveTo(x, y, duration=num_seconds)

② 相对于鼠标当前位置移动鼠标

pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) 

③ 在 num_Second 秒内将鼠标拖动到指定坐标

pyautogui.dragTo(x, y, duration=num_seconds)

④  相对于鼠标当前位置拖动鼠标

pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)

⑤ 调用click()只会让鼠标在当前位置用左键单击一次,但关键字参数可以改变这一点,button关键字参数可以'left'是、'middle''right'

pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks,button = 'left')

⑥ 单独调用指定键的点击事件

pyautogui.rightClick(x=moveToX, y=moveToY)

pyautogui.middleClick(x=moveToX, y=moveToY)

pyautogui.doubleClick(x=moveToX, y=moveToY)

pyautogui.tripleClick(x=moveToX, y=moveToY)

⑦ 正数控制滚轮将向上滚动,负数控制滚轮将向下滚动

pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY)

⑧ 单独调用鼠标的按下和松开事件

pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')

pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')

4. 键盘控制

① 在键盘光标处输入指定文本

pyautogui.typewrite('Hello world!\n', interval=secs_between_keys)

② 传递密钥等

pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys) 

③ 键盘热键(如Ctrl-S或Ctrl-Shift-1)可以通过将键名称列表传递给hotkey()来完成:

pyautogui.hotkey('ctrl', 'c')  # ctrl-c 复制

pyautogui.hotkey('ctrl', 'v')  # ctrl-v 粘贴

④ 单独调用按钮的点击事件和松开事件:

pyautogui.keyDown(键名称)

pyautogui.keyUp(键名称) 

5. 消息框函数

如果您需要暂停程序直到用户单击确定,或者想要向用户显示一些信息,则可使用消息框函数。

pyautogui.alert('这将显示带有确定按钮的文本。')

pyautogui.confirm('这将显示带有确定和取消按钮的文本。')

pyautogui.prompt('这样用户就可以输入一个字符串,然后按确定。')

6. 截图功能

① PyAutoGUI使用Pillow/PIL来存储与图像相关的数据。

pyautogui.screenshot()  # 返回Pillow/PIL图像对象

pyautogui.screenshot('foo.png')  # 返回Pillow/PIL图像对象,并将其保存到文件

② 返回在当前界面找到第一个图标位置的元组 (left, top, width, height) 

pyautogui.locateOnScreen('looksLikeThis.png') 

③ LocateAllOnScreen()函数将返回屏幕上找到的所有位置的生成器。

>>> for i in pyautogui.locateAllOnScreen('looksLikeThis.png')

...

...

(863, 117, 70, 13)

(623, 137, 70, 13)

(853, 577, 70, 13)

(883, 617, 70, 13)

(973, 657, 70, 13)

(933, 877, 70, 13)

>>> list(pyautogui.locateAllOnScreen('looksLikeThis.png'))

[(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]

④ 返回屏幕上图像所在位置的XY坐标。

>>> pyautogui.locateCenterOnScreen('looksLikeThis.png')  # 返回中心坐标 (898,423)

三、进阶教程

1. 鼠标控制

1.1 pyautogui.size()

返回屏幕的分辨率大小,返回类型为元组。

>>> pyautogui.size()
(1920, 1080)

1.2 pyautogui.position()

返回鼠标光标的当前位置,返回类型为元组。

>>> pyautogui.position()
(187, 567)

1.3 pyautogui.onScreen()

判断指定位置是否在屏幕内,返回类型为布尔型。

>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
>>> pyautogui.onScreen(0, 99999999)
False

1.4 pyautogui.move()

移动鼠标光标以当前位置为起点移动指定距离,如果输入 None 则为当前位置的X或Y。

>>> pyautogui.moveTo(100, 200)   # moves mouse to X of 100, Y of 200.
>>> pyautogui.moveTo(None, 500)  # moves mouse to X of 100, Y of 500.
>>> pyautogui.moveTo(600, None)  # moves mouse to X of 600, Y of 500.

 第三个参数可以设置鼠标移动到指定位置所花费的时间。

>>> pyautogui.moveTo(100, 200, 2)   # moves mouse to X of 100, Y of 200 over 2 seconds

1.5 pyautogui.moveTo()

与move()类似,此函数可以按照绝对位置移动鼠标。

>>> pyautogui.moveTo(100, 200)  # moves mouse to X of 100, Y of 200.
>>> pyautogui.move(0, 50)       # move the mouse down 50 pixels.
>>> pyautogui.move(-30, 0)      # move the mouse left 30 pixels.
>>> pyautogui.move(-30, None)   # move the mouse left 30 pixels.

1.6 pyautogui.drag()

以相对位置拖动鼠标,可指定拖动时按住某个键:'left', 'middle', 'right'。

>>> pyautogui.dragTo(100, 200, button='left')     # drag mouse to X of 100, Y of 200 while holding down left mouse button
>>> pyautogui.dragTo(300, 400, 2, button='left')  # drag mouse to X of 300, Y of 400 over 2 seconds while holding down left mouse button
>>> pyautogui.drag(30, 0, 2, button='right')   # drag the mouse left 30 pixels over 2 seconds while holding down the right mouse button

1.7 pyautogui.dragto()

以绝对位置拖动鼠标,可指定拖动时按住某个键:'left', 'middle', 'right'。

1.8 pyautogui.click()

模拟在鼠标当前位置单击鼠标左键。

>>> pyautogui.click()  # click the mouse
>>> pyautogui.click(x=100, y=200)  # move to 100, 200, then click the left mouse button.
>>> pyautogui.click(button='right')  # right-click the mouse
>>> pyautogui.click(clicks=2)  # double-click the left mouse button
>>> pyautogui.click(clicks=2, interval=0.25)  # double-click the left mouse button, but with a quarter second pause in between clicks
>>> pyautogui.click(button='right', clicks=3, interval=0.25)  ## triple-click the right mouse button with a quarter second pause in between clicks

1.9 pyautogui.doubleClick()

模拟双击鼠标左键。

>>> pyautogui.doubleClick()  # perform a left-button double click

1.10 pyautogui.tripleClick()

1.11 pyautogui.rightClick()

1.12 pyautogui.mouseDown()

按下鼠标

>>> pyautogui.mouseDown(); pyautogui.mouseUp()  # does the same thing as a left-button mouse click
>>> pyautogui.mouseDown(button='right')  # press the right button down
>>> pyautogui.mouseUp(button='right', x=100, y=200)  # move the mouse to 100, 200, then release the right button up.

1.13 pyautogui.mouseUp()

松开鼠标

1.14 pyautogui.scroll()

滚动鼠标滚轮

>>> pyautogui.scroll(10)   # scroll up 10 "clicks"
>>> pyautogui.scroll(-10)  # scroll down 10 "clicks"
>>> pyautogui.scroll(10, x=100, y=100)  # move mouse cursor to 100, 200, then scroll up 10 "clicks"

1.15 pyautogui.hscroll()

水平滚动鼠标

>>> pyautogui.hscroll(10)   # scroll right 10 "clicks"
>>> pyautogui.hscroll(-10)   # scroll left 10 "clicks"

1.16 pyautogui.vscroll()

垂直滚动鼠标

2. 键盘控制

2.1 pyautogui.write()

键入指定字符串

>>> pyautogui.write('Hello world!')                 # prints out "Hello world!" instantly
>>> pyautogui.write('Hello world!', interval=0.25)  # prints out "Hello world!" with a quarter second delay after each character

2.2 pyautogui.press()

按一次指定键

>>> pyautogui.press('enter')  # press the Enter key
>>> pyautogui.press('f1')     # press the F1 key
>>> pyautogui.press('left')   # press the left arrow key

2.4 pyautogui.keyDown()

按下指定键

2.5 pyautogui.keyUp()

松开指定键

2.6 pyautogui.hold()

保持按住某个键并松开

>>> with pyautogui.hold('shift'):
        pyautogui.press(['left', 'left', 'left'])

2.7 pyautogui.hotkey()

实现快捷键

>>> pyautogui.hotkey('ctrl', 'shift', 'esc')

3. 消息框函数

PyAutoGUI利用PyMsgBox中的消息框函数提供了一种跨平台的纯Python方式来显示JavaScript样式的消息框。提供了四个消息框函数:

3.1 pyautogui.alert() 

>>> alert(text='', # 捕获并保存到本地 >>> im3 = pyautogui.screenshot(region=(0,0, 300, 400)) # 捕获指定范围

4.2 pyautogui.locateOnScreen()

获取屏幕坐标。返回值是一个 4 整数元组:(left, top, width, height)。可以传递此元组center()以获取此区域中心的 X 和 Y 坐标。

4.3 pyautogui.locateCenterOnScreen()

返回在屏幕上找到的第一个实例的中心的 (x, y) 坐标。

4.4 pyautogui.locateAllOnScreen()

返回一个生成器,该生成器生成(左、上、宽、高)元组。

4.5 pyautogui.pixel()

获取屏幕截图中像素的 RGB 颜色

>>> import pyautogui
>>> im = pyautogui.screenshot()
>>> im.getpixel((100, 200))
(130, 135, 144)

4.6 pyautogui.pixelMatchesColor()

验证单个像素是否与给定像素匹配。

>>> import pyautogui
>>> pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
True
>>> pyautogui.pixelMatchesColor(100, 200, (0, 0, 0))
False

四、实例

1. 自动点击网页指定图标

参考链接:

import pyautogui
import time

while True:
    # 本页存在指定图标
    if pyautogui.locateOnScreen('icon.png'):
        time.sleep(0.5)    # 等待 0.5 秒
        position = pyautogui.center(pyautogui.locateOnScreen('icon.png'))    # 寻找图标的中心
        pyautogui.click(position)    # 点击
    # 本页不存在指定图标
    else:  
        pyautogui.scroll(-500)    # 滚动鼠标,进入下一页

2. 获取鼠标当前位置

# 案例获取鼠标的位置,方便复制我们定位的鼠标坐标点到代码中
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()

到此这篇文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/hfy1237/article/details/127960423

延伸 · 阅读

精彩推荐
  • PythonPython松散正则表达式用法分析

    Python松散正则表达式用法分析

    这篇文章主要介绍了Python松散正则表达式用法,较为详细的分析了松散正则表达式的概念、功能与相关使用技巧,需要的朋友可以参考下...

    阿涵-_-2922020-08-21
  • Python深入了解Python数据类型之列表

    深入了解Python数据类型之列表

    下面小编就为大家带来一篇深入了解Python数据类型之列表。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    Python教程网3092020-08-29
  • Python详解Python 装饰器执行顺序迷思

    详解Python 装饰器执行顺序迷思

    这篇文章主要介绍了详解Python 装饰器执行顺序迷思,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Nisen10212021-03-26
  • PythonPython使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例

    Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例

    这篇文章主要介绍了Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息,结合实例形式分析了Python中matplotlib模块进行坐标系图形绘制的相关操作技巧...

    grey_csdn12142021-02-15
  • Python如何用python插入独创性声明

    如何用python插入独创性声明

    这篇文章主要介绍了如何用python插入独创性声明,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...

    kimol君4742021-09-30
  • PythonPython assert断言声明,遇到错误则立即返回问题

    Python assert断言声明,遇到错误则立即返回问题

    这篇文章主要介绍了Python assert断言声明,遇到错误则立即返回问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐...

    Sesen_s9472023-02-14
  • Pythonpython实现函数极小值

    python实现函数极小值

    今天小编就为大家分享一篇python实现函数极小值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    your_answer9332021-08-06
  • Pythonpython如何实现API的调用详解

    python如何实现API的调用详解

    Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互,下面这篇文章主要给大家介绍了关于python实现API的快速调用指南,文中通过示例代码...

    张峰π_π11472023-02-06