NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name vk.com clear ads posts/walls // @namespace http://tampermonkey.net/ // @version 0.32 // @description clear ads in vk posts/walls // @author Konstantin Chuyasov // @match https://vk.com/* // @icon https://www.google.com/s2/favicons?domain=vk.com // @updateURL https://openuserjs.org/meta/acedece14/vk.com_clear_ads_postswalls.meta.js // @downloadURL https://openuserjs.org/install/acedece14/vk.com_clear_ads_postswalls.user.js // @require http://userscripts-mirror.org/scripts/source/107941.user.js // @copyright 2021, acedece14 (https://openuserjs.org/users/acedece14) // @license MIT // ==/UserScript== function main() { var myStorage = window.localStorage; var adsStrings; var lastPostId = ''; var tmp = myStorage.getItem('vk_ads'); if (tmp == null) { adsStrings = ['МногоКартин', 'Идея подарка для девушки', 'prfl.me', 'ВСЕМУ ОБУЧУ ЛИЧНО', 'topzaimtim', 'Такие ТикТоки тебе должны понравиться', 'сочный контент должен тебе понравиться', 'club190259968', 'evil_crol', ' Алексей Ковинов', 'botzaimovs', 'видосы по ссылке в источнике', 'доступен для ВИП участников группы', 'Ищу сайтоделов' ]; } else adsStrings = JSON.parse(tmp); var showAdEditorButton = document.createElement("div"); showAdEditorButton.innerHTML = '<a class="left_row left_label inl_bl" style="color:#ab2"> <span id="spanAds">Ad editor</span></a>'; showAdEditorButton.addEventListener("click", createSettingsDiv, false); var clearButton = document.createElement("div"); clearButton.innerHTML = '<a id="clearAdsButton" class="left_row left_label inl_bl" style="color:#aa3"> <span>Remove ad</span></a>'; clearButton.addEventListener("click", clearAdsClick, false); var clearPostsButton = document.createElement("div"); clearPostsButton.innerHTML = '<a id="clearAdsButton" class="left_row left_label inl_bl" style="color:#aa5"> <span>Clear feed posts</span></a>'; clearPostsButton.addEventListener("click", clearOldPosts, false); var clearPostsCbBtn = document.createElement("div"); clearPostsButton.innerHTML = '<a id="clearPostsButton" class="left_row left_label inl_bl" style="color:#aa5"> <span id="spanClear">Clear posts SEL</span></a>'; clearPostsButton.addEventListener("click", clearPostsByCb, false); var skipVideoAdBtn = document.createElement("div"); skipVideoAdBtn.innerHTML = '<a id="skipVideoAdBtn" class="left_row left_label inl_bl" style="color:#aa5"> <span id="spanClear">Skip video ad</span></a>'; skipVideoAdBtn.addEventListener("click", skipVideoAd, false); var leftNavbar = document.querySelector('#l_doc'); leftNavbar.parentNode.insertBefore(clearPostsButton, leftNavbar.nextSibling); leftNavbar.parentNode.insertBefore(showAdEditorButton, leftNavbar.nextSibling); leftNavbar.parentNode.insertBefore(clearButton, leftNavbar.nextSibling); leftNavbar.parentNode.insertBefore(clearPostsCbBtn, leftNavbar.nextSibling); //leftNavbar.parentNode.insertBefore(skipVideoAdBtn, leftNavbar.nextSibling); var spanAds = document.querySelector('#spanAds'); var adsCount = 0; function skipVideoAd() { // var video = document.getElementsByTagName('video')[0]; // video.controls = true; //video.seeking = true; // video.currentTime = video.duration / 2 - 1; } function saveNewAdList() { adsStrings = []; var text = document.getElementById("adList").value; var splitted = text.split('\n'); splitted.forEach(s => { if (s.length > 0) adsStrings.push(s); }); adsStrings = adsStrings.sort(); var myStorage = window.localStorage; localStorage.removeItem('vk_ads'); localStorage.setItem('vk_ads', JSON.stringify(adsStrings)); var adRemover = document.querySelector('.adRemover'); adRemover.style.display = "none"; } var selectedText = ""; $("body").mouseup(function () { if (window.getSelection().toString() == "") { return; } selectedText = window.getSelection().toString(); if (selectedText.length > 15) { selectedText = selectedText.slice(0, 15); } var span = document.querySelector('#spanClear'); span.innerHTML = "Posts clear: " + selectedText; }); function clearPostsByCb() { if (selectedText.toString() == "") { return; } var posts = document.querySelectorAll('.feed_row'); var stop = false; posts.forEach(row => { if (row.innerHTML.includes(selectedText)) stop = true; }); if (!stop) { alert('not found'); return; } stop = false; posts.forEach(row => { //if (row.innerHTML.includes(text)) {break;}; //if (row.innerHTML.includes(text)) {return;}; if (row.innerHTML.includes(selectedText)) stop = true; if (!stop) row.parentElement.removeChild(row); }); window.scrollTo(0, 0); //var nextNewsBtn = document.querySelector('#show_more_link'); //if (nextNewsBtn != null) nextNewsBtn.click(); /*navigator.clipboard.readText() .then(text => { var posts = document.querySelectorAll('.feed_row'); var stop = false; posts.forEach(row => { //if (row.innerHTML.includes(text)) {break;}; //if (row.innerHTML.includes(text)) {return;}; if (row.innerHTML.includes(text)) stop = true; if (!stop) row.parentElement.removeChild(row); }); var nextNewsBtn = document.querySelector('#show_more_link'); if (nextNewsBtn != null) nextNewsBtn.click(); }).catch(err => { console.log('Something went wrong', err); }) */ } function createSettingsDiv() { var newDiv = document.createElement("div"); newDiv.style.width = 'auto'; newDiv.style.height = 'auto'; newDiv.style.padding = '4px'; newDiv.style.margin = '4px'; newDiv.innerHTML = "<textarea id='adList'></textarea rows='41' cols='50'><br><button id=btnSaveAdList>Save zis crap</button>"; newDiv.classList.add("adRemover"); leftNavbar.parentNode.insertBefore(newDiv, leftNavbar.nextSibling); adsStrings.forEach(s => { document.getElementById("adList").value += s + '\n'; }); var btnSaveAdList = document.querySelector('#btnSaveAdList'); btnSaveAdList.addEventListener("click", saveNewAdList, false); var adList = document.querySelector("#adList"); //adList.style.width = "400px"; adList.style.width = "280px"; adList.style.height = "230px"; adList.style.scrollBehavior = "smooth"; adList.style.top = "50px"; //adList.style.left = "0px"; //adList.style.resize = ''; adList.style.position = "fixed"; adList.style.display = "block"; } function isAd(text) { for (var i = 0; i < adsStrings.length; i++) { var tmp = adsStrings[i]; if (text.toLowerCase().includes(tmp.toLowerCase())) return true; } return false; } function clearParentBySelector(selector) { var elements = document.querySelectorAll('.wall_marked_as_ads'); elements.forEach(m => { m.parentElement.parentElement.style = "display: none;"; m.parentElement.parentElement.parentElement.innerHTML = "ebanaya reklama vk"; m.classList.remove(selector.substring(1)); adsCount++; spanAds.innerHTML = 'Remove ads (' + adsCount + ')'; }); } function elementInViewport2(el) { var top = el.offsetTop; var left = el.offsetLeft; var width = el.offsetWidth; var height = el.offsetHeight; while (el.offsetParent) { el = el.offsetParent; top += el.offsetTop; left += el.offsetLeft; } return ( top < (window.pageYOffset + window.innerHeight) && left < (window.pageXOffset + window.innerWidth) && (top + height) > window.pageYOffset && (left + width) > window.pageXOffset ); } function clearOldPosts() { var posts = document.querySelectorAll('.feed_row'); if (posts != null) { console.log('posts in feed: ' + posts.length); if (posts.length > 25) { var postToScroll = posts[27]; while (posts.length > 20) { posts = document.querySelectorAll('.feed_row'); console.log('try remove post'); var node = posts[0]; if (node.parentNode) { node.parentNode.removeChild(node); } } postToScroll.scrollIntoView(); } } var msgs = document.querySelectorAll('.im-mess-stack._im_mess_stack '); if (msgs != null && msgs.length > 25) { console.log(msgs.length); while (msgs.length > 25) { msgs = document.querySelectorAll('.im-mess-stack._im_mess_stack '); var nodeMsgs = msgs[0]; if (nodeMsgs.parentNode) { nodeMsgs.parentNode.removeChild(nodeMsgs); } } } //*/ } function clearStorage() { var values = []; var keys = Object.keys(localStorage); var i = keys.length; while (i--) { var key = keys[i]; var item = localStorage.getItem(key); if (item.includes('vk.com/sticker')) { localStorage.removeItem(key); } //console.log(":: " + key + " : " + item.length); } } function clearAdsClick() { console.log('[MyVkAdFucker] clearAdsClick'); clearStorage(); var elsTg = document.querySelectorAll('.reply_text'); elsTg.forEach(e => { if (e.textContent.includes('https://t.me/') || e.textContent.includes('https://vk.cc/')) { var txtAd = e.textContent; e.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML = 'reklama govna tg ' + txtAd; } }); var posts = document.querySelectorAll('div._post > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)'); posts.forEach(p => { if (isAd(p.textContent) == true) { p.parentElement.parentElement.style = "display: none;"; p.parentElement.parentElement.parentElement.innerHTML = "ebanaya reklama govna filtered by list: (" + p.textContent + ")"; adsCount++; spanAds.innerHTML = 'Remove ads (' + adsCount + ')'; } }); var css = 'span.PostHeaderSubtitle__item'; var els = document.querySelectorAll(css); els.forEach(e => { if (e.innerHTML == 'Реклама в сообществе') { e.parentElement.parentElement.parentElement.parentElement.remove(e); }; }); }; clearAdsClick(); //var lastCount = -1; function timerAction() { //var count = document.querySelectorAll('div._post > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)').length; if (window.location.href.indexOf("feed") != -1) { document.querySelector('.LegalRecommendationsLinkLeftMenuAuthorized__link').innerText = (Math.floor(Math.random() * 100) + 1); //var allPosts = document.getElementById('feed_rows').getElementsByTagName('div'); //var postId = document.getElementById('feed_rows').getElementsByTagName('div')[allPosts.length-1].getElementsByTagName('div')[0].id; var allPosts = document.querySelectorAll('div._feed_rows > .feed_row > div'); var postId = allPosts[allPosts.length - 1].id; //var myPageBtn = document.querySelector('#l_pr > a:nth-child(1) > span:nth-child(2)'); if (lastPostId != postId) { //if (lastCount != count) { //(document.getElementById('clearAdsButton')).click(); clearAdsClick(); lastPostId = postId; //lastCount = count; } } } timerAction(); let timerId = setInterval(() => timerAction(), 10000); // try collapse all big comment threads if (document.querySelector('#wall_rmenu') != null) { document.querySelectorAll('.replies_deep_collapse').forEach(e => e.click()) } console.log('[ACDC] clear ad script started') } (function () { 'use strict'; setTimeout(() => main(), 2000); })();