8.9 KiB
8.9 KiB
可视化自动点击器
一个 Tampermonkey 用户脚本:在任意网页上可视化拾取多个点击位置,按设定顺序串行自动点击,每一步可单独设置点击间隔,支持循环、随机抖动与配置持久化。
- 🌐 官网:https://www.zkcoi.com
- 👤 作者:zkcoi
功能特性
| 特性 | 说明 |
|---|---|
| 🎯 可视化选点 | 开启拾取后鼠标变十字光标,悬停元素实时高亮并显示元素标签,点击即添加为步骤 |
| 🔢 多点串行 | 支持任意多个点击位置,严格按列表顺序依次执行 |
| ⏱ 逐步骤间隔 | 每个步骤可单独设置点击间隔(毫秒),互不影响 |
| 📍 双定位模式 | 优先生成唯一 CSS 选择器(元素移动也不丢);生成失败自动回退为屏幕比例坐标 |
| 🏷 页面编号标记 | 每个步骤在页面上对应位置显示编号徽标,随滚动/元素移动自动跟随,点击可编辑 |
| 🔁 循环执行 | 可设置循环次数(0 = 无限),并设置每轮之间的间隔 |
| 🎲 随机抖动 | 让间隔随机浮动,模拟真人节奏,降低被自动化检测识别的概率 |
| 🖱 按住时长 | 可设置 mousedown 与 mouseup 之间的间隔,应对需要"长按"的组件 |
| 💾 配置持久化 | 按域名自动保存,下次打开页面自动恢复;支持导出/导入 JSON |
| 🛡 异常自愈 | 事件构造五级降级 + 全流程错误捕获,异常直接显示在面板日志中 |
安装
方式一:从 Gitea 直接安装(推荐)
- 浏览器安装 Tampermonkey 扩展
- 打开本仓库的
可视化自动点击器.user.js文件,点击「Raw 原始文件」 - Tampermonkey 会自动识别并弹出安装页面,点击「安装」即可
- 后续 Tampermonkey 会自动检测更新
方式二:手动粘贴
- Tampermonkey → 仪表盘 → 「+」新建脚本
- 删除默认内容,粘贴
可视化自动点击器.user.js的全部内容 Ctrl + S保存,刷新目标页面生效
⚠️ 更新脚本后,务必刷新已打开的页面,否则内存中运行的仍是旧版本。
使用教程
1. 拾取点击位置
- 点击面板上的 「🎯 拾取位置」 按钮
- 鼠标指针变为 十字光标,页面顶部出现提示条
- 移动鼠标 → 目标元素出现 橙色高亮框,框上标签显示元素类型与尺寸
- 单击左键 → 该位置被添加为一步,元素上闪一圈绿光
| 操作 | 效果 |
|---|---|
| 单击 | 拾取一个位置后自动退出拾取模式 |
按住 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 及之前)的配置会在首次加载时自动迁移,不会丢失。
常见问题
点击「拾取位置」后没反应?
按以下顺序排查:
- 面板日志是否出现「v1.0.2 已就绪」——没有说明脚本未运行,检查
@match是否覆盖该站点,或页面是否处于 iframe 中 - 点「拾取」后鼠标是否变为十字光标——没有说明按钮事件被页面拦截,改用脚本菜单里的「拾取点击位置」入口
- 前两步正常但点击元素无反应——查看面板日志中的红色报错,用「📋 复制日志」发给我
日志无法选中复制?
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 © 2026 zkcoi
免责声明
本脚本仅用于提升个人在自有或已授权页面上的操作效率。请遵守目标网站的服务条款与相关法律法规,勿用于刷量、薅羊毛、恶意攻击等违反规则的用途。因使用本脚本造成的任何后果由使用者自行承担。
作者:zkcoi | 官网:https://www.zkcoi.com