Files
auto-click/README.md
T
2026-09-20 13:55:46 +08:00

217 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 可视化自动点击器
[![Version](https://img.shields.io/badge/version-1.0.2-blue.svg)](https://www.zkcoi.com)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
[![Tampermonkey](https://img.shields.io/badge/Tampermonkey-兼容-orange.svg)](https://www.tampermonkey.net/)
一个 Tampermonkey 用户脚本:在任意网页上**可视化拾取**多个点击位置,按设定顺序**串行自动点击**,每一步可单独设置**点击间隔**,支持循环、随机抖动与配置持久化。
- 🌐 官网:<https://www.zkcoi.com>
- 👤 作者:zkcoi
---
## 功能特性
| 特性 | 说明 |
| --- | --- |
| 🎯 **可视化选点** | 开启拾取后鼠标变十字光标,悬停元素实时高亮并显示元素标签,点击即添加为步骤 |
| 🔢 **多点串行** | 支持任意多个点击位置,严格按列表顺序依次执行 |
| ⏱ **逐步骤间隔** | 每个步骤可单独设置点击间隔(毫秒),互不影响 |
| 📍 **双定位模式** | 优先生成唯一 CSS 选择器(元素移动也不丢);生成失败自动回退为屏幕比例坐标 |
| 🏷 **页面编号标记** | 每个步骤在页面上对应位置显示编号徽标,随滚动/元素移动自动跟随,点击可编辑 |
| 🔁 **循环执行** | 可设置循环次数(`0` = 无限),并设置每轮之间的间隔 |
| 🎲 **随机抖动** | 让间隔随机浮动,模拟真人节奏,降低被自动化检测识别的概率 |
| 🖱 **按住时长** | 可设置 mousedown 与 mouseup 之间的间隔,应对需要"长按"的组件 |
| 💾 **配置持久化** | 按域名自动保存,下次打开页面自动恢复;支持导出/导入 JSON |
| 🛡 **异常自愈** | 事件构造五级降级 + 全流程错误捕获,异常直接显示在面板日志中 |
---
## 安装
### 方式一:从 Gitea 直接安装(推荐)
1. 浏览器安装 [Tampermonkey](https://www.tampermonkey.net/) 扩展
2. 打开本仓库的 `可视化自动点击器.user.js` 文件,点击「Raw 原始文件」
3. Tampermonkey 会自动识别并弹出安装页面,点击「安装」即可
4. 后续 Tampermonkey 会自动检测更新
### 方式二:手动粘贴
1. Tampermonkey → 仪表盘 → 「+」新建脚本
2. 删除默认内容,粘贴 `可视化自动点击器.user.js` 的全部内容
3. `Ctrl + S` 保存,**刷新目标页面**生效
> ⚠️ 更新脚本后,务必刷新已打开的页面,否则内存中运行的仍是旧版本。
---
## 使用教程
### 1. 拾取点击位置
1. 点击面板上的 **「🎯 拾取位置」** 按钮
2. 鼠标指针变为 **十字光标**,页面顶部出现提示条
3. 移动鼠标 → 目标元素出现 **橙色高亮框**,框上标签显示元素类型与尺寸
4. 单击左键 → 该位置被添加为一步,元素上闪一圈绿光
| 操作 | 效果 |
| --- | --- |
| 单击 | 拾取一个位置后自动退出拾取模式 |
| 按住 `Shift` 点击 | 连续拾取多个位置,不退出 |
| `Esc` | 取消拾取 |
### 2. 设置间隔与参数
- **每步间隔**:步骤列表右侧的数字输入框,含义是"上一步完成后,等待多少毫秒再点击这一步",单位毫秒
- **全局参数**:循环次数、轮间隔、等待超时、按住时长、抖动范围
### 3. 运行
- 点击 **「▶ 运行」** 开始串行执行,当前执行的步骤徽标会绿色脉冲
- 再次点击(按钮变为 **「⏹ 停止」**)即可随时停止
### 快捷键与菜单
| 操作 | 说明 |
| --- | --- |
| `Alt + P` | 显示 / 隐藏面板 |
| `Esc` | 取消拾取 / 关闭弹出菜单 |
| 脚本菜单 | Tampermonkey 图标 → 显示面板 / 开始停止 / 拾取位置 / 重置面板 |
---
## 参数说明
### 全局参数
| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| 循环 | `1` | 执行轮数,`0` 表示无限循环 |
| 轮间隔 | `1000` ms | 每轮结束后等待多久开始下一轮 |
| 超时 | `5000` ms | 等待目标元素出现的最大时间,超时则跳过该步 |
| 按住 | `0` ms | mousedown 与 mouseup 之间的间隔,模拟长按 |
| 抖动 | `0` ms | 每步间隔的随机浮动范围,详见下文 |
| 仅启用项 | 勾选 | 跳过在列表中被禁用(编号划掉)的步骤 |
### 抖动(Jitter)是怎么算的
```
实际等待 = 该步基础间隔 + random(-抖动, +抖动)
```
示例:基础间隔 `1000ms`、抖动 `200ms` → 实际等待可能是 `820ms`、`1130ms`、`960ms`……
- 每一步**独立随机**,不是全程只摇一次
- 结果做了 `Math.max(0, ...)` 保底,不会出现负数
- 只影响"等待多久",**不改变点击坐标,也不会跳过步骤**
**推荐取值**
| 场景 | 基础间隔 | 抖动 |
| --- | --- | --- |
| 普通网页 | 800 ~ 1500 ms | 100 ~ 300 ms |
| 有反爬检测的站点 | 1500 ~ 3000 ms | 400 ~ 800 ms |
| 调试阶段 | 任意 | `0`(便于复现问题) |
### 步骤定位模式
| 模式 | 徽标样式 | 说明 |
| --- | --- | --- |
| 选择器定位 | 蓝色圆形 | 使用自动生成的唯一 CSS 选择器,元素移动/滚动也不丢失 |
| 坐标定位 | 橙色方块 | 使用屏幕比例坐标,适用于选择器无法唯一生成的元素 |
选择器未命中时会**自动回退到坐标点击**并记入日志;徽标变灰表示当前页面未匹配到该选择器。
---
## 配置导入导出
- **导出**:点击「导出」,配置 JSON 自动复制到剪贴板(失败时在面板内弹出可手动复制的文本框)
- **导入**:点击「导入」,粘贴 JSON 文本
配置以域名为维度保存,存储键为 `zkcoi_vac_cfg_v1_<域名>`。旧版本(v1.0.1 及之前)的配置会在首次加载时**自动迁移**,不会丢失。
---
## 常见问题
### 点击「拾取位置」后没反应?
按以下顺序排查:
1. 面板日志是否出现「v1.0.2 已就绪」——没有说明脚本未运行,检查 `@match` 是否覆盖该站点,或页面是否处于 iframe 中
2. 点「拾取」后鼠标是否变为十字光标——没有说明按钮事件被页面拦截,改用脚本菜单里的「拾取点击位置」入口
3. 前两步正常但点击元素无反应——查看面板日志中的红色报错,用「📋 复制日志」发给我
### 日志无法选中复制?
v1.0.2 起日志区已支持直接鼠标框选,也可点击 **「📋 复制日志」** 一键复制全部(自动附时间戳与页面 URL)。
### 目标按钮点了没反应?
JS 派发的点击是"不可信事件"(`isTrusted = false`),少数场景可能不响应:
- 校验 `isTrusted` 的组件
- 复杂拖拽或手势验证码
- 位于 iframe 内的元素(脚本已声明 `@noframes`,无法直接操作内部 DOM)
**解决办法**:把「按住时长」调大(如 `80 ~ 150 ms`),或把该步骤切换为坐标模式(徽标菜单 →「改为坐标」)。
### 运行时报错 `Failed to convert value to 'Window'`
已在 v1.0.2 修复。原因是 Tampermonkey 沙箱中的 `window` 是代理对象,不能直接作为 `MouseEvent` 的 `view`。现在改用 `document.defaultView`,并提供五级降级构造链。
---
## 更新日志
### v1.0.2
- 修复 Tampermonkey 沙箱下 `MouseEvent` 构造失败导致点击完全不生效的问题(五级降级链)
- 日志区支持鼠标框选,新增「📋 复制日志」「清空日志」按钮,复制三级回退
- 错误日志自动给日志框描红,并提示可复制反馈
- 日志上限由 60 行提高到 100 行
- 标识替换为官网与作者信息;存储键迁移至 `zkcoi_` 前缀(自动迁移旧配置)
### v1.0.1
- 修复 `CSS.escape` 被局部变量遮蔽导致拾取后静默失败(脚本无法添加步骤)的核心 bug
- 拾取模式增加十字光标、按钮状态切换等明确反馈
- 拾取/运行期间的异常直接写入面板日志
- 点击 iframe 时给出明确提示
### v1.0.0
- 首个版本:可视化拾取、多点串行点击、逐步骤间隔、循环、抖动、配置持久化
---
## 项目结构
```
.
├── 可视化自动点击器.user.js # 用户脚本本体,安装这一个文件即可
└── README.md # 本文档
```
## 技术说明
- 纯原生 JavaScript,无任何外部依赖
- 面板使用 **Shadow DOM** 渲染,样式与页面完全隔离,不污染也不受页面样式影响
- 事件派发序列:`pointerover → mouseover → pointermove → mousemove → pointerdown → mousedown → (hold) → pointerup → mouseup → click`
- 选择器生成策略:优先 `id`,其次 `tag + class`,再退化到 `nth-of-type`,并对每一层做唯一性校验
## 许可
[MIT License](./LICENSE) © 2026 zkcoi
## 免责声明
本脚本仅用于提升个人在自有或已授权页面上的操作效率。请遵守目标网站的服务条款与相关法律法规,勿用于刷量、薅羊毛、恶意攻击等违反规则的用途。因使用本脚本造成的任何后果由使用者自行承担。
---
**作者**:zkcoi | **官网**:<https://www.zkcoi.com>