pyautogui-让所有GUI都自动化!

Python-PyAutoGUI 库详解 PyAutoGUI 是 Python 生态中 ​。 阅读详情
AI摘要

本文介绍了纯Python的GUI自动化库pyautogui,涵盖鼠标、键盘、弹窗、屏幕等函数。如鼠标可实现移动、点击、滚动、拖拽;键盘能模拟输入、按键、热键等;还有多种弹窗及截图、图像定位、像素点匹配等屏幕函数,可满足多种自动化需求。

项目介绍

官方链接

项目信息:官方文档
github地址

官方简体中文演示:博主博客原文有简中文档

功能实现

pyautogui是一个纯python的GUI自动化库,博主主要用它实现鼠标点击、键盘输入、查图定位、像素定位等功能,这也是pyautogui的主要功能。

博主将详细介绍pyautogui的以下功能以及相关函数:

  • 鼠标函数,鼠标移动、点击、拖动等;
  • 键盘函数,按键按下、弹起、热键、模拟输入等;
  • 弹窗函数,按钮弹窗、输入弹窗等;
  • 截图函数,截图等;
  • 屏幕函数,灰度匹配、像素点匹配、图片定位等。

思维导图

点击放大,查阅,图片下面有pdf下载地址
pyautogui思维导图

博主原文章思维导图下有原图PDF下载

这是好多年前博主看别人的教程整理的,大家凑活着看昂,其中的思路以及函数还是比较全面而且清晰的。

保护措施

pyautogui默认开启保护措施,即

pyautogui.FAILSAFE = True

当你的脚本在运行时,可以快速手动将鼠标移动到屏幕角落,左上角、右上角等,pyautogui在执行下一个脚本动作时就会直接抛出错误并终止脚本:

