PyAutoGui 鼠标控制函数

鼠标控制函数

屏幕和鼠标位置

屏幕上的位置用笛卡尔坐标 X 和 Y 表示,原点为 0,0,X 值向右逐渐增大,Y值向下逐渐增大。

复制代码
0,0       X 向右逐渐增大 -->
+---------------------------+
|                           | Y 向下逐渐增大
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

屏幕最左上角位置为原点 0, 0。如果屏幕分辨率为 1920 x 1080,则右下角像素为 1919, 1079。

使用size() 函数获取屏幕分辨率(两个整数组成的元组)。使用 position() 函数获取当前光标位置。

例如:

python 复制代码
>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.position()
(187, 567)

下面是一个简短的 Python 3 程序,用于不停地打印出鼠标位置:

python 复制代码
#! python3
import pyautogui, sys
print('Press Ctrl-C to quit.')
try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
    print('\n')

下面是 Python 2 程序:

python 复制代码
#! python
import pyautogui, sys
print('Press Ctrl-C to quit.')
try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print positionStr,
        print '\b' * (len(positionStr) + 2),
        sys.stdout.flush()
except KeyboardInterrupt:
    print '\n'

要检查某个坐标是否在屏幕上,将其传入 onScreen() 函数即可,在屏幕上则返回 True。例如:

python 复制代码
>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
>>> pyautogui.onScreen(0, 99999999)
False
>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.onScreen(1920, 1080)
False
>>> pyautogui.onScreen(1919, 1079)
True

鼠标移动

moveTo() 函数会将鼠标光标移动至指定的 X 和 Y 位置。 要表示"当前位置"可传入 None 值。例如:

python 复制代码
>>> pyautogui.moveTo(100, 200)   # 鼠标移动至 100,200.
>>> pyautogui.moveTo(None, 500)  # 鼠标移动至 100,500.
>>> pyautogui.moveTo(600, None)  # 鼠标移动至 600,500.

正常情况下光标会立刻移动到新位置。如果想要光标慢慢移动到新位置,可再传入第3个参数 duration(单位s)。例如:

python 复制代码
>>> pyautogui.moveTo(100, 200, 2)   # 2s内鼠标移动至 100,200.

(如果 duration 小于 pyautogui.MINIMUM_DURATION的值,移动会瞬间完成。pyautogui.MINIMUM_DURATION 默认为 0.1。)

如果想要相对于当前位置移动,则使用 move() 函数。此函数的参数和 moveTo() 类似。 示例:

python 复制代码
>>> pyautogui.moveTo(100, 200)  # 鼠标移动至 100,200 位置
>>> pyautogui.move(0, 50)       # 向下移动 50 像素
>>> pyautogui.move(-30, 0)      # 向左移动 30 像素
>>> pyautogui.move(-30, None)   # 向左移动 30 像素

鼠标拖拽

PyAutoGUI 中的 dragTo()drag() 函数参数与 moveTo()move() 函数类似。另外,还有button 参数可设置为 'left''middle''right',用于指定拖拽时按下哪个按键。示例:

python 复制代码
>>> pyautogui.dragTo(100, 200, button='left')     # 按住左键,将鼠标拖拽至 100,200
>>> pyautogui.dragTo(300, 400, 2, button='left')  # 按住左键,将鼠标拖拽至 300,400,用时2s
>>> pyautogui.drag(30, 0, 2, button='right')   # 按住右键,2s内将鼠标向左拖动 30 像素

补间/缓动(Tween / Easing)函数

补间动画是一种额外功能,用于使鼠标移动效果更加有趣。若您不关心此类效果,可以直接跳过本节内容。

补间(或缓动)函数决定了鼠标向目标位置移动时的进度变化。通常,当鼠标在一段时间内移动时,它会以恒定速度沿直线直接向目标移动,这种方式称为线性补间线性缓动函数。

PyAutoGUI在pyautogui模块中提供了其他补间函数。例如,将pyautogui.easeInQuad函数作为第四个参数传递给moveTo()move()dragTo()drag()函数时,鼠标光标会先缓慢启动,然后加速移向目标,但移动总时长仍与函数参数设定的时间一致。pyautogui.easeOutQuad函数则相反:鼠标光标初始快速移动,在接近目标时逐渐减速。而pyautogui.easeOutElastic函数会使鼠标移动越过目标点,并像橡皮筋一样来回振荡数次,最终稳定在目标位置。

示例:

python 复制代码
>>> 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)  # 像橡皮筋一样在末尾回弹

这些补间函数源自 Al Sweigart 的 PyTweening 模块:https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/pytweening。即使不安装该模块,也可以正常使用这些补间函数。

