UnderHentai小工具

手机端因为广告基本不能正常观看,故有此脚本,里番动漫站点:https://www.underhentai.net/

  1. // ==UserScript==
  2. // @name UnderHentai小工具
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.8.2
  5. // @description 手机端因为广告基本不能正常观看,故有此脚本,里番动漫站点:https://www.underhentai.net/
  6. // @author thunder-sword
  7. // @match *://www.underhentai.net/*
  8. // @match *://doodstream.com/e/*
  9. // @match *://dood.yt/e/*
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=underhentai.net
  11. // @license MIT
  12. // @grant none
  13. // ==/UserScript==
  14. //更新日志:
  15. //v0.8:已兼容pc和手机端(kiwi浏览器);kiwi可以安装低版本的油猴插件,但是低版本无法使用可选链操作符“?.”,否则脚本不会执行,于是将所有的可选链操作符替换成等效兼容代码即可成功运行;同时默认使player页面的js不会被清除以提高稳定性
  16. //v0.7:此版本在pc端使用油猴插件基本上已经不会导致广告弹出,但是手机端还会,原因是手机端如果不用油猴工作方式有些不同,比如via浏览器和x浏览器,它们不会像油猴那样识别iframe中的url进行多次执行,而只会在主iframe执行一次,所以bood的广告在手机端根本没有去除
  17.  
  18.  
  19. // 通过修改参数可以修改广告作用效果。
  20. const settings={
  21. "del_nomal_adv":true,
  22. "del_sex_adv":false,//player页面上的sex广告依托于js实现,如果不想关闭同时需要使clear_player_script=false
  23. "delay":300,
  24. "clear_player_script":false,//删除播放器页面的所有script和iframe,再手动引入播放iframe,可能能加快页面速度,但也可能引起页面异常
  25. };
  26.  
  27. //作用:删除普通广告(烦人的,让视频无法观看的)
  28. function del_nomal_adv(){
  29. if(-1!==window.location.host.indexOf("underhentai")){
  30. //删除侧栏广告
  31. var afiEl = document.querySelector("div.afi-sm");
  32. if (afiEl) {
  33. afiEl.remove();
  34. }
  35. //删除点击watch按钮会弹出页面广告
  36. document.querySelectorAll("#main > div.col-sm-8.col-md-9.col-lg-9.content > div.content-table > table > tbody > tr > td.c8 > a").forEach(function(e) {
  37. if (e) {
  38. e.setAttribute("class", "");
  39. }
  40. });
  41. if('/watch/'===window.location.pathname){
  42. //删除视频播放前的弹窗广告【删除好像会使视频加载不出来,改为隐藏】
  43. //document.querySelectorAll("div#overlay").forEach(function(e) {if (e) {e.remove();}});
  44. document.querySelectorAll("div#overlay").forEach(function(e) {if (e) {e.hidden=true;}});
  45. }
  46. }else if(-1!==window.location.host.indexOf("dood")){
  47. setInterval(() => {
  48. //删除所有script
  49. document.querySelectorAll('script').forEach(function(e) {if (e) {e.remove();}});
  50. //删除所有iframe
  51. document.querySelectorAll('iframe').forEach(function(e) {if (e) {e.remove();}});
  52. //删除检查对话框
  53. document.querySelectorAll('#checkresume_div').forEach(function(e) {if (e) {e.remove();}});
  54. //删除body所有一层子孩子有id的div,除了os_player,有一个id随机的div就是手机点击视频会弹窗的元凶
  55. document.querySelectorAll('body > div').forEach(function(div) {
  56. if (div && div.id && "os_player" !== div.id){
  57. div.remove();
  58. //alert(div.id);
  59. }
  60. });
  61. }, 1000);
  62. console.log("dood普通广告清理完毕");
  63. //alert("dood普通广告清理完毕");
  64. }
  65. }
  66.  
  67. //作用:删除sex广告(不影响观看体验的,提升情趣的)
  68. function del_sex_adv(){
  69. if(-1!==window.location.host.indexOf("underhentai")){
  70. var afiEl = document.querySelector("div.afi-lg");
  71. if (afiEl) {
  72. afiEl.remove();
  73. }
  74. if('/watch/'===window.location.pathname){
  75. //删除播放页面上下两个广告框
  76. document.body.querySelectorAll('.visible-xs').forEach(function(e) {if (e) {e.remove();}});
  77. }
  78. }
  79. }
  80.  
  81. //作用:一种思路,获取到url后再替换video,缺点是不能切换源,同时还要识别不同的url,舍去这种思路【舍去】
  82. function get_url_replace_video(){
  83. let url=document.body.innerHTML.match("(https://video.storangeunderh.com/player/.*?)\\\\")[1];
  84. if(!url){
  85. alert("未找到videourl");
  86. console.log("未找到videourl");
  87. }
  88. console.log(url);
  89. url+="?ads=false";
  90.  
  91. //删除所有script
  92. document.body.querySelectorAll('script').forEach(function(e) {if (e) {e.remove();}});
  93. //删除所有iframe
  94. document.body.querySelectorAll('iframe').forEach(function(e) {if (e) {e.remove();}});
  95. //删除视频播放前的弹窗广告
  96. document.querySelectorAll("div#overlay").forEach(function(e) {if (e) {e.remove();}});
  97. //添加新的iframe播放视频
  98. var iframe=document.createElement("iframe");
  99. iframe.scrolling='no';
  100. iframe.frameborder="0";
  101. iframe.allowFullscreen=true;
  102. iframe.src=url;
  103. document.querySelector("#doodstream").appendChild(iframe);
  104. //document.querySelector(".sidebar-dark").append(iframe);
  105. //document.querySelector(".embed-responsive").forEach(function(e) {if (e) {e.remove();}});
  106. }
  107.  
  108. //作用:删除掉视频播放页面中的所有script和iframe,再手动引入播放iframe,可能能加快页面速度,但更可能引起页面异常
  109. function clear_player_script(){
  110. if(-1!==window.location.host.indexOf("underhentai") && '/watch/'===window.location.pathname){
  111. console.log("清除播放界面的广告");
  112. }else{
  113. return;
  114. }
  115. let ret=document.body.innerHTML.match(/\$\(function.*<\/iframe>"\);}\);/);
  116. if(!ret){
  117. alert("未找到视频加载脚本");
  118. console.log("未找到视频加载脚本");
  119. }
  120. let content=ret[0];
  121. content=content.slice(1)+"})();";//去除掉开头的$,因为发现有这玩意函数总是执行不成功,去掉之后用普通jquery方式执行就可以成功执行了,话说为什么啊
  122. console.log(content);
  123.  
  124. //删除所有script
  125. document.body.querySelectorAll('script').forEach(function(e) {if (e) {e.remove();}});
  126. //删除所有iframe
  127. document.body.querySelectorAll('iframe').forEach(function(e) {if (e) {e.remove();}});
  128.  
  129. //先加载jquery,然后执行代码
  130. var jquery=document.createElement("script");
  131. jquery.src="https://code.jquery.com/jquery-latest.min.js";
  132. jquery.onload = function() {
  133. //console.log("start");
  134. // jQuery 加载完成后执行的代码
  135. var script=document.createElement("script");
  136. script.innerHTML=content;
  137. document.body.append(script);
  138. //console.log("end");
  139. };
  140. document.body.append(jquery);
  141. }
  142.  
  143. (function() {
  144. //取消所有 interval
  145. var highestIntervalId = setInterval(";");
  146. for (var i = 0 ; i < highestIntervalId ; i++) {
  147. clearInterval(i);
  148. }
  149. if(settings["del_nomal_adv"]){
  150. setTimeout(del_nomal_adv(), settings["delay"]);
  151. }
  152. if(settings["del_sex_adv"]){
  153. setTimeout(del_sex_adv(), settings["delay"]);
  154. }
  155. if(settings["clear_player_script"]){
  156. //alert("删除播放器广告已执行");
  157. setTimeout(clear_player_script(), settings["delay"]);
  158. }
  159. //alert("可以运行");
  160. })();