// ==UserScript== // @name bili指挥部(指挥部精准降落) // @namespace http://tampermonkey.net/ // @version 0.1 // @description 查找弹幕中的"指挥部"关键词,实现自动跳过片头 // @author kakasearch // @match *://www.bilibili.com/* // @connect https://comment.bilibili.com // @run-at document-end // @grant GM_xmlhttpRequest // @license MIT // @downloadURL none // ==/UserScript== var setting={ keyword:['指挥部','精准降落','指挥官','精准落地','感谢指路','精准'], react_time:2,//弹幕发送的反应时间 cid:'',//控制切p debug : 0, } function info(){ const arg = Array.from(arguments); arg.unshift(`color: white; background-color:#2274A5`); arg.unshift('%c bili指挥部:'); console["info"].apply(console, arg); } function get_danmu(cid){//获取弹幕 if(setting.debug){ info('开始获取弹幕') } GM_xmlhttpRequest({ method: 'GET', url: 'https://comment.bilibili.com/'+cid+'.xml', onload: function(xhr) { let found = 0 if (xhr.status == 200) { let text = xhr.responseText.replace(/<\/d>/g,'\n')//弹幕中找指挥部 for(let i=0;i .*?"+setting.keyword[i]+".*?", "gi"); let result = pattern1.exec(text) if(result){ if(setting.debug){ info('找到指挥部关键词',setting.keyword[i]) } let target = Number(result[1])//指挥部所在时间 let video= document.querySelector("video") video.currentTime = target-setting.react_time video.play() found = 1 setting.cid = cid info('已降落至指挥部') break } } if(found==0){ info('未找到指挥部') info( text) } } else { info('获取弹幕失败') } } }); } (function() { let cid function initfun(){ let init = setInterval(function(){ cid = document.querySelector(" li.bilibili-player-video-btn-menu-list.bilibili-player-active.bilibili-player-blink").getAttribute('data-id') if(cid &&cid !=setting.cid){clearInterval(init) //成功进入页面,开始执行功能 let video= document.querySelector("video") let observer = new MutationObserver(initfun); observer.observe(video,{attributes: true,childList: true,subtree: true});//检测video变化,防止中途切换失效 get_danmu(cid) } },1000) } initfun() // Your code here... })();