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()的封装,用于执行垂直滚动。

相关推荐
AC赳赳老秦3 小时前
Notion+DeepSeek:搭建个人工作看板与自动化任务管理规则
前端·javascript·人工智能·自动化·prometheus·notion·deepseek
weixin_403810133 小时前
EasyClick 安卓自动化版本 如何自激活代理模式并且启动安卓的自动化服务
android·自动化·代理模式
叫我:松哥3 小时前
基于flask 智能体的教学演示文档生成及质量评价系统,集成了DeepSeek 大语言模型实现自动化文档生成和多维度质量评估
人工智能·机器学习·信息可视化·语言模型·数据分析·flask·自动化
weixin_462446235 小时前
一键安装 Hadoop 3.3.6 自动化脚本详解 |(含 JAVA_HOME 自动配置)
java·hadoop·自动化
运维行者_14 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
AC赳赳老秦19 小时前
Confluence + DeepSeek:构建自动化、智能化的企业知识库文档生成与维护体系
大数据·运维·人工智能·自动化·jenkins·数据库架构·deepseek
不会代码的小测试21 小时前
页面动态元素无法快速复制定位解决
python·selenium·自动化
hqwest1 天前
WPF真入门教程36--真硬核【自动化生产管理平台】
运维·自动化·modbus通信·串口设备·自动化生产管理平台·wpf开发
源创力环形导轨1 天前
环形导轨:自动化生产线的核心传输解决方案
运维·人工智能·自动化