Tampermonkey脚本自动刷新预约网站检测可约日期无警报问题求解
修复方案
现有代码问题
- 语法错误:
if判断条件多写了1个左括号,直接导致检测代码报错无法运行 - 定时器逻辑错误:使用
setTimeout实现定时刷新,却调用未定义的clearInterval(gun),既无法停止刷新,也会额外抛出报错 - 执行时机问题:未等待页面DOM加载完成就执行元素检测,大概率会找不到目标元素
- 刷新逻辑冲突:检测到可预约日期后没有停止刷新逻辑,页面会继续刷新导致警报无法触发
- 音频播放限制:现代浏览器默认禁止非用户交互场景下自动播放音频,首次运行需要手动点击一次页面解除限制
完整修复后脚本
将以下代码替换你现有Tampermonkey脚本内容,注意替换@match字段为你要监控的预约页面地址:
// ==UserScript== // @name 预约日期自动检测提醒 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 自动刷新预约页面,检测到可约日期触发声音警报 // @match *://你的预约网站域名/预约页面路径/* // @grant none // ==/UserScript== (function() { 'use strict'; // 等待页面完全加载后再执行检测 window.addEventListener('load', () => { // 检测可预约日期元素 const availableDays = document.getElementsByClassName('day activeClass'); if (availableDays.length > 0) { // 检测到可约日期,播放警报 new Audio('http://soundbible.com/grab.php?id=287&type=mp3').play(); // 终止执行,不再刷新页面 return; } // 无可用日期,50秒后自动刷新 setTimeout(() => location.reload(), 50 * 1000); }); })();
注意事项
- 首次运行脚本时手动点击一次页面任意位置,解除浏览器音频自动播放限制
- 若后续检测失效,可打开浏览器控制台(F12打开后切换到Console标签)查看报错,确认目标可预约日期的类名是否发生变动
- 若音频地址跨域无法播放,可将音频文件转成base64格式直接嵌入脚本,避免外链访问问题
内容的提问来源于stack exchange,提问作者mahal jirari
相关产品推荐
相关产品推荐