如果想要创建自定义的补间函数,需要定义一个接收单个浮点参数的函数。该参数范围在 0.0(表示鼠标移动的起始点)到 1.0(表示鼠标移动的终点)之间,并且函数应返回一个介于 0.01.0 之间的浮点数值。

鼠标单击

click() 函数模拟鼠标在当前位置左键单击。一次"单击"定义为按键按下后释放。示例:

python 复制代码
>>> pyautogui.click()  # 单击鼠标

要实现在点击前先执行 moveTo() 移动操作,可通过 xy 命名参数传入整数坐标:

python 复制代码
>>> pyautogui.click(x=100, y=200)  # 先移动到 100,200,再单击鼠标

要指定点击的鼠标按键,可通过 button 命名参数传入 'left'(左键)、'middle'(中键)或 'right'(右键):

python 复制代码
>>> pyautogui.click(button='right')  # 右击鼠标

要实现多次点击,可通过 clicks 命名参数传入整数设置点击次数。还可通过 interval 关键字参数传入浮点数或整数,指定每次点击之间的间隔秒数。示例:

python 复制代码
>>> pyautogui.click(clicks=2)  # 双击鼠标左键
>>> pyautogui.click(clicks=2, interval=0.25)  # 双击鼠标左键,中间间隔0.25s
>>> pyautogui.click(button='right', clicks=3, interval=0.25)  ## 三击鼠标左键,中间间隔0.25s

作为便捷快捷方式,doubleClick() 函数可执行鼠标左键双击操作。该函数同样支持可选的 xyintervalbutton 命名参数。示例:

python 复制代码
>>> pyautogui.doubleClick()  # 左键双击

另提供具有类似可选命名参数的 tripleClick() 函数。

rightClick() 函数支持可选的 xy 命名参数。

mouseDown() 和 mouseUp() 函数

鼠标点击和拖拽操作均由按下鼠标按键和释放鼠标按键两个动作组成。若需分别执行这两个动作,可调用 mouseDown()mouseUp() 函数。它们支持相同的 xybutton 参数。示例:

python 复制代码
>>> pyautogui.mouseDown(); pyautogui.mouseUp()  # 实现与左键单击相同的效果
>>> pyautogui.mouseDown(button='right')  # 按下鼠标右键
>>> pyautogui.mouseUp(button='right', x=100, y=200)  # 先将鼠标移动至坐标 (100,200),再释放右键

鼠标滚动

通过调用 scroll() 函数并传入表示滚动"刻度"数的整数值,可以模拟鼠标滚轮滚动。不同操作系统中"刻度"对应的实际滚动距离存在差异。该函数还可选支持 xy 命名参数,允许在滚动前先将鼠标光标移动至指定坐标。示例:

python 复制代码
>>> pyautogui.scroll(10)   # 向上滚动 10 "刻度"
>>> pyautogui.scroll(-10)  # 向下滚动 10 "刻度"
>>> pyautogui.scroll(10, x=100, y=100)  # 鼠标先移动至 100,200, 再向上滚动 10 "刻度"

在 OS X 和 Linux 平台,PyAutoGUI 中也可以通过使用 hscroll() 函数实现水平滚动。示例:

python 复制代码
>>> pyautogui.hscroll(10)   # 向右滚动 10 "刻度"
>>> pyautogui.hscroll(-10)   # 向左滚动 10 "刻度"

scroll() 函数是对 vscroll()的封装,用于执行垂直滚动。

相关推荐
池央1 小时前
CANN 诊断工具链深度解析:oam-tools 的自动化故障信息收集、软硬件状态快照与 AI Core 错误溯源机制
运维·人工智能·自动化
池央2 小时前
CANN 算子合规性与迁移性:自定义算子设计中的安全边界与属性兼容性
人工智能·自动化·信号处理
乾元2 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
麦兜*2 小时前
全面掌握深度学习部署技术:基于TensorRT与Triton Inference Server实现高性能模型推理和自动化Pipeline的企业级落地实践指南
人工智能·深度学习·自动化
zhengfei61116 小时前
自动化快速评估工具
运维·自动化
m_1368716 小时前
n8n 启动时报 EACCES permission denied 的完整排查与修复
自动化·n8n
少云清17 小时前
【金融项目实战】6_接口测试 _Jmeter自动化脚本实现(重点)
jmeter·自动化·金融项目实战
疯狂的维修18 小时前
关于catia中DMU运动学分析的应用
自动化
2501_9248787320 小时前
AdAgent 能力成熟度模型:从 L1 自动化到 L5 自主增长引擎
运维·自动化
北京耐用通信21 小时前
耐达讯自动化Profinet转Devicenet网关:精细化工行业的“协议融合利器”
人工智能·物联网·网络协议·自动化·信息与通信