Greasy Fork is available in English.
解决B站恼人的单个视频自动播放问题,只对HTML5播放器生效。如果是视频集则自动播放,如果是单个视频则不自动播放。
当前为
// ==UserScript==
// @name 关闭B站自动播放下一个视频(自动切集)
// @namespace https://www.tampermonkey.net/
// @version 0.9
// @description 解决B站恼人的单个视频自动播放问题,只对HTML5播放器生效。如果是视频集则自动播放,如果是单个视频则不自动播放。
// @author ProDark
// @match https://www.bilibili.com/*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// Your code here...
function check_list_exist(){
try
{
var tempLists = document.getElementsByTagName("div");
for(var i in tempLists){
var theAttrClass = tempLists[i].getAttribute("class");
if( theAttrClass == "plp-r" || theAttrClass == "cur-list" || theAttrClass == "video-sections")
{//判断是不是列表形连续剧
return true;
}
}
return false;
}
catch(err)
{
return false;
}
}
function ClickButton(Target){
var e = document.createEvent("MouseEvents");
e.initMouseEvent("click", true, false);
Target.dispatchEvent(e);
}
function pageAcive(){
//后台打开的页面没有播放器载入,主要功能失效。这个用于判断页面处于后台还是前台。
//console.log(document.hidden);
if(document.hidden){
// 如果当前页面在后台打开
return false;
}
else
{
return true;
}
}
//-------------------------------------------------------------------------------------------
function AutoNextON(){
var divs = document.getElementsByTagName("span");
for(var i=0;i<divs.length;i++){
if( divs[i].innerText == "自动切集")
{
ClickButton(divs[i]);
break;
}
}
}
function AutoNextOFF(){
var divs = document.getElementsByTagName("span");
for(var i=0;i<divs.length;i++){
if( divs[i].innerText == "播完暂停")
{
ClickButton(divs[i]);
break;
}
}
}
function MouseFn_fix(){
return;
// 鼠标滚轮在操作完后无法滚动条件音量,尝试随便点个位置让功能恢复
var i = 0;
var divs = document.getElementsByTagName("button");
for(i=0;i<divs.length;i++){
if( divs[i].getAttribute("class") == "bilibili-player-iconfont bilibili-player-iconfont-fullscreen-off player-tooltips-trigger")
{
ClickButton(divs[i]);
break;
}
}
/*
var divs2 = document.getElementsByTagName("button");
for(i=0;i<divs2.length;i++){
if( divs2[i].getAttribute("class") == "bilibili-player-iconfont bilibili-player-iconfont-fullscreen-on player-tooltips-trigger")
{
ClickButton(divs2[i]);
break;
}
}
*/
}
function check_fullscreen_button(){
try
{
var tempLists = document.getElementsByTagName("button");
for(var i in tempLists){
var theAttrClass = tempLists[i].getAttribute("class");
if( theAttrClass == "bilibili-player-iconfont bilibili-player-iconfont-fullscreen-off player-tooltips-trigger")
{//判断是不是列表形连续剧
return true;
}
}
return false;
}
catch(err)
{
return false;
}
}
function MainProcess_old(){
//设置按钮
var buttons = document.getElementsByTagName("button");
for(var i=0;i<buttons.length;i++){
if( buttons[i].getAttribute("class") == "bilibili-player-iconfont bilibili-player-iconfont-setting")
{
var e = document.createEvent("MouseEvents");
e.initMouseEvent("mouseover", true, false );
buttons[i].dispatchEvent(e);
var e2 = document.createEvent("MouseEvents");
e2.initMouseEvent("mouseout", true, false);
buttons[i].dispatchEvent(e2);
//模拟鼠标放到按钮并移开,使其加载 目标按钮节点
break;
}
}
//成功加载
if(check_list_exist()){
AutoNextON();
MouseFn_fix();
}
else{
AutoNextOFF();
MouseFn_fix();
}
}
//-------------------------------------------------------------------------------------------
function check_videoplayer_ready(){
//squirtle-progress-wrap squirtle-progress-common ease
try
{
var tempLists = document.getElementsByTagName("div");
for(var i in tempLists){
var theAttrClass = tempLists[i].getAttribute("class");
if( theAttrClass == "bilibili-player-video-progress-slider bui bui-slider" || theAttrClass == "squirtle-controller squirtle-pgc")
{//检查播放器是否准备完毕 // 有两种播放器
return true;
}
}
return false;
}
catch(err)
{
return false;
}
}
function Need_to_make_Off(){
var divs = document.getElementsByTagName("p");
for(var i=0;i<divs.length;i++){
if( divs[i].getAttribute("class") == "rec-title")
{
return true;
}
}
return false
}
function AutoNextON_inVideo(){
try
{
var tempLists = document.getElementsByTagName("div");
for(var i in tempLists){
var theAttrClass = tempLists[i].innerText;
if( tempLists[i].innerText == "自动切集")
{
ClickButton(tempLists[i])
return true;
}
}
console.log("Error : AutoNextON_inVideo");
return false;
}
catch(err)
{
console.log("Error : AutoNextON_inVideo");
return false;
}
}
function AutoNextButtonOFF()
{
var divs = document.getElementsByTagName("span");
for(var i=0;i<divs.length;i++){
if( divs[i].getAttribute("class") == "switch-button on")
{
ClickButton(divs[i]);
return true;
}
}
return false
}
function AutoNextButtonON()
{
var divs = document.getElementsByTagName("span");
for(var i=0;i<divs.length;i++){
if( divs[i].getAttribute("class") == "switch-button")
{
ClickButton(divs[i]);
return true;
}
}
return false
}
function MainProcess(){
var ret = false;
if(Need_to_make_Off())
{
ret = AutoNextButtonOFF();
console.log("关闭自动切集");
}else{
ret = AutoNextON_inVideo();
if(ret == false){
ret = AutoNextButtonON();
}
console.log("启动自动切集");
}
//alert(ret);
if(ret == true){
console.log("执行成功");
return true;
}else{
console.log("执行失败,按钮不存在或已经完成功能");
return false;
}
}
//-------------------------------------------------------------------------------------------
var TryTimeOut = 20;
var MainProcessTimeOut = 3;
function MainTimeOut(){
setTimeout(function(){
if(pageAcive() == false)
{
MainTimeOut();
return;
}
TryTimeOut --;
if( TryTimeOut<0)
{
return;
}
if( check_videoplayer_ready()== true )
{
if( MainProcess() == false )
{
MainProcessTimeOut --;
if( MainProcessTimeOut>0)
{
MainTimeOut();
}
}
}else{
//console.log("ERROR: 这个页面没找到H5播放器");
MainTimeOut();
}
},1000);//延迟1秒执行....我也不知道怎么确定页面加载完了.......
}
window.onload = function(){
MainTimeOut()
}
})();