Skip to content

zmrbak/AutoClicker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

自动点击器 autoclicker.py 说明

一个用 Python + pynput 编写的桌面自动点击工具。程序启动后会在指定位置自动点击,每 200 毫秒一次;一旦检测到鼠标移动、人工鼠标操作或键盘输入,立即结束程序。


一、功能概览

特性 说明
点击频率 每 200 毫秒点击一次(固定间隔)
点击位置 屏幕坐标,可命令行传入,也可倒计时后取鼠标当前位置
停止方式 移动鼠标 / 人工点击 / 滚轮 / 任意按键 / Ctrl+C,任一触发即停
响应速度 触发后几乎立即结束(不等满 200ms)
安全设计 3 秒倒计时 + 自身事件忽略 + 鼠标偏离兜底

二、环境准备

  • 系统:Windows(也兼容 macOS / Linux,权限要求见末尾注意事项)
  • Python:3.7 及以上
  • 依赖:仅需 pynput 一个第三方库

安装依赖:

pip install pynput

三、用法

1. 在当前鼠标位置点击

python autoclicker.py

启动后会有 3 秒倒计时,把鼠标移到你想点击的地方;倒计时结束时,程序以此时鼠标位置为目标开始点击。

2. 在屏幕指定坐标点击

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 捕获

停止时会在终端打印触发原因,便于确认是被哪种操作终止的。


五、工作原理

1. 三条线程协同

  • 主线程:负责点击循环(移到目标 → 点击 → 等待 200ms)。
  • 键盘监听线程keyboard.Listener,后台监听任意按键。
  • 鼠标监听线程mouse.Listener,后台监听移动 / 点击 / 滚轮。

三个线程通过一个共享的 stop_eventthreading.Event)通信:任何监听线程检测到人工操作,就把 stop_event 置位,主循环检测到后立即退出。

2. 为什么用 wait(0.2) 而不是 sleep(0.2)

if stop_event.wait(0.2):   # 最多等 200ms;若 stop_event 已置位则立即返回
    break

time.sleep(0.2) 会死等满 200 毫秒,停止信号无法及时响应;Event.wait(0.2) 一旦收到信号立刻返回,真正做到「立刻结束」。

3. 关键技巧——忽略「自己触发自己」

程序自己把鼠标移到目标位置、自己点击,都会被鼠标监听器捕获,从而误判为「人工操作」导致自我终止。解决办法是一个 clicking 标志:

clicking.set()              # 标记:接下来的移动/点击是我自己干的
try:
    ctrl.position = target   # 移到目标
    ctrl.click(...)          # 点击
finally:
    clicking.clear()         # 结束标记

监听器回调开头先检查这个标志,若在生效中就直接忽略,不触发停止。

4. 鼠标偏离兜底

即便监听器因线程时序偶尔漏判,主循环每轮还会读取鼠标实际位置,若偏离目标超过 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 间隔

七、注意事项

  1. 坐标原点:屏幕左上角为 (0, 0)。多显示器环境下,副屏在主屏左侧时 X 可能为负值,属正常。
  2. 目标必须可点击:程序只是把光标移过去并点击,不会切换窗口。倒计时期间请手动切到目标窗口。
  3. 不要点在关键按钮上启动:自动点击可能误触发系统操作,请确认目标位置安全。
  4. macOS 权限:需在「系统设置 → 隐私与安全性 → 辅助功能」中授予运行终端(Terminal / iTerm)权限,否则监听与点击无效。
  5. Linux 权限:可能需要把用户加入 input 组,或以 sudo 运行,才能读取键盘/鼠标事件。
  6. 紧急停止:万一监听未生效,直接在终端按 Ctrl+C 也能终止(已捕获 KeyboardInterrupt)。

八、文件结构

autoclicker.py     # 主程序(单文件,约 120 行)
README.md          # 本说明

依赖:pynputpip install pynput),无其它第三方依赖。

About

A desktop auto-click tool written in Python + pynput

Topics

Resources

Stars

Watchers

Forks

Packages

Contributors

Languages