如何使用Tampermonkey实现网站指定按钮每小时自动点击?
Tampermonkey 定时自动点击按钮解决方案
原代码失效常见原因
- 脚本运行时目标按钮还未完成渲染,
document.getElementById无法获取到对应元素 - 目标网站的按钮绑定了非标准点击事件,原生
click()方法无法触发业务逻辑 - 页面进入后台休眠时,
setInterval会被浏览器挂起,导致计时不准、甚至漏执行 - 没有处理按钮点击后的异常情况,无法保证点击成功后才重置下一轮计时
完整可运行脚本
// ==UserScript== // @name 每小时自动点击打卡按钮 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 自动定时点击id为mark_attendance的按钮 // @match *://替换为你的目标网站域名/* // @grant none // @run-at document-idle // ==/UserScript== (function() { 'use strict'; let timer = null; const INTERVAL = 3600 * 1000; // 1小时的毫秒数 // 模拟真实用户点击,适配自定义事件绑定的网站 function simulateClick(element) { const event = new MouseEvent('click', { bubbles: true, cancelable: true, view: window }); element.dispatchEvent(event); } // 执行点击任务 function runClickTask() { const targetBtn = document.getElementById('mark_attendance'); if (targetBtn) { simulateClick(targetBtn); console.log('按钮点击已触发,下一轮执行将在1小时后'); // 点击成功后重置计时器,避免计时漂移 clearTimeout(timer); timer = setTimeout(runClickTask, INTERVAL); } else { // 未找到按钮时1分钟后重试,避免动态渲染延迟导致失效 console.log('未找到目标按钮,1分钟后重试'); clearTimeout(timer); timer = setTimeout(runClickTask, 60 * 1000); } } // 首次执行延迟3秒,适配动态渲染的页面元素 setTimeout(() => { runClickTask(); }, 3000); })();
使用注意事项
- 将脚本中
@match字段的占位符替换为实际的目标网站域名,否则脚本不会在对应页面生效 - 如果按钮id不固定,可以将
document.getElementById替换为document.querySelector,通过类名、自定义属性等匹配目标元素 - 如需保证点击成功才重置计时,可以在点击逻辑后增加成功状态判断,比如检测页面是否出现成功提示文本,再触发下一轮计时
内容的提问来源于stack exchange,提问作者Saquib Ahmed
相关产品推荐
相关产品推荐