#报错信息
  File "C:\anaconda\Lib\site-packages\pyautogui\__init__.py", line 1710, in failSafeCheck
    raise FailSafeException(
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.

要关闭安全模式可以设置为False,就不会抛出错误,当然终止脚本就没有那么容易了:

#关闭pyautogui的安全模式
pyautogui.FAILSAFE = False

鼠标函数

这里我们介绍最常用的几个鼠标函数以及它们的参数用法:

鼠标移动

鼠标移动的函数有绝对移动和相对移动,顾名思义就是一个是直接移动到坐标点,一个是相对现在的位置进行移动,函数:

pyautogui.moveTo(x, y, duration=num_seconds, tween=pyautogui.linear)
  • x 和 y:这两个参数是必须的,它们指定了鼠标指针将要移动到的屏幕坐标。坐标系的原点(0, 0)通常位于屏幕的左上角。
  • duration(可选):这是指移动鼠标指针所需的时间,以秒为单位。默认情况下,移动是瞬间完成的。如果指定了一个正数值,那么鼠标指针会在这个时间内平滑地移动到目标位置。
  • tween(可选):这是一个插值函数,用于定义鼠标移动的动画效果。默认值 pyautogui.linear 表示线性运动,即速度恒定。您还可以使用其他预定义的函数来创建加速、减速等效果,例如 pyautogui.easeInQuad, pyautogui.easeOutQuad, pyautogui.easeInOutQuad 等。

相对移动:

pyautogui.moveRel(xOffset, yOffset, duration=num_seconds, tween=pyautogui.linear)
  • xOffset 和 yOffset:这两个参数是必须的,它们指定了相对于当前鼠标位置的水平和垂直偏移量。正值会使鼠标向右(xOffset)或向下(yOffset)移动;负值则使鼠标向左或向上移动;
  • duration(可选):同上;
  • tween(可选):同上。

鼠标点击

pyautogui.click()函数用于模拟鼠标点击。它可以在指定的屏幕位置执行单击、双击或右键点击等操作。此函数具有多个参数,允许用户自定义点击的行为。

参数说明
  • x 和 y:这两个参数是可选的,它们指定了要点击的屏幕坐标。如果未提供这些参数,则在当前鼠标位置执行点击。坐标系的原点(0, 0)通常位于屏幕的左上角。
  • clicks(可选):这指定了要执行的点击次数,默认为1次。可以设置为2来执行双击,或者更大的数字以执行多次点击。
  • interval(可选):这是每次点击之间的间隔时间,以秒为单位。默认情况下没有间隔。
  • button(可选):这指定了要使用的鼠标按钮。可以是 ‘left’(默认)、’right’ 或 ‘middle’,分别对应于鼠标的左键、右键和中键。
  • duration(可选):这个参数控制移动到点击位置所需的时间(仅当提供了x和y参数时)。默认情况下,移动是瞬间完成的。
  • tween(可选):这是一个插值函数,它定义了鼠标移动的动画效果。默认使用 pyautogui.linear 表示线性运动,速度恒定。您还可以选择其他预定义的函数来创建不同的加减速效果。
import pyautogui

# 在当前位置进行一次左键点击
pyautogui.click()

# 移动到 (100, 200) 并进行两次快速点击(双击)
pyautogui.click(x=100, y=200, clicks=2)

# 在 (300, 400) 执行一次右键点击,耗时1秒移动到该位置
pyautogui.click(x=300, y=400, button='right', duration=1)

# 在 (500, 600) 进行三次点击,每次点击之间有0.5秒的间隔
pyautogui.click(x=500, y=600, clicks=3, interval=0.5)
右键、中键及双击

pyautogui库还提供了多种模拟鼠标点击的方法,包括右键点击、中键点击和双击。这些操作可以通过click()函数的不同参数组合来实现,也可以直接使用专门的函数如 rightClick() 和middleClick()。

右键点击

要执行右键点击,可以使用 pyautogui.rightClick() 或者在 pyautogui.click()中指定 button='right' 参数。

import pyautogui

# 使用 rightClick() 进行右键点击
pyautogui.rightClick()

# 或者使用 click() 并指定 button 参数
pyautogui.click(button='right')
中键点击

对于中键点击,可以使用 pyautogui.middleClick()或者在 pyautogui.click()中指定 button='middle' 参数。

import pyautogui

# 使用 middleClick() 进行中键点击
pyautogui.middleClick()

# 或者使用 click() 并指定 button 参数
pyautogui.click(button='middle')
双击

要执行双击,可以直接调用 pyautogui.doubleClick(),或者在 pyautogui.click()中设置 clicks=2 参数。

import pyautogui

# 使用 doubleClick() 进行双击
pyautogui.doubleClick()

# 或者使用 click() 并指定 clicks 参数
pyautogui.click(clicks=2)

上述方法均可以在不提供坐标的情况下于当前鼠标位置执行相应的点击操作,也可以通过传递 x 和 y 参数来指定点击的具体位置。

鼠标滚轮

pyautogui 库不仅支持模拟鼠标点击和移动,还提供了 hscroll 和 vscroll 函数来模拟鼠标滚轮的水平和垂直滚动行为。这对于自动化网页浏览、文档查看等任务非常有用。

垂直滚动 (vscroll)

使用 pyautogui.vscroll 可以模拟垂直方向上的滚动。此函数接受一个参数 amount_to_scroll,表示滚动的“刻度”数量。正值表示向上滚动,负值表示向下滚动。

import pyautogui

# 向上滚动 10 个刻度
pyautogui.vscroll(10)

# 向下滚动 10 个刻度
pyautogui.vscroll(-10)

您还可以指定滚动的位置(即鼠标指针所在位置),通过传递 x 和 y 参数。

# 在屏幕坐标 (500, 500) 处向下滚动 10 个刻度
pyautogui.vscroll(-10, x=500, y=500)
水平滚动 (hscroll)

同样地,pyautogui.hscroll 用于模拟水平方向上的滚动。它也接受一个参数 amount_to_scroll,正值表示向右滚动,负值表示向左滚动。

import pyautogui

# 向右滚动 10 个刻度
pyautogui.hscroll(10)

# 向左滚动 10 个刻度
pyautogui.hscroll(-10)

与 vscroll 类似,您也可以为 hscroll 指定具体的滚动位置。

# 在屏幕坐标 (500, 500) 处向左滚动 10 个刻度
pyautogui.hscroll(-10, x=500, y=500)

鼠标拖拽

pyautogui 库提供了 dragTo 和 dragRel 函数,用于模拟鼠标在屏幕上拖动的行为。这两个函数可以用来实现如绘制图形、选择文本或移动窗口等操作。

拖拽绝对位置

使用 pyautogui.dragTo 可以将鼠标指针从当前位置拖动到屏幕上的一个绝对坐标位置。此函数接受多个参数来定制化拖动行为。

import pyautogui

# 将鼠标拖动到坐标 (100, 200),耗时2秒
pyautogui.dragTo(100, 200, duration=2)

# 使用线性插值函数拖动鼠标到坐标 (300, 400),耗时1秒
pyautogui.dragTo(300, 400, duration=1, tween=pyautogui.linear)
  • x 和 y:必须的参数,指定要拖动到的屏幕坐标。
  • duration(可选):定义了拖动所需的时间,以秒为单位。默认情况下是瞬间完成。
  • tween(可选):这是一个插值函数,它定义了鼠标拖动的动画效果,默认使用 pyautogui.linear 表示线性运动。
  • button(可选):指定哪个鼠标按钮被按下进行拖动,默认是左键。
拖拽相对位置

pyautogui.dragRel 则是在当前鼠标位置的基础上进行相对拖动。这意味着你可以指定相对于当前位置的水平和垂直偏移量来进行拖动。

import pyautogui

# 向右拖动50个像素点,向下拖动30个像素点,耗时1秒
pyautogui.dragRel(50, 30, duration=1)

# 向左拖动40个像素点,向上拖动20个像素点,耗时0.5秒,并使用 easeInOutQuad 插值函数
pyautogui.dragRel(-40, -20, duration=0.5, tween=pyautogui.easeInOutQuad)
  • xOffset 和 yOffset:必须的参数,指定相对于当前位置的水平和垂直偏移量。
  • 其它参数同dragTo。

键盘函数

键盘输入

pyautogui 库中的 typewrite 函数用于模拟键盘输入,可以用来自动化文本输入任务。此函数允许用户指定要输入的字符串以及每个字符之间的间隔时间。

基本用法

使用 typewrite 可以轻松地让程序自动输入文本。以下是该函数的基本参数说明:

import pyautogui

# 输入字符串 "Hello, World!",每个字符之间暂停 0.25 秒
pyautogui.typewrite('Hello, World!', interval=0.25)
  • message:必须的参数,表示要输入的字符串。
  • interval(可选):每个字符之间的暂停时间,默认是无间隔。这个参数可以帮助模拟更自然的打字速度。
高级用法

除了输入普通文本外,typewrite 还可以结合其他 pyautogui 函数来实现更复杂的键盘操作,例如按下组合键或特殊键。

import pyautogui

# 输入 "username" 并按 Tab 键切换到下一个输入框,再输入 "password"
pyautogui.typewrite('username')
pyautogui.press('tab')  # 按下 Tab 键
pyautogui.typewrite('password')

# 输入文本后按下 Enter 键提交表单
pyautogui.typewrite('search term', interval=0.1)
pyautogui.press('enter')

您可以使用 press 函数来发送单独的按键事件,包括功能键、箭头键等。对于需要同时按下的组合键,可以使用 hotkey 函数。

# 按下 Ctrl + C 组合键复制选定内容
pyautogui.hotkey('ctrl', 'c')

# 按下 Ctrl + V 组合键粘贴内容
pyautogui.hotkey('ctrl', 'v')

模拟按键

pyautogui 库中的 press 函数用于模拟按下和释放单个键盘按键。这对于自动化任务如打开菜单、切换选项或提交表单非常有用。press 函数可以发送标准按键事件,也可以发送特殊键(如功能键、箭头键等)。

基本用法

使用 press 可以轻松地让程序自动按下指定的键。以下是该函数的基本参数说明:

import pyautogui

# 按下并释放 "enter" 键
pyautogui.press('enter')

# 按下并释放 "tab" 键
pyautogui.press('tab')
  • keys:必须的参数,表示要按下的按键。可以是字符串形式的单个键名,也可以是一系列键名组成的列表或元组。
  • presses(可选):指定按键被按下的次数,默认为1次。
  • interval(可选):每次按键之间的暂停时间,默认是无间隔。这个参数可以帮助模拟更自然的按键节奏。
# 按下 "space" 键两次,每次之间暂停 0.5 秒
pyautogui.press('space', presses=2, interval=0.5)

# 依次按下多个键,如 "left", "right"
pyautogui.press(['left', 'right'], interval=0.1)
支持的按键名称

pyautogui 支持多种按键名称,包括字母、数字、符号以及特殊键。以下是一些常见的按键名称示例:

  • 普通字符:’a’, ‘b’, ‘c’, …, ‘1’, ‘2’, ‘3’, …
  • 特殊字符:’enter’, ‘esc’, ‘space’, ‘tab’
  • 功能键:’f1′, ‘f2’, …, ‘f12’
  • 导航键:’left’, ‘right’, ‘up’, ‘down’
  • 编辑键:’backspace’, ‘delete’
  • 其他:’home’, ‘end’, ‘insert’

如果需要模拟组合键(例如 Ctrl+C 或 Ctrl+V),应使用 hotkey 函数而不是单独调用 press。hotkey 函数允许同时按下多个键。

热键

pyautogui 库中的 hotkey 函数用于模拟同时按下多个键盘按键,这对于执行快捷键操作(如复制、粘贴、保存等)非常有用。通过 hotkey 函数,您可以自动化这些常见的键盘快捷方式,从而提高工作效率。

基本用法

使用 hotkey 可以轻松地让程序自动按下并释放一系列按键。以下是该函数的基本参数说明:

import pyautogui

# 模拟 Ctrl + C 组合键(复制)
pyautogui.hotkey('ctrl', 'c')

# 模拟 Ctrl + V 组合键(粘贴)
pyautogui.hotkey('ctrl', 'v')
  • keys:必须的参数,表示要按下的按键。可以是字符串形式的单个键名,也可以是一系列键名组成的列表或元组。每个键之间会同时按下和释放。
  • interval(可选):每次按键之间的暂停时间,默认是无间隔。这个参数可以帮助模拟更自然的按键节奏,但在大多数情况下,对于组合键来说并不是必需的。
# 模拟 Alt + Tab 组合键切换应用程序
pyautogui.hotkey('alt', 'tab')
多按键组合

hotkey 函数还可以处理更多按键的组合。例如,某些快捷键可能涉及三个或更多的按键。在这种情况下,只需将所有按键作为参数传递给 hotkey 即可。

# 模拟 Ctrl + Shift + Esc 组合键打开任务管理器
pyautogui.hotkey('ctrl', 'shift', 'esc')
# 模拟 Windows + L 组合键锁定计算机
pyautogui.hotkey('winleft', 'l')

模拟按键2

模拟按键返场,并非穿越,而是在模拟按键中press是按下弹起一次性完成,而有时候我们需要按下和弹起拆解完成,或者需要按下不弹起的场景,那么就需要keyDown和keyUp函数:

pyautogui 库中的 keyDown 和 keyUp 函数用于模拟单独的按键事件,分别对应于按键按下和按键释放。这两个函数允许更细粒度地控制键盘输入,特别是在需要模拟长按某个键或组合键的情况下。

基本用法

使用 keyDown 和 keyUp 可以精确控制按键的时间点,这对于某些特定的自动化任务非常有用。以下是这两个函数的基本参数说明:

import pyautogui

# 模拟按下 "shift" 键
pyautogui.keyDown('shift')

# 模拟释放 "shift" 键
pyautogui.keyUp('shift')
  • key:必须的参数,表示要按下的按键名。可以是单个字符(如 ‘a’)、功能键(如 ‘f1’)、特殊键(如 ‘enter’)等。
模拟长按按键

通过结合 keyDown 和 keyUp,您可以模拟长按某个键的效果。例如,在游戏中可能需要长按方向键来移动角色。

# 模拟长按 "left" 箭头键 5 秒钟
pyautogui.keyDown('left')
pyautogui.sleep(5)  # 暂停 5 秒
pyautogui.keyUp('left')
模拟组合键

对于需要同时按下的组合键,您可以先调用 keyDown 来按下所有按键,然后再调用 keyUp 来释放它们。这种方式特别适用于那些不能通过 hotkey 函数直接模拟的复杂组合键。

# 模拟 Ctrl + Shift + C 组合键
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.press('c')  # 按下并立即释放 'c'
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')

弹窗函数

在我刚接触pyautogui时,我就很喜欢用它的弹窗函数,因为不会GUI界面…pyautogui的弹窗函数基于Tkinter,它实现了4种纯Python的消息弹窗函数:alert、confirm、prompt、password。我分别介一下它们:

弹出警告框 (alert)

pyautogui 库中的 alert 函数用于显示一个简单的消息弹窗,通常用来在自动化脚本中提醒用户某些信息或状态。这个弹窗包含一条消息和一个“确定”按钮,用户需要点击该按钮来关闭弹窗。

alert 函数非常简单易用,它只需要一个参数,即要显示的消息文本。以下是该函数的基本用法:

import pyautogui

# 显示一个带有 "Hello, World!" 消息的警告框
pyautogui.alert('Hello, World!')
  • text:必须的参数,表示要显示的消息文本。
  • title(可选):设置弹窗标题,默认为 ‘PyAutoGUI’。
  • button(可选):设置按钮上的文本,默认为 ‘OK’。
# 自定义标题和按钮文本
pyautogui.alert(text='程序即将开始', title='提示', button='确定')

使用场景

alert 函数适用于以下几种情况:

  • 在脚本执行关键步骤之前,提醒用户确认。
  • 当脚本遇到错误或异常时,向用户报告问题。
  • 作为调试工具,在特定位置插入警报以检查代码流。

确认对话框 (confirm)

pyautogui 库中的 confirm 函数用于显示一个确认对话框,通常用来在自动化脚本中向用户提出问题并等待用户选择“是”或“否”。这个对话框包含一条消息、一个标题(可选)以及两个按钮:“OK”和“Cancel”。根据用户的点击,函数返回相应的字符串值。

基本用法

confirm 函数允许您通过弹窗与用户进行简单的交互。以下是该函数的基本参数说明:

import pyautogui

# 显示一个带有 "Do you want to continue?" 消息的确认对话框
response = pyautogui.confirm('Do you want to continue?')

# 根据用户的选择执行不同的操作
if response == 'OK':
    print('User chose OK')
elif response == 'Cancel':
    print('User chose Cancel')
  • text:必须的参数,表示要显示的消息文本。
  • title(可选):设置对话框标题,默认为 ‘PyAutoGUI’。
  • buttons(可选):指定按钮列表,默认为 [‘OK’, ‘Cancel’]。您可以自定义按钮文本,例如 [‘Yes’, ‘No’]。
# 自定义标题和按钮文本
response = pyautogui.confirm(text='Are you sure?', title='Confirmation', buttons=['Yes', 'No'])

if response == 'Yes':
    print('User confirmed the action.')
elif response == 'No':
    print('User declined the action.')

使用场景

confirm 函数适用于以下几种情况:

  • 在执行不可逆操作之前,如删除文件或提交表单,确保用户确实希望继续。
  • 作为流程控制的一部分,在关键步骤前获取用户的同意。
  • 测试或调试过程中,插入确认点以验证程序状态。

输入对话框 (prompt) 的用法

pyautogui 库中的 prompt 函数用于显示一个带有输入框的对话框,通常用来在自动化脚本中从用户那里获取文本输入。这个对话框包含一条消息、一个标题(可选)、一个默认值(可选)以及“OK”和“Cancel”按钮。根据用户的输入或选择,函数返回相应的字符串值或 None。

prompt 函数允许您通过弹窗与用户进行简单的交互,并收集他们提供的文本信息。以下是该函数的基本参数说明:

import pyautogui

# 显示一个带有 "Enter your name:" 消息的输入对话框
user_input = pyautogui.prompt('Enter your name:')

# 根据用户的输入执行不同的操作
if user_input is not None:
    print(f'User entered: {user_input}')
else:
    print('User canceled the input.')
  • text:必须的参数,表示要显示的消息文本。
  • title(可选):设置对话框标题,默认为 ‘PyAutoGUI’。
  • default(可选):设置输入框中的默认文本,默认为空字符串。
# 自定义标题和默认值
user_input = pyautogui.prompt(text='What is your favorite color?', title='Color Survey', default='Blue')

if user_input is not None:
    print(f'User\'s favorite color is: {user_input}')
else:
    print('User canceled the input.')

prompt 函数适用于以下几种情况:

  • 在自动化过程中需要用户提供某些信息时,如用户名、密码或其他个性化数据。
  • 作为调试工具,在特定位置插入提示以检查代码流或获取用户反馈。
  • 当脚本需要动态调整其行为时,例如根据用户的输入来改变后续的操作。

注意事项

虽然 prompt 函数可以有效地与用户交互,但在自动化过程中频繁使用可能会中断流程。所以这个一般放在开头获取一些信息比较合适;

而且一定要注意,prompt的返回值是str,如果输入一些数字、或其他非字符串类型的数据要注意在使用前进行转换。

密码输入对话框 (password)

pyautogui 库中的 password 函数用于显示一个带有输入框的对话框,专门用来在自动化脚本中安全地从用户那里获取密码或其他敏感信息。这个对话框包含一条消息、一个标题(可选)、一个默认值(可选)以及“OK”和“Cancel”按钮。与 prompt 不同的是,password 对话框中的输入会被掩码处理,通常显示为星号(*)或圆点,以保护用户的隐私。

这个函数用到的太少了,有点食之无味的意思,获取隐私数据我有更好的函数或方法。

password 函数允许您通过弹窗安全地收集用户的密码或敏感信息。以下是该函数的基本参数说明:

import pyautogui

# 显示一个带有 "Enter your password:" 消息的密码输入对话框
user_password = pyautogui.password('Enter your password:')

# 根据用户的输入执行不同的操作
if user_password is not None:
    print('Password entered successfully.')
else:
    print('User canceled the input.')
  • text:必须的参数,表示要显示的消息文本。
  • title(可选):设置对话框标题,默认为 ‘PyAutoGUI’。
  • default(可选):设置输入框中的默认文本,默认为空字符串。
  • mask(可选):指定用于遮蔽输入字符的符号,默认为 ‘*’。
# 自定义标题、默认值和遮罩符号
user_password = pyautogui.password(text='Enter your secret code:', title='Security Check', default='', mask='#')

if user_password is not None:
    print('Secret code entered successfully.')
else:
    print('User canceled the input.')

password 函数适用于以下几种情况:

  • 需要用户输入密码或 PIN 码来验证身份。
  • 收集敏感信息,如银行账户详情或私人密钥。
  • 确保用户提供的信息不会被旁观者看到,提高安全性。

屏幕函数

这类函数需要先安装Pillow/PIL,这两个库都是专门处理图像的,如果缺少依赖会报错,可以直接pip安装一下。

这个类别中有很多函数,涉及简单的截图保存、图像定位、图像查找等,感兴趣的同学可以去官方文档了解更多玩法,本文只介绍一些简单的函数,毕竟博主只是财务啊…

截图函数

pyautogui 库中的 screenshot 函数用于捕获屏幕的图像快照,这在自动化测试、监控系统状态或记录操作过程中非常有用。该函数返回一个 PIL(Python Imaging Library)Image 对象,您可以将其保存为文件或进一步处理。

screenshot 函数允许您轻松地获取整个屏幕或特定区域的快照。以下是该函数的基本参数说明和使用示例:

import pyautogui

# 捕获整个屏幕并保存为 'screenshot.png'
pyautogui.screenshot('screenshot.png')

# 或者将截图存储到变量中而不立即保存
image = pyautogui.screenshot()

# 之后可以使用 Pillow 库的功能来处理这个 Image 对象,例如显示图片
image.show()
  • filename(可选):指定保存截图的文件名和路径。如果不提供此参数,则不会自动保存到文件,而是返回一个 Image 对象。
  • region(可选):定义要捕获的屏幕矩形区域,格式为 (left, top, width, height)。这有助于减少不必要的数据量,并专注于特定的兴趣区域。
# 捕获屏幕左上角 500x500 像素的区域并保存
pyautogui.screenshot('region_screenshot.png', region=(0, 0, 500, 500))

当使用 screenshot 函数时,请注意以下几点:

  • 捕获大分辨率屏幕的截图可能会消耗较多内存和处理时间。

识别定位函数

pyautogui 库中的 locateOnScreen 函数用于在屏幕上查找指定图像的位置。这在自动化任务中非常有用,例如当您需要根据屏幕上的某个图标或按钮的位置来执行操作时。locateOnScreen 返回的是一个包含图像位置和大小的元组,格式为 (left, top, width, height),如果未找到匹配项则返回 None。

使用 locateOnScreen 可以轻松地定位屏幕上的特定元素。以下是该函数的基本参数说明和使用示例:

import pyautogui

# 查找名为 'button.png' 的图像在屏幕上的位置
location = pyautogui.locateOnScreen('button.png')

if location is not None:
    print(f"Found the button at: {location}")
else:
    print("Button not found on screen.")
  • needleImage:必须的参数,表示要查找的图像文件路径。可以是绝对路径也可以是相对路径。
  • confidence(可选):设置图像匹配的置信度阈值,默认值依赖于操作系统,一般为 0.9 左右。较低的值会更容易找到匹配项,但可能会有误报。
  • region(可选):定义要搜索的屏幕矩形区域,格式为 (left, top, width, height)。这有助于加速搜索过程并减少误报。
# 使用置信度和限定区域进行更精确的查找
location = pyautogui.locateOnScreen('button.png', confidence=0.8, region=(100, 100, 500, 500))

if location is not None:
    print(f"Found the button at: {location}")
else:
    print("Button not found in specified region.")

除了基本的图像定位外,pyautogui 还提供了其他辅助函数来简化基于图像的自动化流程:

  • locateAllOnScreen:返回所有匹配图像的位置迭代器,而不是仅第一个匹配项。
  • locateCenterOnScreen:返回匹配图像中心点的坐标 (x, y),方便直接用于点击等操作。
  • center:从 locateOnScreen 返回的结果中提取中心点坐标。
# 查找所有匹配项并获取其中心点坐标
for pos in pyautogui.locateAllOnScreen('icon.png'):
    center_pos = pyautogui.center(pos)
    print(f"Icon found at center position: {center_pos}")

# 直接获取单个匹配项的中心点坐标
center_pos = pyautogui.locateCenterOnScreen('button.png')
if center_pos is not None:
    print(f"Button center found at: {center_pos}")
    pyautogui.click(center_pos)  # 点击按钮中心

注意事项

当使用 locateOnScreen 函数时,请注意以下几点:

  • 确保目标图像清晰且与屏幕截图中的图像完全一致,否则可能无法正确识别。
  • 高分辨率屏幕或大尺寸图像可能会导致查找过程较慢,考虑使用 region 参数缩小搜索范围。
  • 不同的显示设置(如缩放比例)可能会影响图像识别的效果,测试时应尽量保持环境一致。
  • 某些情况下,屏幕上的动态内容(如动画、闪烁的光标)可能导致图像识别不稳定。
  • 对于颜色敏感的应用场景,确保图像的颜色模式(如 RGB 或灰度)与屏幕内容相匹配。

识别查找函数对于识别的质量要求非常高,就是一比一的要求,差一点都会导致识别失败,虽然可以通过参数confidence降低置信度,但很多时候,不是识别慢就是识别不上去,所以对一部分自动化流程,博主更推荐像素点检测来判断流程是否到了下一个阶段。

像素点匹配

pyautogui 库中的 pixelMatchesColor 函数用于检查屏幕上指定坐标的像素颜色是否与给定的颜色相匹配。这在自动化任务中非常有用,例如当您需要根据屏幕上的某个特定颜色来决定下一步操作时。该函数返回一个布尔值:如果颜色匹配则返回 True,否则返回 False。

pixelMatchesColor 函数允许您验证屏幕上的某个点是否具有预期的颜色。以下是该函数的基本参数说明和使用示例:

import pyautogui

# 检查坐标 (100, 200) 处的像素颜色是否为红色 (RGB: 255, 0, 0)
is_red = pyautogui.pixelMatchesColor(100, 200, (255, 0, 0))

if is_red:
    print("The pixel at (100, 200) is red.")
else:
    print("The pixel at (100, 200) is not red.")
  • x 和 y:必须的参数,表示要检查的屏幕坐标。
  • expectedRGBColor:必须的参数,表示期望的颜色,格式为一个包含三个整数(红、绿、蓝)的元组,每个值的范围是 0 到 255。
  • tolerance(可选):定义颜色匹配的容差,默认值为 0。较高的容差意味着更宽松的颜色匹配,即允许实际颜色稍微偏离预期颜色。
# 使用容差进行更灵活的颜色匹配
is_close_to_red = pyautogui.pixelMatchesColor(100, 200, (255, 0, 0), tolerance=10)

if is_close_to_red:
    print("The pixel at (100, 200) is close to red within the given tolerance.")
else:
    print("The pixel at (100, 200) does not match the expected color within the tolerance.")

除了基本的颜色匹配外,pixelMatchesColor 可以与其他 pyautogui 功能结合使用,以实现更加复杂的逻辑判断和自动化流程控制:

# 在循环中等待直到某一点变为绿色 (RGB: 0, 255, 0)
while not pyautogui.pixelMatchesColor(300, 400, (0, 255, 0)):
    pass  # 等待

print("Pixel turned green!")

或者可以编写更复杂的条件语句来响应不同的颜色变化:

# 根据不同位置的颜色执行不同操作
def check_colors_and_act():
    if pyautogui.pixelMatchesColor(100, 200, (255, 0, 0)):  # 如果 (100, 200) 是红色
        print("Red detected, performing action for red...")
        # 执行对应于红色的操作
    elif pyautogui.pixelMatchesColor(150, 250, (0, 255, 0)):  # 如果 (150, 250) 是绿色
        print("Green detected, performing action for green...")
        # 执行对应于绿色的操作
    else:
        print("No matching colors found.")

check_colors_and_act()

其他函数

除了上述提到的函数以外,pyautogui的函数还有很多,例如:

# 获取屏幕分辨率
import pyautogui

screen_width, screen_height = pyautogui.size()
print(f"Screen resolution: {screen_width}x{screen_height}")

上述代码将打印出当前屏幕的宽度和高度,这对于了解工作环境或调整自动化脚本中的坐标非常有用。

# 获取当前鼠标的坐标
import pyautogui

current_mouse_x, current_mouse_y = pyautogui.position()
print(f"Mouse position: ({current_mouse_x}, {current_mouse_y})")

这段代码会输出鼠标当前位置的 X 和 Y 坐标,这在调试过程中特别有帮助,可以确保您的脚本点击了正确的地点。

# 设置每个 PyAutoGUI 函数调用之间的暂停时间(全局变量)
import pyautogui

pyautogui.PAUSE = 1  # 每个函数调用后暂停 1 秒
pyautogui.moveTo(100, 150)  # 移动鼠标到 (100, 150)
pyautogui.click()  # 点击鼠标

通过设置 PAUSE 变量,可以在每个 PyAutoGUI 函数执行完毕后自动暂停一段时间,从而让操作更加稳定和可预测。

# 获取具有指定标题的所有窗口对象
from pyautogui import getWindowsWithTitle

notepad_windows = getWindowsWithTitle('无标题 - 记事本')  # 替换为实际窗口标题
if notepad_windows:
    print("Found Notepad windows:", len(notepad_windows))
else:
    print("No Notepad windows found.")

getWindowsWithTitle 函数用于查找并返回所有匹配给定标题的窗口对象列表。这对于管理和操作特定应用程序窗口非常有用。

# 获取当前活动窗口
from pyautogui import getActiveWindow

active_window = getActiveWindow()
if active_window:
    print("Active window title:", active_window.title)

getActiveWindow 函数返回当前用户正在交互的窗口对象,您可以从中获取更多信息或执行窗口特定的操作。

# 获取窗口的几何信息
from pyautogui import getWindowGeometry

window_title = "无标题 - 记事本"  # 替换为实际窗口标题
geometry = getWindowGeometry(window_title)
if geometry:
    print("Window geometry:", geometry)

使用 getWindowGeometry 函数可以获取指定窗口的位置、大小等信息,这对于需要精确控制窗口位置或尺寸的应用场景很有帮助。

import pyautogui
pyautogui.mouseInfo()

鼠标信息函数,会生成一个信息框,上面实时显示鼠标的信息:

信息框

结尾

pyautogui的脚本编写和之前的keymousego我认为没有什么区别,但是pyautogui可以实现的更多,理论上,它已经能满足你对脚本的所有幻想…

哦!?等等,并没有解决你的所有问题?看来我的朋友的业务场景又开始复杂了。pyautogui解决了keymousego无法设置条件判断,无法局部循环,无法设置变量等等诸多问题,已经不是一个简单的脚本库了,学完了pyautogui,你的两只脚就已经彻底上了编程的大船,你可以高呼!大计科号令天下,谁与争锋。

当然还有没有解决的问题,我的数据如何导入脚本?不可能靠输入提示框一个个输入?浏览器如何操作?靠pyautogui一下下点么?脚本过程中的数据如何交互?保存、运算等等…(这里实际上我是再给我自己为后续的文章铺垫)

恭喜你我的朋友,你已经看到了这里,我由衷的希望你在人生的道路上像编程一样,一关关的闯下去势不可挡!

敬请期待下一关!数据读取、导入pandas入门!

一个神奇的GUI自动化测试库-PyAutoGui 看到这个库的时候,单单从名字就感觉到两个字“简单”,特别容易理解它是用来做什么的,深入了解之后感觉的还是两个字“简单”。这对自动化测试来说便是一个天大的乐事,因为很多工具庞大复杂,仅仅是写一个hello world需要的环境,需要了解的东西比c++,java还难。 PyAutoGUI作为GUI自动化神器,简单高效、函数分类清晰,它被awesome-python、awesome-python-cn收录 现在我就带你们走进PyAutoGUI~ 1. PyAutoGui是什么? PyAutoGui是一 阅读详情

相关推荐

Python--界面UI控制,模拟键鼠操作的模块pyautogui(超详细用法)

详细介绍如何使用 pyautogui 实现鼠标控制、键盘控制、界面操作、图像匹配等功能。

实践出真知 1万+

python自动化神器:pyautogui

它还提供了一些额外的功能,例如捕捉屏幕截图、识别颜色和图像等,以及其他一些实用工具,例如获取屏幕尺寸和鼠标位置。python移动鼠标、点击键盘非常快,可能会造成其他可能问题,为了及时中断,PyAutoGUI提供了一个保护措施。例如,当设置confidence为0.5时,函数将会搜索与给定图像相匹配的区域,并且只有当置信度大于等于0.5时,函数才会返回该区域的位置。因此,confidence的值可以影响函数的性能和准确性,取决于您所需要的搜索结果的精度和速度。获取搜索框位置,单击输入账号,回车,到聊天界面。

Python栈 1万+

游戏脚本?不!这是正经的Python GUI自动化测试:用pyautogui模拟用户操作

本文探讨了使用pyautogui进行Python GUI自动化测试的实战技巧。通过模拟用户操作和图像识别技术,pyautogui为缺乏专业测试框架的团队提供了轻量级解决方案,适用于桌面应用测试、冒烟测试和回归测试场景,显著提升测试效率。

weixin_30896825的博客 554

【pyautogui】PyAutoGUI 的简单使用

PyAutoGUI是一个纯Python的GUI自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。PyAutoGUI设计简洁,全部被封装在pyautogui单个模块中,因此Python程序中只要之后便可通过符号访问pyautogui中的函数、变量。pyautogui大致分为通用功能、鼠标控制、键盘控制、屏幕窗口、消息窗 5 大类。

读书笔记 1万+

别再手动点点点了!用Python的PyAutoGUI库,5分钟搞定你的第一个GUI自动化脚本

本文介绍了如何使用Python的PyAutoGUI库快速实现GUI自动化,解放双手完成重复性任务。从环境配置到基础操作,再到实战案例,详细讲解了鼠标控制、键盘输入及图像识别等技巧,帮助开发者5分钟内编写首个自动化脚本,显著提升工作效率。

weixin_29722783的博客 348

别再手动点点点了!用Python的PyAutoGUI库5分钟搞定你的第一个GUI自动化脚本

本文介绍如何使用Python的PyAutoGUI库快速实现GUI自动化脚本,帮助用户告别重复性手动操作。从环境搭建到鼠标键盘控制,再到图像识别和实战项目,详细讲解如何5分钟内完成第一个自动化脚本,大幅提升工作效率。

weixin_30074763的博客 270

GUI自动化之pyautogui的使用

GUI自动化,通过python的第三方模块pyautogui模拟人的鼠标键盘输入而实现自动化,其常常与视觉opencv等模块配合使用.可以用它来编写程序刷不想听的网课,哈哈~~~

Magician_liu的博客 2231

让所有GUI都自动化-PyAutoGUI(GUI自动化工具)

PyAutoGUI 是一个纯 Python 的 GUI 自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,macOS,Linux),并在 Python 2 和 3 上运行。PyAutoGUI 可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。PyAutoGUI 有几个特点:1、移动鼠标并单击其他应用程序的窗口。2、向应用程序发送点击输入(例如,填写表格)。

