应使用@run-at document-idle(默认值),在DOM构建完成但资源未加载完时执行;对异步渲染元素需配合waitForElement轮询,避免因时机不当导致节点查找失败。

您需要让宙斯浏览器中安装的Tampermonkey脚本在页面加载的特定阶段执行DOM操作,例如在HTML解析完成但图片未加载时点击按钮,或等异步数据渲染完毕后再修改界面元素——若注入时机错误,脚本可能查找不到目标节点而静默失败。
确认脚本运行环境已就绪
扩展内容脚本依赖Tampermonkey解析元数据并接管执行流程,跳过此步会导致所有后续时机配置无效。点击右上角三点菜单→“设置”→左侧“隐私与安全”→“网站设置”→“JavaScript”,将开关设为开启,并【必须勾选“允许所有网站运行JavaScript”】。地址栏输入zeus://extensions回车,开启右上角“开发者模式”,再点击“加载已解压的扩展程序”,选择Tampermonkey解压文件夹根目录。刷新后工具栏出现灰色猴子图标,表示基础环境已激活。
通过@run-at声明控制注入时刻
@run-at是决定脚本何时切入页面生命周期的核心元数据,写错值会导致脚本错过最佳执行窗口。打开猴子图标→“管理面板”→点击目标脚本右侧“编辑”→在元数据块中找到@run-at行(若无则手动添加):
方法一:@run-at document-start
脚本在Document对象创建后立即执行,此时HTML尚未开始解析,仅能监听DOMContentLoaded事件,适合注入全局钩子函数或重写原生API。
方法二:@run-at document-idle
默认值,等DOM树构建完成但资源(图片、iframe)仍在加载时触发,适用于绝大多数按钮点击、表单填充场景——这是最稳妥的选择,避免因等待图片加载而延迟执行。
方法三:@run-at document-end
等同于DOMContentLoaded事件监听,DOM结构完整但window.onload未触发,适合需读取所有DOM节点但不依赖图片尺寸的操作;若页面使用React/Vue等框架,此时虚拟DOM可能尚未挂载,真实元素仍不可见。
方法四:@run-at window-loaded
等同于window.onload,所有资源(含图片、样式表、子框架)加载完毕才执行,适合需获取图片宽高、计算布局偏移量的脚本;但签到类任务用它会明显拖慢响应速度,用户可能误以为页面卡死。
用条件轮询补足动态渲染场景
当目标元素由AJAX或前端框架异步生成时,仅靠@run-at无法确保其存在,必须主动等待。在脚本主逻辑中插入轮询代码:
第一步:定义检测函数
const waitForElement = (selector, timeout = 5000) => { return new Promise((resolve, reject) => { const startTime = Date.now(); const check = () => { const el = document.querySelector(selector); if (el) resolve(el); else if (Date.now() - startTime > timeout) reject(new Error(`Timeout: ${selector} not found`)); else setTimeout(check, 100); }; check(); });
第二步:在@run-at document-idle后调用
waitForElement('button#sign-btn').then(btn => btn.click()).catch(console.error);
这一步不能省略:现代网页大量使用懒加载和动态组件,@run-at document-end也未必能捕获到Vue mounted后的按钮,轮询是唯一可靠手段。注意timeout值不要设过短,否则在弱网环境下容易误判失败。
按Ctrl+S保存脚本,切换到目标网页并强制刷新(Ctrl+F5),观察控制台是否输出错误或按钮是否被点击。


















