自动打开哔哩哔哩字幕,只在有播放列表时开启,方便看课程,不需要每次都点击字幕
// ==UserScript==
// @name bilibili字幕自动打开
// @namespace http://tampermonkey.net/
// @version 1.14
// @description 自动打开哔哩哔哩字幕,只在有播放列表时开启,方便看课程,不需要每次都点击字幕
// @author lisisuidegithub
// @match https://www.bilibili.com/video/*
// @icon https://i0.hdslb.com/bfs/static/jinkela/long/images/favicon.ico
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
let interval; // 声明轮询变量
// 等待页面完全加载完毕后执行脚本
window.onload = function() {
let lastUrl = window.location.href; // 存储上一个 URL
// 初始检测播放列表和字幕
checkAndOpenSubtitle();
// 监听 DOM 变化
const observer = new MutationObserver(() => {
let currentUrl = window.location.href;
// 检查 URL 是否发生变化
if (currentUrl !== lastUrl) {
console.log('URL发生变化');
console.log('currentUrl:'+currentUrl)
console.log('lastUrl:'+lastUrl)
lastUrl = currentUrl; // 更新上一个 URL
clearInterval(interval); // 停止当前轮询
checkAndOpenSubtitle(); // 重新检测播放列表和字幕
}
});
// 开始观察 DOM 变化,监听整个页面的变化
observer.observe(document.body, { childList: true, subtree: true });
function checkAndOpenSubtitle() {
let boxList = document.querySelector("#mirror-vdcon > div.right-container > div > div.rcmd-tab > div.video-pod.video-pod > div.video-pod__body > div.video-pod__list.multip.list")
// console.log(boxList)
if (!boxList && !lastUrl.includes('p=')) {
console.log('不存在列表!')
return
}
// if (!lastUrl.includes('p=')) {
// console.log('不存在列表!')
// return
// }
//// 检测是否存在播放列表
//const listBox = document.querySelector('div.video-pod.video-pod');
//if (!listBox) {
// console.log('不存在播放列表');
// return
//}
console.log('发现播放列表!');
clearInterval(interval); // 确保清除旧的轮询
waitForSubtitleButton();
}
// 轮询检测列表和字幕
function waitForSubtitleButton() {
// 检测字幕是否已开启
var subtitlePanel = document.querySelector('.bili-subtitle-x-subtitle-panel .bili-subtitle-x-subtitle-panel-text.bili-subtitle-x-subtitle-panel-text-mouse-move-cursor')
if (subtitlePanel) {
console.log('字幕已开启!!!')
// clearInterval(interval)
return
}
const maxAttempts = 20; // 设置最大尝试次数
let attempts = 0;
console.log('尝试开启字幕......')
interval = setInterval(() => {
// 检测字幕是否已开启
var subtitlePanel = document.querySelector('.bili-subtitle-x-subtitle-panel .bili-subtitle-x-subtitle-panel-text.bili-subtitle-x-subtitle-panel-text-mouse-move-cursor')
if (subtitlePanel) {
console.log('字幕已开启!!!')
clearInterval(interval)
return
}
attempts++;
if (attempts > maxAttempts) {
console.log('尝试次数过多,停止轮询!');
console.log('不存在字幕!');
clearInterval(interval);
return
}
console.log(`第${attempts}次尝试......`)
// var subtitleButton = document.querySelector('.bpx-player-ctrl-btn.bpx-player-ctrl-subtitle[aria-label="字幕"] .bpx-player-ctrl-btn-icon .bpx-common-svg-icon');
var subtitleButton = document.querySelector('div.bpx-player-ctrl-subtitle-language-item')
if (subtitleButton) {
subtitleButton.click(); // 点击字幕按钮
console.log('字幕开启成功!');
clearInterval(interval);
return
}
}, 1000); // 每秒检测一次字幕按钮
}
};
})();