A18285759691的博客 1593

PyAutoGUI——让所有GUI都自动化

pyauto

m0_74315028的博客 3039

pyautogui自动化-客户端程序完美自动化

** pyautogui自动化测试客户端程序 ** 最近针对于 公司网盘的客户端产品,思考了一下,是否能够实现自动化测试呢? 嗯,谷歌一搜,果然没有让人失望,找到了这个:pyautogui 参考链接:让所有gui都自动化 首先需要安装pyautogui,很简单,cmd运行:pip install pyautogui 然后打开你的python编译器,我的是pycharm,然后就可以写你想要自动化的...

高级拳师的博客 5573

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

Python自动操作 GUI 神器——PyAutoGUI

参考原文:Python自动操作 GUI 神器——PyAutoGUI 记录——去繁就简本文章来介绍如何通过Python来控制桌面实现自动化操作。桌面自动化操作是通过定位鼠标在桌面的位置,然后根据定位的位置执行对应的操作。我们今天的主人公是 ,是一个纯 Python 的 GUI 自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。模块安装,打开cmd,输入: 成功展示: 安装好后就可以直接使用了。导包 鼠标操作 鼠标信息 pyautogui.position() 获取鼠标位置 p

Aaron的博客 7664

从零开始:YOLOv8车牌检测模型训练全流程实战

