上传文件至「/」

This commit is contained in:
zkcoi committed 2026-09-20 13:55:46 +08:00
commit 42fef77e18
2 files changed
+1073

No files matched your search

+216
View File
@@ -0,0 +1,216 @@
# 可视化自动点击器
[![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>