一个用 Python + pynput 编写的桌面自动点击工具。程序启动后会在指定位置自动点击,每 200 毫秒一次;一旦检测到鼠标移动、人工鼠标操作或键盘输入,立即结束程序。
| 特性 | 说明 |
|---|---|
| 点击频率 | 每 200 毫秒点击一次(固定间隔) |
| 点击位置 | 屏幕坐标,可命令行传入,也可倒计时后取鼠标当前位置 |
| 停止方式 | 移动鼠标 / 人工点击 / 滚轮 / 任意按键 / Ctrl+C,任一触发即停 |
| 响应速度 | 触发后几乎立即结束(不等满 200ms) |
| 安全设计 | 3 秒倒计时 + 自身事件忽略 + 鼠标偏离兜底 |
- 系统:Windows(也兼容 macOS / Linux,权限要求见末尾注意事项)
- Python:3.7 及以上
- 依赖:仅需
pynput一个第三方库
安装依赖:
pip install pynputpython autoclicker.py启动后会有 3 秒倒计时,把鼠标移到你想点击的地方;倒计时结束时,程序以此时鼠标位置为目标开始点击。
python autoclicker.py 800 600直接在屏幕坐标 (800, 600) 处点击,无需手动移动鼠标。两个参数分别是 X、Y 像素坐标(屏幕左上角为原点 (0,0),向右为 X 正方向,向下为 Y 正方向)。
3 秒后开始自动点击 ……
(未指定坐标,倒计时结束时将以鼠标所在位置为目标)
3 ...
2 ...
1 ...
开始点击 (1280, 720),间隔 200ms。移动鼠标 / 点击 / 滚轮 / 按任意键 即停止。
[已触发停止] 检测到鼠标移动到 (1302, 715)
程序已结束。
| # | 触发条件 | 对应监听 |
|---|---|---|
| 1 | 鼠标被移动(人工拖动) | mouse.Listener.on_move |
| 2 | 人工鼠标点击(左/右键按下松开) | mouse.Listener.on_click |
| 3 | 鼠标滚轮滚动 | mouse.Listener.on_scroll |
| 4 | 键盘任意按键按下 | keyboard.Listener.on_press |
| 5 | 鼠标偏离目标位置超过 5 像素(兜底) | 主循环位置检测 |
| 6 | 终端 Ctrl+C | KeyboardInterrupt 捕获 |
停止时会在终端打印触发原因,便于确认是被哪种操作终止的。
- 主线程:负责点击循环(移到目标 → 点击 → 等待 200ms)。
- 键盘监听线程:
keyboard.Listener,后台监听任意按键。 - 鼠标监听线程:
mouse.Listener,后台监听移动 / 点击 / 滚轮。
三个线程通过一个共享的 stop_event(threading.Event)通信:任何监听线程检测到人工操作,就把 stop_event 置位,主循环检测到后立即退出。
if stop_event.wait(0.2): # 最多等 200ms;若 stop_event 已置位则立即返回
breaktime.sleep(0.2) 会死等满 200 毫秒,停止信号无法及时响应;Event.wait(0.2) 一旦收到信号立刻返回,真正做到「立刻结束」。
程序自己把鼠标移到目标位置、自己点击,都会被鼠标监听器捕获,从而误判为「人工操作」导致自我终止。解决办法是一个 clicking 标志:
clicking.set() # 标记:接下来的移动/点击是我自己干的
try:
ctrl.position = target # 移到目标
ctrl.click(...) # 点击
finally:
clicking.clear() # 结束标记监听器回调开头先检查这个标志,若在生效中就直接忽略,不触发停止。
即便监听器因线程时序偶尔漏判,主循环每轮还会读取鼠标实际位置,若偏离目标超过 THRESHOLD = 5 像素,同样触发停止,双重保险。
代码顶部 / main() 中的常量,可按需修改:
| 名称 | 默认值 | 作用 | 位置 |
|---|---|---|---|
THRESHOLD |
5 |
鼠标偏离目标的像素阈值,超过视为人工移动 | 第 23 行 |
| 点击间隔 | 0.2 秒 |
stop_event.wait(0.2) 里的 0.2,改它即改频率 |
第 102 行 |
| 倒计时秒数 | 3 |
range(3, 0, -1) 的 3 |
第 75 行 |
| 点击按键 | 左键 | mouse.Button.left,可改 .right / .middle |
第 97 行 |
例如想改成每 500ms 点右键、倒计时 5 秒:
for i in range(5, 0, -1): # 倒计时 5 秒
...
ctrl.click(mouse.Button.right) # 右键
if stop_event.wait(0.5): # 500ms 间隔- 坐标原点:屏幕左上角为
(0, 0)。多显示器环境下,副屏在主屏左侧时 X 可能为负值,属正常。 - 目标必须可点击:程序只是把光标移过去并点击,不会切换窗口。倒计时期间请手动切到目标窗口。
- 不要点在关键按钮上启动:自动点击可能误触发系统操作,请确认目标位置安全。
- macOS 权限:需在「系统设置 → 隐私与安全性 → 辅助功能」中授予运行终端(Terminal / iTerm)权限,否则监听与点击无效。
- Linux 权限:可能需要把用户加入
input组,或以sudo运行,才能读取键盘/鼠标事件。 - 紧急停止:万一监听未生效,直接在终端按
Ctrl+C也能终止(已捕获KeyboardInterrupt)。
autoclicker.py # 主程序(单文件,约 120 行)
README.md # 本说明
依赖:pynput(pip install pynput),无其它第三方依赖。