本文详细介绍了从零开始训练YOLOv8车牌检测模型的全流程实战指南。内容涵盖环境搭建、数据集收集与标注、模型配置与训练、评估测试及高级优化技巧。通过使用预训练模型和迁移学习,开发者可以高效构建精准的车牌检测系统,并掌握模型导出与部署的关键步骤。

weixin_29061041的博客 335

python的win32gui, pyautogui, pywinauto,pynput对比

这里写自定义目录标题引言win32gui功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 引言 正在使用python进行自动化的编辑,这期间也是刚好测试了几个相关的软件:win32gui,pyautogui,pyautowin,发现

马文MarvinOld的博客 1万+

PyTorch版Unet训练后别只看loss:手把手教你计算并可视化多类别语义分割的mIoU(附完整代码)

本文详细介绍了在PyTorch中使用Unet模型进行多类别语义分割后,如何计算和可视化mIoU(mean Intersection over Union)以全面评估模型性能。通过完整的代码示例和实用技巧,帮助开发者从loss优化转向更精准的区域分割评估,特别适用于医学图像分析等关键场景。

weixin_30906185的博客 435

Jetson Nano系统重装的艺术:从格式化到烧录的深度解析

本文详细解析了Jetson Nano系统重装的完整流程,从SD卡格式化到系统镜像烧录的进阶技巧,包括硬件选择、软件准备、常见问题处理及深度学习环境配置。特别推荐使用三星EVO Plus SD卡和官方电源以确保稳定性,适合开发者快速掌握嵌入式设备系统重装的核心技术。

