您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动点击年龄确认和跳过广告按钮,暂停时隐藏界面元素以便截屏,鼠标悬停进度条区域显示控制器
// ==UserScript== // @name 巴哈姆特动画广告跳过助手 // @namespace https://greasyfork.org/zh-CN/scripts/531816 // @version 0.6 // @description 自动点击年龄确认和跳过广告按钮,暂停时隐藏界面元素以便截屏,鼠标悬停进度条区域显示控制器 // @author YourName // @match https://ani.gamer.com.tw/animeVideo.php?sn=* // @grant none // ==/UserScript== (function() { 'use strict'; // 1. 处理年龄确认按钮 function clickAdultConfirm() { const adultBtn = document.getElementById('adult'); if (adultBtn) { console.log('找到年龄确认按钮,自动点击'); adultBtn.click(); setTimeout(monitorSkipButton, 1000); } else { setTimeout(clickAdultConfirm, 500); } } // 2. 监控跳过广告按钮 function monitorSkipButton() { const skipButton = document.getElementById('adSkipButton'); if (!skipButton) { setTimeout(monitorSkipButton, 500); return; } const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.attributeName === 'class') { const currentClass = skipButton.getAttribute('class'); if (currentClass.includes('enable')) { console.log('检测到可跳过的广告按钮,自动点击'); skipButton.click(); observer.disconnect(); } } }); }); const config = { attributes: true, attributeFilter: ['class'] }; observer.observe(skipButton, config); if (skipButton.classList.contains('enable')) { console.log('初始检查发现可跳过的广告按钮,自动点击'); skipButton.click(); observer.disconnect(); } } // 3. 监控页面变化以捕获动态加载的年龄确认界面 function observePage() { const observer = new MutationObserver(function(mutations) { const adultBtn = document.getElementById('adult'); if (adultBtn) { console.log('动态检测到年龄确认按钮,触发点击'); clickAdultConfirm(); } }); observer.observe(document.body, { childList: true, subtree: true }); } // 4. 暂停时隐藏界面元素,播放时恢复,鼠标悬停进度条区域显示控制器 function setupPauseHide() { const video = document.querySelector('video'); if (!video) { setTimeout(setupPauseHide, 500); return; } // 目标元素 const elementsToHide = [ '.vjs-big-play-button', // 右下角播放按钮 '.top-tool-bar', // 顶部阴影工具栏 '.control-bar-mask' // 底部阴影遮罩 ]; const controlBarSelector = '.vjs-control-bar'; // 底部控制条(进度条等) // 保存原始 display 状态 const originalDisplay = new Map(); // 隐藏元素(不包括控制条) function hideElements() { elementsToHide.forEach(selector => { const element = document.querySelector(selector); if (element) { if (!originalDisplay.has(selector)) { originalDisplay.set(selector, element.style.display || 'block'); } element.style.display = 'none'; console.log(`隐藏元素: ${selector}`); } }); } // 隐藏控制条 function hideControlBar() { const controlBar = document.querySelector(controlBarSelector); if (controlBar) { if (!originalDisplay.has(controlBarSelector)) { originalDisplay.set(controlBarSelector, controlBar.style.display || 'block'); } controlBar.style.display = 'none'; console.log(`隐藏控制条: ${controlBarSelector}`); } } // 显示控制条 function showControlBar() { const controlBar = document.querySelector(controlBarSelector); if (controlBar) { controlBar.style.display = originalDisplay.get(controlBarSelector) || 'block'; console.log(`显示控制条: ${controlBarSelector}`); } } // 恢复所有元素 function showElements() { elementsToHide.forEach(selector => { const element = document.querySelector(selector); if (element) { element.style.display = originalDisplay.get(selector) || 'block'; console.log(`恢复元素: ${selector}`); } }); showControlBar(); // 确保控制条也恢复 } // 暂停时隐藏元素的逻辑 function onPause() { hideElements(); hideControlBar(); setupControlBarHover(); // 设置鼠标悬停逻辑 } // 设置鼠标悬停显示控制条 function setupControlBarHover() { const videoContainer = document.querySelector('.vjs-control-bar')?.parentElement || document.querySelector('video').parentElement; if (!videoContainer) { console.log('未找到视频容器,重试'); setTimeout(setupControlBarHover, 500); return; } // 鼠标进入时显示控制条 videoContainer.addEventListener('mouseenter', function handler(e) { if (video.paused) { showControlBar(); } }); // 鼠标离开时隐藏控制条 videoContainer.addEventListener('mouseleave', function handler(e) { if (video.paused) { hideControlBar(); } }); } // 监听视频暂停和播放事件 video.addEventListener('pause', onPause); video.addEventListener('play', showElements); // 初始检查:如果视频已经暂停 if (video.paused) { onPause(); } } // 页面加载后执行 if (document.readyState === 'complete' || document.readyState === 'interactive') { setTimeout(clickAdultConfirm, 1000); observePage(); setTimeout(setupPauseHide, 1000); } else { window.addEventListener('DOMContentLoaded', function() { setTimeout(clickAdultConfirm, 1000); observePage(); setTimeout(setupPauseHide, 1000); }); } })();