netfix

skip presser, mute/hide ads. (red green logo shows script is active)

当前为 2025-05-20 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name netfix
  3. // @version 2.3.9
  4. // @namespace https:\\derben.ca
  5. // @author DerBen
  6. /// @license Public Domain
  7. // @description skip presser, mute/hide ads. (red green logo shows script is active)
  8. // @run-at document-end
  9. // @include https://www.netflix.com/*
  10. // @include https://www.crave.ca/en/tv-shows/*
  11. // @include https://www.youtube.com/watch*
  12. // @grant none
  13. // ==/UserScript==
  14. 'use strict';
  15.  
  16. //console.log('netfix startup');
  17.  
  18. // ** Sometimes these sites unload this script, just press reload **
  19. // no longer have netflix to test. I have crave now
  20.  
  21. // edit these if needed, these sites update frequently.
  22. var admut=1; // mute ads
  23. var adblk=0; // hide ads, experimental
  24. setInterval(looper, 2000); //check interval
  25. var nfb=["skip-recap","skip-intro","continue"]; // netflix buttons
  26. var nf=['ltr-m66rkx','ltr-yo6l9w','ad-count','default-ltr-cache-m66rkx']; // netflix data
  27. var yts=["[aria-label^='No thanks']",'ytp-skip-ad-button','ytp-ad-skip-button','ytp-ad-skip-button-modern','ytp-ad-skip-button-icon-modern','ytp-ad-skip-button-text-centered','ytp-ad-skip-button-text','ytp-skip-ad-button__text']; // youtube skip ad data
  28. var ytm=['ytp-ad-preview-image','ytp-ad-preview-container','ytp-ad-preview-container-detached','ytp-preview-ad__text'] //yt mute ad
  29. //var cr=['bm-view-skipbreaks1',"div[class='skipbreaks-click-area']"]; // old crave skip data
  30. var cr=['button','aria-label','Skip Intro']; // crave skip data
  31.  
  32. // Don't edit below!
  33. var host=location.hostname;
  34. var vt=1,at=1; // video audio toggles
  35. var sk=0,skip=0; //skip timing variables
  36. var texb = document.createElement('div');
  37. texb.id='cgwin';
  38. texb.style.top='0px';
  39. texb.style.left='0px';
  40. texb.style.position='fixed';
  41. texb.style.background='black';
  42. texb.style.border='green 2px solid';
  43. texb.style.borderRadius='25px';
  44. texb.style.font='12px arial';
  45. texb.style.color='grey';
  46. texb.style.zIndex='99999';
  47. texb.innerHTML='netfix';
  48.  
  49.  
  50. function looper(){
  51. //console.log('loop');
  52. var nflogo=document.getElementById('cgwin');
  53. if (typeof(nflogo) === 'undefined' || nflogo==null) {
  54. try { document.body.appendChild(texb); }
  55. catch(error){ console.log('netfix no append');}
  56. } else {
  57. nflogo.style.border= Math.floor(Math.random() * 2) ? 'green 2px solid' : 'red 2px solid';
  58. }
  59.  
  60. if (skip>0) {
  61. skip--; sk=1;
  62. //console.log('skip');
  63. return;
  64. }
  65.  
  66. if (host=='www.crave.ca') { crave(); }
  67. if (host=='www.youtube.com') { youtube(); }
  68. if (host=='www.netflix.com') { netflix(); }
  69. }
  70.  
  71. function clkd(clkhere,typ=0){
  72. event = document.createEvent('HTMLEvents');
  73. event.initEvent('click', true, false);
  74. if (typ==0){
  75. document.querySelector(clkhere).dispatchEvent(event);
  76. } else {
  77. clkhere.dispatchEvent(event);
  78. }
  79. return;
  80. }
  81.  
  82.  
  83. function netflix(){
  84. //console.log('netflix funct');
  85. var mute=0;
  86. for(var i=0;i<nf.length;i++) {
  87. var pin=document.getElementsByClassName(nf[i]);
  88. if (pin.length){ mute=1; }
  89. }
  90.  
  91. if (location.pathname.includes("watch")){
  92. if (mute==1){
  93. if (admut && !at){
  94. document.getElementsByTagName("video")[0].muted=true;
  95. at=1;
  96. }
  97. if (adblk && !vt){
  98. document.getElementsByTagName("video")[0].hidden=true
  99. vt=1;
  100. }
  101. } else {
  102. if (admut && at){
  103. document.getElementsByTagName("video")[0].muted=false;
  104. at=0;
  105. }
  106. if (adblk && vt){
  107. document.getElementsByTagName("video")[0].hidden=false
  108. vt=0;
  109. }
  110. }
  111. }
  112.  
  113. var butt=document.getElementsByTagName('button');
  114. for(var i=0;i<butt.length;i++) {
  115. //console.log(i, butt[i].dataset);
  116. for(var ii=0;ii<nfb.length;ii++) {
  117. var regex = new RegExp(nfb[ii], "g");
  118. //console.log(nf[ii])
  119. if (regex.test(butt[i].dataset.uia)){
  120. skip=5;
  121. }
  122. }
  123. if (skip>=4) {
  124. //console.log('skipping');
  125. clkd(butt[i],2);
  126. break;
  127. }
  128. }
  129. }
  130.  
  131.  
  132. function crave(){
  133. //console.log('crave funct');
  134. /*
  135. var crsk=document.getElementById(cr[0]);
  136. if (typeof(crsk) === 'undefined' || crsk==null) {
  137. //console.log('no vid');
  138. } else {
  139. //console.log('vid'+crsk.style.display);
  140. if (crsk.style.display=='block'){
  141. console.log('CR skip');
  142. clkd(cr[1]);
  143. }
  144. }
  145. */
  146. var crsk=document.getElementsByTagName(cr[0]);
  147. for(var ii=0;ii<crsk.length;ii++) {
  148. //console.log(crsk[ii].ariaLabel);
  149. if (crsk[ii].ariaLabel=="Skip Intro") {
  150. crsk[ii].click();
  151. }
  152. }
  153. }
  154.  
  155. function youtube(){
  156. //console.log('YT check!');
  157. const pop=document.querySelectorAll(yts[0]); // skip popup
  158. if (typeof(pop[0]) !== 'undefined') {
  159. //console.log('YT popped!');
  160. pop[0].click();
  161. }
  162. //console.log('youtube funct');
  163. const vid=document.getElementsByTagName("video");
  164.  
  165. for(var i=0;i<ytm.length;i++) {
  166. var crsk=document.getElementsByClassName(ytm[i]); // mute ad playing
  167. if (typeof(crsk[0]) === 'undefined' || crsk==null) {
  168. //console.log('YT unmuted');
  169. if (admut && vid[0].muted!=false) { vid[0].muted=false; }
  170. } else {
  171. //console.log('YT muted!');
  172. if (admut && vid[0].muted==false) { vid[0].muted=true; }
  173. }
  174. }
  175. for(var i=1;i<yts.length;i++) {
  176. var crsk=document.getElementsByClassName(yts[i]); //skip button shown
  177. console.log('c',crsk[0]);
  178. if (typeof(crsk[0]) === 'undefined' || crsk==null) {
  179. console.log('no skip');
  180. } else {
  181. console.log('YT skip');
  182. clkd(crsk[0],1);
  183. clkd(crsk[0]);
  184. }
  185. }
  186. }

QingJ © 2025

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