// ==UserScript== // @name B站/哔哩哔哩/bilibili-视频自动开启中文字幕 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 自动点击B站视频的中文字幕选项,有限次尝试 // @author Ny // @icon https://play-lh.googleusercontent.com/C1tISqYgtW_ejAmnGzvepbaYt7NJLagPelCZ_lzNv06RJPQgBx1_q3VX67z9wc48EgY=s1024 // @match *://www.bilibili.com/video/* // @match *://www.bilibili.com/list/watchlater* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; // 配置参数 const MAX_ATTEMPTS = 10; // 最大尝试次数 const RETRY_DELAY = 2000; // 重试延迟(毫秒) let attemptCount = 0; // 当前尝试次数 let isActive = false; // 是否已激活 // 等待页面加载完成 window.addEventListener('load', function() { setTimeout(tryClickChineseSubtitle, 2000); }); // 监听SPA路由变化 let lastUrl = location.href; new MutationObserver(() => { const currentUrl = location.href; if (currentUrl !== lastUrl) { lastUrl = currentUrl; // 重置状态 attemptCount = 0; isActive = false; setTimeout(tryClickChineseSubtitle, 2000); } }).observe(document, {subtree: true, childList: true}); function tryClickChineseSubtitle() { if (isActive || attemptCount >= MAX_ATTEMPTS) { return; // 已激活或达到最大尝试次数,不再尝试 } attemptCount++; console.log(`尝试点击中文字幕 (第 ${attemptCount} 次)`); const subtitleElements = document.querySelectorAll('.bpx-player-ctrl-subtitle-language-item-text'); let found = false; for (let element of subtitleElements) { if (element.textContent.trim() === '中文') { found = true; console.log('找到中文字幕按钮'); const parentElement = element.closest('.bpx-player-ctrl-subtitle-language-item'); if (parentElement && !parentElement.classList.contains('bpx-state-active')) { console.log('中文字幕未激活,执行点击'); element.click(); // 验证点击是否成功 setTimeout(() => { if (parentElement.classList.contains('bpx-state-active')) { console.log('中文字幕激活成功'); isActive = true; } else { console.log('中文字幕激活失败'); // 安排下一次尝试 if (attemptCount < MAX_ATTEMPTS) { setTimeout(tryClickChineseSubtitle, RETRY_DELAY); } else { console.log(`已达到最大尝试次数(${MAX_ATTEMPTS}),放弃尝试`); } } }, 500); } else { console.log('中文字幕已激活'); isActive = true; } break; } } if (!found) { console.log('未找到中文字幕按钮'); // 安排下一次尝试 if (attemptCount < MAX_ATTEMPTS) { console.log(`${RETRY_DELAY/1000}秒后再次尝试`); setTimeout(tryClickChineseSubtitle, RETRY_DELAY); } else { console.log(`已达到最大尝试次数(${MAX_ATTEMPTS}),放弃尝试。可能此视频无中文字幕`); } } } // 初始执行 setTimeout(tryClickChineseSubtitle, 2000); })();