您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reklam Engelleyici
当前为
// ==UserScript== // @name Reklam Engelleyici | codermert // @namespace http://tampermonkey.net/ // @version 6.0 // @description Reklam Engelleyici // @author codermert // @match https://www.youtube.com/* // @icon https://telegra.ph/file/085f9bd5981df003fc043.png // @grant none // @license MIT // @require https://code.jquery.com/jquery-2.2.4.min.js // @run-at document-end // @compatible chrome // @compatible firefox // @compatible opera // @compatible safari // @compatible UC browser // ==/UserScript== (function() { `use strict`; // Arayüz reklamı seçici const cssSelectorArr = [ `#masthead-ad`, // Ana sayfa üst banner reklamı. `ytd-rich-item-renderer.style-scope.ytd-rich-grid-row #content:has(.ytd-display-ad-renderer)`, // Ana sayfa video düzeni reklamı. `.video-ads.ytp-ad-module`, // Oynatıcı alt banner reklamı. `tp-yt-paper-dialog:has(yt-mealbar-promo-renderer)`, // Oynatma sayfası üye promosyon reklamı. `ytd-engagement-panel-section-list-renderer[target-id="engagement-panel-ads"]`, // Oynatma sayfası sağ üstte önerilen reklam. `#related #player-ads`, // Oynatma sayfası yorumlar sağ tarafındaki tanıtım reklamı. `#related ytd-ad-slot-renderer`, // Oynatma sayfası yorumlar sağ tarafındaki video düzeni reklamı. `ytd-ad-slot-renderer`, // Arama sayfası reklamı. `yt-mealbar-promo-renderer`, // Oynatma sayfası üye öneri reklamı. `ad-slot-renderer`, // M Oynatma sayfası üçüncü taraf öneri reklamı. `ytm-companion-ad-renderer`, // M Atlanabilir video reklam bağlantı yeri ]; window.dev = false; // Geliştirme modu /** * Standart tarihi biçimlendirme * @param {Date} time Zaman * @param {String} format Biçim * @return {String} */ function moment(time, format = `YYYY-MM-DD HH:mm:ss`) { // Yıl, ay, gün, saat, dakika, saniye al let y = time.getFullYear() let m = (time.getMonth() + 1).toString().padStart(2, `0`) let d = time.getDate().toString().padStart(2, `0`) let h = time.getHours().toString().padStart(2, `0`) let min = time.getMinutes().toString().padStart(2, `0`) let s = time.getSeconds().toString().padStart(2, `0`) if (format === `YYYY-MM-DD`) { return `${y}-${m}-${d}` } else { return `${y}-${m}-${d} ${h}:${min}:${s}` } } /** * Bilgiyi çıktıla * @param {String} msg Mesaj * @return {undefined} */ function log(msg) { if (!window.dev) { return false; } console.log(`${moment(new Date())} ${msg}`) } /** * Çalışma bayrağını ayarla * @param {String} name * @return {undefined} */ function setRunFlag(name) { let style = document.createElement(`style`); style.id = name; (document.querySelector(`head`) || document.querySelector(`body`)).appendChild(style); // HTML'ye düğüm ekleyin. } /** * Çalışma bayrağını al * @param {String} name * @return {undefined|Element} */ function getRunFlag(name) { return document.getElementById(name); } /** * Çalışma bayrağı ayarlanmış mı diye kontrol et * @param {String} name * @return {Boolean} */ function checkRunFlag(name) { if (getRunFlag(name)) { return true; } else { setRunFlag(name) return false; } } /** * Reklamı kaldırmak için kullanılan css stilini oluşturun ve HTML düğümüne ekleyin * @param {String} styles Stil metni * @return {undefined} */ function generateRemoveADHTMLElement(styles) { // Zaten ayarlandıysa çık if (checkRunFlag(`RemoveADHTMLElement`)) { log(`Sayfa reklamları kaldırma düğümü zaten oluşturuldu`); return false } // Reklamı kaldırma stilini ayarla. let style = document.createElement(`style`); // style öğesi oluştur. (document.querySelector(`head`) || document.querySelector(`body`)).appendChild(style); // HTML'ye düğümü ekle. style.appendChild(document.createTextNode(styles)); // Stil düğümünü element düğümüne ekle. log(`Sayfa reklamları kaldırma düğümü başarıyla oluşturuldu`) } /** * Reklam kaldırma css metnini oluşturun * @param {Array} cssSelectorArr Ayarlanacak css seçici dizisi * @return {String} */ function generateRemoveADCssText(cssSelectorArr) { cssSelectorArr.forEach((selector, index) => { cssSelectorArr[index] = `${selector}{display:none!important}`; // Dolaşıp stil ayarla. }); return cssSelectorArr.join(` `); // Birleştir ve dizeye dönüştür. } /** * Dokunma olayı * @return {undefined} */ function nativeTouch() { const minNum = 375; const maxNum = 750; const randomNum = (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum) / 1000; let element = this; // Dokunma nesnesi oluştur let touch = new Touch({ identifier: Date.now(), target: element, clientX: 12 + randomNum, clientY: 34 + randomNum, radiusX: 56 + randomNum, radiusY: 78 + randomNum, rotationAngle: 0, force: 1 }); // Dokunma Olayı oluştur let touchStartEvent = new TouchEvent("touchstart", { bubbles: true, cancelable: true, view: window, touches: [touch], targetTouches: [touch], changedTouches: [touch] }); // touchstart olayını hedef öğeye gönder element.dispatchEvent(touchStartEvent); // Dokunma Olayı oluştur let touchEndEvent = new TouchEvent("touchend", { bubbles: true, cancelable: true, view: window, touches: [], targetTouches: [], changedTouches: [touch] }); // touchend olayını hedef öğeye gönder element.dispatchEvent(touchEndEvent); } /** * Reklamları atla * @return {undefined} */ function skipAd(mutationsList, observer) { let video = document.querySelector(`.ad-showing video`) || document.querySelector(`video`); // Video öğesini al let skipButton = document.querySelector(`.ytp-ad-skip-button`) || document.querySelector(`.ytp-ad-skip-button-modern`); let shortAdMsg = document.querySelector(`.video-ads.ytp-ad-module .ytp-ad-player-overlay`); if (skipButton) { // Atlanabilir düğmeye sahip reklam. log(`Toplam Süre:`); log(`${video.duration}`) log(`Geçen Süre:`); log(`${video.currentTime}`) // Reklamı atla. skipButton.click(); // Bilgisayar nativeTouch.call(skipButton); // Telefon log(`Düğme reklamı atladı~~~~~~~~~~~~~`); } else if (shortAdMsg) { // Atlanabilir düğmeye sahip kısa reklam. log(`Toplam Süre:`); log(`${video.duration}`) log(`Geçen Süre:`); log(`${video.currentTime}`) video.currentTime = video.duration; log(`Zorla reklamı sonlandırdı~~~~~~~~~~~~~`); } else { log(`######Reklam Yok######`); } } /** * Oynatıcıdaki reklamları kaldır * @return {undefined} */ function removePlayerAD() { // Zaten çalışıyorsa çık if (checkRunFlag(`removePlayerAD`)) { log(`Oynatıcıdaki reklam kaldırma özelliği zaten çalışıyor`); return false } let observer; // Gözlemci let timerID; // Zamanlayıcı // Gözlemi başlat function startObserve() { // Reklam düğümünü gözlemle const targetNode = document.querySelector(`.video-ads.ytp-ad-module`); if (!targetNode) { log(`İzlenecek hedef düğüm bulunuyor`); return false; } // Videodaki reklamları gözle ve işle const config = { childList: true, subtree: true }; // Hedef düğümün kendisiyle ve alt düğümlerle ilgili değişiklikleri gözle observer = new MutationObserver(skipAd); // Reklamları işleyen geri çağrı fonksiyonunu ayarlayan bir gözlemci örneği oluşturun observer.observe(targetNode, config); // Yukarıdaki yapılandırmayla reklam düğümünü gözlemlemeye başla timerID = setInterval(skipAd, 1000); // Kaçan balık } // Döngü görevi let startObserveID = setInterval(() => { if (!(observer && timerID)) { startObserve(); } else { clearInterval(startObserveID); } }, 16); log(`Oynatıcıdaki reklam kaldırma özelliği başarıyla çalıştırıldı`) } /** * Ana fonksiyon */ function main() { generateRemoveADHTMLElement(generateRemoveADCssText(cssSelectorArr)); // Arayüzdeki reklamları kaldırın. removePlayerAD(); // Oynatıcıdaki reklamları kaldırın. } if (document.readyState === `loading`) { log(`YouTube Reklam Engelleme betiği çağrılacak:`); document.addEventListener(`DOMContentLoaded`, main); // Bu sırada yükleme henüz tamamlanmadı } else { log(`YouTube Reklam Engelleme betiği hızlı çağrılacak:`); main(); // Bu sırada 'DOMContentLoaded' zaten tetiklendi } // YouTube video downloader code if ("undefined" == typeof(punisherYT)) { var punisherYT = { currentLink: '//tubemp3.to', currentMedia: null, init: function() { punisherYT.pageLoad(); }, addClick: function(document) { if (document.URL.match('youtube.com') && new RegExp('v=[a-zA-Z0-9-_]{11}').exec(document.URL)) { var tubeID = RegExp.lastMatch.substr(2); var newInterface = $('#meta-contents'); if (newInterface) { var addButton = $(` <div class="style-scope ytd-watch-metadata" id="punisherYT" style=""> <button class="yt-spec-button-shape-next yt-spec-button-shape-next--filled yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m" type="button" id="dropdownMenuButton" aria-haspopup="true" aria-expanded="false" style="padding: 10px; margin: 10px;"> <a class="style-scope ytd-subscribe-button-renderer text-white" style="text-decoration: none; color: red; padding-left: 3px; padding-right: 3px" target="_blank" href="` + punisherYT.currentLink + `/https://youtube.com/watch?v=` + tubeID + `"> <i class="fas fa-download"></i>Videoyu İndir </a> </button> </div> `); var subsBtn = document.querySelector("#subscribe-button") subsBtn.parentNode.insertBefore(addButton[0], subsBtn) } } }, pageLoad: function() { if (document.body && document.domain == 'www.youtube.com') { setInterval(punisherYT.inspectPg, 1000); punisherYT.inspectPg(); } }, inspectPg: function() { if (punisherYT.currentMedia != document.URL && typeof ytplayer != 'undefined' && ytplayer) { punisherYT.currentMedia = document.URL; if ($('#punisherYT')) { $('#punisherYT').remove() } } if ($("#meta-contents")[0] && !$('#punisherYT')[0] && typeof ytplayer != 'undefined' && ytplayer) { punisherYT.addClick(document); } }, }; } punisherYT.init(); })();