// ==UserScript== // @name B站字幕自动点击 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 检测B站视频URL变化后,在4秒后自动点击开启字幕,降低性能消耗 // @author wilsend // @match *://*.bilibili.com/video/* // @grant none // ==/UserScript== (function() { 'use strict'; // 存储当前URL let currentUrl = location.href; // 存储点击操作的计时器ID let clickTimer = null; // 点击字幕元素的函数 function clickSubtitleElement() { // 查找字幕元素 const targetElement = document.querySelector('.bpx-player-ctrl-subtitle-language-item-text'); if (targetElement) { console.log('找到字幕元素,执行点击'); // 多种点击方式确保触发 try { // 1. 原生click方法 targetElement.click(); // 2. 模拟鼠标事件 const mouseEvent = new MouseEvent('click', { bubbles: true, cancelable: true, view: window }); targetElement.dispatchEvent(mouseEvent); console.log('字幕元素点击成功'); } catch (e) { console.error('点击字幕元素失败:', e); } } else { console.log('未找到字幕元素'); } } // 处理URL变化的函数 function handleUrlChange() { // 清除可能存在的旧计时器 if (clickTimer) { clearTimeout(clickTimer); } console.log('检测到视频URL变化,将在4秒后尝试点击字幕'); // 4秒后执行点击操作 clickTimer = setTimeout(() => { clickSubtitleElement(); }, 4000); } // 监控URL变化的观察者 const urlObserver = new MutationObserver(() => { // 检查URL是否真的发生了变化 if (location.href !== currentUrl) { currentUrl = location.href; // 确保是B站视频页面才执行操作 if (currentUrl.includes('bilibili.com/video/')) { handleUrlChange(); } } }); // 启动URL变化监控 function startUrlMonitoring() { // 观察document的变化,用于检测单页应用的URL变化 urlObserver.observe(document, { subtree: true, childList: true }); console.log('B站视频URL监控已启动'); } // 监听B站特有的页面切换事件 function setupBilibiliEvents() { // B站单页应用切换内容时会触发spfdone事件 window.addEventListener('spfdone', () => { if (location.href.includes('bilibili.com/video/')) { console.log('检测到B站页面切换事件'); handleUrlChange(); } }); } // 初始化 function init() { console.log('B站字幕自动点击脚本初始化'); startUrlMonitoring(); setupBilibiliEvents(); // 初始页面加载完成后也执行一次 setTimeout(() => { clickSubtitleElement(); }, 4000); } // 页面加载完成后初始化 if (document.readyState === 'complete') { init(); } else { window.addEventListener('load', init); } })();