weixin_28273593的博客 610

Python的PyAutoGUI库整理中文文档,可以让所有GUI都实现自动化。

1.0 简介 1.1 目的 PyAutoGUI是一个纯Python的GUI自动化工具,可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,能完全代替手动操作。还能获取屏幕截图,像素的颜色,甚至简单的GUI对话框。多平台支持(Windows,OS X,Linux)。可以用pip安装,Github上有源代码。 2.0 安装与依赖 PyAutoGUI支持Python 2.x和Python 3.x,各系统安装方法如下: Windows: PyAutoGUI没有任何依赖,因为它

wblylh的博客 1万+

Homebrew国内镜像自动安装全攻略:从零到精通

本文提供了一份详尽的Homebrew国内镜像自动安装指南,旨在帮助Mac用户,特别是国内开发者,快速、无痛地部署这一强大的包管理器。通过使用优化的国内镜像脚本,实现一键自动安装,有效解决官方源访问缓慢或失败的问题。文章从安装前准备、脚本执行步骤、原理讲解到日常使用命令和常见问题排查,提供了从零到精通的完整路径,让用户在短时间内掌握Homebrew的核心用法,提升开发与工作效率。

a0b1c2d3的专栏 968

Python GUI 自动化之 PyAutoGUI 完全指南

PyAutoGUI 作为一款强大的 GUI 自动化库,为 Python 开发者提供了简单而强大的桌面自动化能力。从简单的鼠标键盘控制到复杂的图像识别,PyAutoGUI 都提供了简洁直观的 API,使自动化任务的实现变得轻而易举。随着 AI 技术的发展,PyAutoGUI 也在不断进化。未来,我们可以期待更智能的自动化功能,如结合计算机视觉实现更精准的界面元素识别,结合自然语言处理实现更自然的交互方式等。

zqmgx13291的博客 2693

【通信原理】基于【MATLAB】的通信OFDM系统仿真

主要进行OFDM系统的仿真,使用MATLAB软件对OFDM系统的接收端和发射端分别进行模拟仿真。

ALi.S的博客 5792

银河麒麟V10等保加固清单:安全基线配置一篇搞定(附逐项检查表)

通过限制使用SSH直接以root身份登录,禁用公钥登录的方式加强SSH服务的安全性。更改SSH默认端口可在一定程度上防止被黑客使用大批量扫描方式攻击。通过修改SSH的配置文件限制可以使用SSH服务远程管理的主机。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 817
上一篇: pandas-read_excel函数介绍
下一篇: VBA-原地取消公式
mxsleon
博客等级 码龄3年 88粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值