B站!我受够了消息轰炸(屏蔽广告、自动跳转动态页、自动投币)

B站短视频化后,无疑间成了消耗碎片时间的大杀器.对此针对网页版进行了限制!;

  1. // ==UserScript==
  2. // @name B站!我受够了消息轰炸(屏蔽广告、自动跳转动态页、自动投币)
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description B站短视频化后,无疑间成了消耗碎片时间的大杀器.对此针对网页版进行了限制!;
  6. // 1. 针对首页进行了强制跳转到动态页的功能
  7. // 2. 关闭了动态页右侧的广告
  8. // 3. 自动投币
  9. // @author Liu Long
  10. // @match www.bilibili.com/*
  11. // @match t.bilibili.com/*
  12. // @grant none
  13. // @license MIT
  14. // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
  15. // @require https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js
  16. /* globals jQuery, $, waitForKeyElements */
  17. // ==/UserScript==
  18.  
  19. (function() {
  20. 'use strict';
  21.  
  22. //预设值的值
  23. const OPEN_AUTO_REDIRECT = true;// (true / false)开启重定向,主页会自动跳转到动态页
  24. const OPEN_HIDE_ADV = true;// (true / false)开启屏蔽广告,!动态页!右侧的广告自动隐藏
  25. const OPEN_AUTO_INSERT_COIN = true;// (true / false)开启自动投币功能,每点击一个视频自动投币
  26. const DEFAULT_INSERT_COIN_NUMS = 2;// (1-2) 每次看完视频默认投n个硬币)
  27. const DEFAULT_SELECT_LIKE = 1;// (0-1) 每次看完视频默认 || 不点赞(0) / 点赞(1)
  28. const INSERT_COIN_NUMS_PER_DAY = 5;// (0-5) 每天最多投币数(5)
  29.  
  30. //接口
  31. const INSERT_COIN_INTERFACE_URL = "https://api.bilibili.com/x/web-interface/coin/add"; // 投硬币接口
  32. const COIN_FLOW_INTERFACE = "https://api.bilibili.com/x/member/web/coin/log?jsonp=jsonp"; // 硬币流水接口
  33. //全局变量
  34. var curr_video_aid = 0;
  35. var check_video_async_refresh_interval = 5000;//(100-999999)5000毫秒的间隔,判断视频是否异步跳转了,该值越小越精确,系统开销也越大
  36.  
  37. //程序入口
  38. main();
  39.  
  40. function main(){
  41.  
  42. const index_page_flag = "?spm_id_from";
  43. const myDynamic_page_flag = "t";
  44. const mian_page_flag = "www";
  45.  
  46. let current_top_domain_name = getTopDomainName();
  47. let current_url_flag_name = getUrlFlagName();
  48.  
  49. //alert(current_top_domain_name + " | " + current_url_flag_name);
  50. if( current_top_domain_name != "" || current_url_flag_name != "" ){
  51. //判断是否是当前什么页
  52. if(current_top_domain_name == myDynamic_page_flag){
  53. //我的动态也
  54. if(OPEN_HIDE_ADV){hidenAdv_DynamicPage()}
  55. }else if(current_top_domain_name == mian_page_flag){
  56. //主页
  57. if(current_url_flag_name.indexOf(index_page_flag)==0 || current_url_flag_name == "" ){
  58. //是主页进行跳转
  59. if(OPEN_AUTO_REDIRECT){redirectToDynamicPage()}
  60. }else{
  61. //暂时不做相关操作
  62. //该页面一般指向video、anim、popular、movie等二级页
  63. if(current_url_flag_name.indexOf("video") != -1){
  64. //判断视频是否异步刷新了
  65. if(OPEN_AUTO_INSERT_COIN){setInterval(checkVideoPageAsyncRefresh,check_video_async_refresh_interval);}
  66. }
  67. if(current_url_flag_name.indexOf("bangumi") != -1){
  68. //判断视频是否异步刷新了
  69. if(OPEN_AUTO_INSERT_COIN){setInterval(checkVideoPageAsyncRefresh,check_video_async_refresh_interval);}
  70. }
  71. if(current_url_flag_name.indexOf("cheese") != -1){
  72. //判断视频是否异步刷新了
  73. if(OPEN_AUTO_INSERT_COIN){setInterval(checkVideoPageAsyncRefresh,check_video_async_refresh_interval);}
  74. }
  75. }
  76. }
  77. }
  78. }
  79.  
  80. ///
  81. // 检测video页是否进行了异步刷新
  82. // True:进行了异步刷新
  83. // curr_video_aid 全局变量,存储当前稿件的id值
  84. // ps:如果进行了异步刷新,则转入自动投币功能
  85. function checkVideoPageAsyncRefresh(){;
  86. if(curr_video_aid != aid){
  87. curr_video_aid = aid;
  88. //console.log("检测到页面发生异步刷新!");
  89. autoInsertCoin();
  90. //return true;
  91. }else{
  92. //return false;
  93. }
  94. }
  95.  
  96. function autoInsertCoin(){
  97. if(typeof(aid) == "undefined"){
  98. console.log("阻塞:aid未定义,请检查url匹配是否在正确!");
  99. return false;
  100. }
  101. if(getCsrfFromCookie("bili_jct") == ""){
  102. console.log("阻塞:cookie未找到bili_jct!")
  103. }
  104. //该aid是网页自带的值,可以直接拿来调用
  105. let curr_aid = aid;
  106. let curr_multiply = DEFAULT_INSERT_COIN_NUMS;
  107. let curr_select_like = DEFAULT_SELECT_LIKE;
  108. let curr_cross_domain = true;
  109. let curr_csrf = getCsrfFromCookie("bili_jct");
  110.  
  111. //投币
  112. let insertedCoinNums = GetToDayInsertedCoinNums();
  113. console.log("今日投币情况(不计入本次视频投币前): (",insertedCoinNums<=INSERT_COIN_NUMS_PER_DAY?insertedCoinNums:INSERT_COIN_NUMS_PER_DAY," / ",INSERT_COIN_NUMS_PER_DAY,")");
  114. if(insertedCoinNums < INSERT_COIN_NUMS_PER_DAY){
  115. //已经投了4个硬币下一次强制投入1个硬币
  116. if(insertedCoinNums == 4){
  117. InsertCoin(curr_aid,1,curr_select_like,curr_cross_domain,curr_csrf,INSERT_COIN_INTERFACE_URL);
  118. console.log("今日投币已达上限!");
  119. }else{
  120. InsertCoin(curr_aid,curr_multiply,curr_select_like,curr_cross_domain,curr_csrf,INSERT_COIN_INTERFACE_URL);
  121. }
  122. }
  123. }
  124.  
  125. function GetToDayInsertedCoinNums(){
  126. let coin_flow_obj = GetCoinFlow(COIN_FLOW_INTERFACE);
  127. if( coin_flow_obj !=null){
  128. let flow_list = coin_flow_obj['data']['list'];
  129. let insertedCoinNums = 0;
  130. for(let i=0;i<flow_list.length;i++){
  131. if(flow_list[i]['delta'] < 0 ){
  132. let temp_date = getDate_YMD(flow_list[i]['time']);
  133. let curr_date = getCurrDate_YMD();
  134. let day_deviaction = curr_date - temp_date;
  135. if(day_deviaction == 0){
  136. insertedCoinNums=insertedCoinNums-flow_list[i]['delta'];
  137. }
  138. }
  139. }
  140. return insertedCoinNums;
  141. }else{
  142. console.log("阻塞:硬币流水数据出错!");
  143. return 999;
  144. }
  145. }
  146.  
  147. function GetCoinFlow(curr_url){
  148. let coin_flow = null;
  149. $.ajax({
  150. type:"GET",
  151. async:false,
  152. xhrFields:{withCredentials: true},
  153. url:curr_url,
  154. success:(data) => {
  155. coin_flow=eval(data);
  156. }
  157. });
  158. return coin_flow;
  159. }
  160.  
  161. function getDate_YMD(date_str){
  162. let temp_date = new Date(Date.parse(date_str));
  163. temp_date.setHours(0);
  164. temp_date.setMilliseconds(0);
  165. temp_date.setMinutes(0);
  166. temp_date.setSeconds(0);
  167. return temp_date;
  168. }
  169.  
  170. function getCurrDate_YMD(){
  171. let temp_date = new Date();
  172. temp_date.setHours(0);
  173. temp_date.setMilliseconds(0);
  174. temp_date.setMinutes(0);
  175. temp_date.setSeconds(0);
  176. return temp_date;
  177. }
  178.  
  179. //投币
  180. function InsertCoin(curr_aid,curr_multiply,curr_select_like,curr_cross_domain,curr_csrf,curr_url){
  181. $.ajax({
  182. type:"POST",
  183. xhrFields:{withCredentials: true},
  184. url:curr_url,
  185. data:
  186. {
  187. aid:curr_aid,
  188. multiply:curr_multiply,
  189. select_like:curr_select_like,
  190. cross_domain:curr_cross_domain,
  191. csrf:curr_csrf
  192. },
  193. success:(data) => {
  194. //console.log(data)
  195. }
  196. });
  197. }
  198.  
  199. function getCsrfFromCookie(cookie_name){
  200. var allcookies = document.cookie;
  201. //索引长度,开始索引的位置
  202. var cookie_pos = allcookies.indexOf(cookie_name);
  203. // 如果找到了索引,就代表cookie存在,否则不存在
  204. if (cookie_pos != -1) {
  205. // 把cookie_pos放在值的开始,只要给值加1即可
  206. //计算取cookie值得开始索引,加的1为“=”
  207. cookie_pos = cookie_pos + cookie_name.length + 1;
  208. //计算取cookie值得结束索引
  209. var cookie_end = allcookies.indexOf(";", cookie_pos);
  210. if (cookie_end == -1) {
  211. cookie_end = allcookies.length;
  212. }
  213. //得到想要的cookie的值
  214. var value = unescape(allcookies.substring(cookie_pos, cookie_end));
  215. }
  216. return value;
  217. }
  218.  
  219. function hidenAdv_DynamicPage(){
  220. $(function(){$(".right").hide();});
  221. }
  222.  
  223. function redirectToDynamicPage(){
  224. window.location.href="https://t.bilibili.com/?tab=video";
  225. }
  226.  
  227. function getTopDomainName(){
  228. var current_url=window.location.href;
  229. var url_reg=/https:\/\/(www|t).*?\/(.*?\?spm_id_from)?.*/g
  230. if(url_reg.test(current_url)){
  231. return RegExp.$1;
  232. }else{
  233. console.log("阻塞:URL校对发生错误!请校对脚本!")
  234. return "";
  235. }
  236. }
  237.  
  238. function getUrlFlagName(){
  239. var current_url=window.location.href;
  240. var url_reg=/https:\/\/(www|t).*?\/(.*)/g
  241. if(url_reg.test(current_url)){
  242. return RegExp.$2;
  243. }else{
  244. console.log("阻塞:URL校对发生错误!请校对脚本!")
  245. return "";
  246. }
  247. }
  248.  
  249. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址