Greasy Fork is available in English.
Скрипт не работает и более не поддерживается.
// ==UserScript== // @name Instagram Followers Liker // @name:ru Лайкер для Инстаграма // @version 2.4 // @description Script will like foolowers recursively // @description:ru Скрипт не работает и более не поддерживается. // @author Philins // @match https://www.instagram.com/* // @grant none // @namespace http://instaliker.site/ // ==/UserScript== (function() { var nextcounter = 0; var classfotodiv = 'eLAPa'; var lang = document.getElementsByTagName("html")[0].getAttribute("lang"); var languages = ["en", "ru"]; if(!languages.includes(lang)) lang = "en"; var trans = {"interval": { "en": "Increase if the internet connection is slow. Reduce to accelerate.", "ru": "Увеличьте если страница не успевает загрузиться."}, "limover": { "en": "Limit over.\nWelcome back tomorrow.\nTimezone GMT+0", "ru": "Исчерпан суточный лимит.\nНе рекомендуется его превышать во избежание блокировки.\nВыключите скрипт или увеличьте лимит.\nTimezone GMT+0 по Москве это 3 часа ночи."}, "liked": { "en": "Liked: ", "ru": "Лайков: "}, "time": { "en": "Time: ", "ru": "Время: "}, "today": { "en": "Today: ", "ru": "Сегодня: "}, "limtip": { "en": "Set here daily limit.", "ru": "Скрипт не налайкает в сутки больше чем указано."}, "dailylim": { "en": "Daily limit: ", "ru": "Ограничение в сутки: "}, "skipover": { "en": "likes more than ", "ru": "лайков больше"}, "skiptip": { "en": "Will be skipped if the likes enough.", "ru": "Фотография будет пропущена, если лайков больше чем указано. Также и с просмотрами у видео."}, "badtags": { "en": "Bad tags: ", "ru": "Игнорируются: "}, "taglist": { "en": "#watch #bikini", "ru": "#бузова #бикини #турагентство #часы #подарок #дом2 #bikini #вналичии #купить #подзаказ #обувь #шоппинг #доставка #бесплатно #магазин #заказ #раскрутка #клиенты #ца #целевая #продвижение #накрутка #подписчики #живыеподписчики"}, "listtip": { "en": "Will be skipped if these hashtags was found.", "ru": "При обнаружении хештега или стоп-слова из этого списка, лайк не поставится. Список разделять пробелами."}, "manytag": { "en": "hashtags more than ", "ru": "тегов больше "}, "manytagtip": { "en": "Will be skipped if hashtags more than...", "ru": "Не ставим лайки любителям тегов."}, "rate": { "en": "following/followers more than ", "ru": "подписок/подписчиков больше "}, "ratetip": { "en": "If there are 5 times more following than followers, it's probably a spam account.", "ru": "Если подписок в 5 раз больше чем подписчиков, вероятно это спам-аккаунт."}, "rate2": { "en": "followers/following more than ", "ru": "подписчиков/подписок больше "}, "rate2tip": { "en": "If there are 5 times more followers than following, it's probably a spam account.", "ru": "Если подписчиков в 5 раз больше чем подписок, вероятно это спам-аккаунт."}, "manyfoto": { "en": "Deep of feed ", "ru": "Глубина просмотра "}, "manyfototip": { "en": "How many photos to watch? ", "ru": "Сколько последних фоток просматривать? "}, "manylikeper": { "en": "Likes per accaunt ", "ru": "Лайков на аккаунт "}, "manylikepertip": { "en": "How many likes per accaunt? ", "ru": "Сколько лайков ставить на один аккаунт? "}, "fol1": { "en": "Followers", "ru": "Подписчики"}, "fol2": { "en": "Following", "ru": "Подписки"}, "foltip": { "en": "Who to follow? Followers or Following.", "ru": "За кем следовать, подписчиками или подписками? "}, "skipif": { "en": "Skip if", "ru": "Пропускать, если"}, "stop": { "en": "STOP! Followers not found. Or you are not logged in.", "ru": "Скрипт остановлен. Подписчики не найдены. \nВы должны войти в Instagram."}, "notlogged": { "en": "You are not logged in.", "ru": "Вы должны войти в Instagram."}, "clearque": { "en": "Clear queue. ", "ru": "Очистить очередь. "}, "activate": { "en": "The code is activated. ", "ru": "Код активирован.. "}, "howsave": { "en": "How to save settings?", "ru": "Как сохранить настройки?"}, "save": { "en": "Saved.", "ru": "Сохранено."}, "intrvl": { "en": "Period, in sec.", "ru": "Период, в сек."}, }; var statbox; var stattext =localStorage.stattext; var area; var k_tek; var timerId; var counter = 0; var firststep = true; var start_time_milliseconds = new Date().getTime(); var followers = localStorage.getItem('followers'); followers = (followers !== null ? JSON.parse(followers) : []); if(!inIframe()){ var settings = localStorage.getItem('settings'); settings = (settings!==null ? JSON.parse(settings) : {'daylimit': 500, 'likelimit': 100, 'taglimit': 20, 'fotolimit': 10, 'setlike': 8, 'fol': 1, 'sb': false, 'interval': 5, 'rate': 5, 'rate2': 5}); if(!settings.rate)settings.rate=5; if(!settings.rate2)settings.rate2=5; var skiplist = (localStorage.skiplist!==undefined ? localStorage.skiplist : trans.taglist[lang]); var info = document.createElement("DIV"); statbox = document.createElement("DIV"); info.appendChild(statbox); info.style.cssText = 'position:fixed;width:160px;z-index:100;background:#DDD;top: 10px;opacity: 0.9;left: 10px;padding:4px;'; document.body.appendChild(info); timerId = setInterval(takt, 1000*settings.interval); } function takt(){ var path = window.location.pathname; statbox.innerHTML = stattext; var info = document.getElementById('settings'); var current_time_milliseconds = new Date().getTime(); var thisday = "d" + Math.floor(current_time_milliseconds / 86400000).toString(); var daystat = new Object(); if(localStorage.daystat !== undefined){ daystat = JSON.parse(localStorage.daystat); }else{ daystat[thisday] = 0; localStorage.daystat = JSON.stringify(daystat); } if(window._sharedData && window._sharedData.config.viewer==null){ stattext = trans.notlogged[lang]; statbox.innerHTML = stattext; localStorage.stattext = stattext; return false; } if(path=='/' && !info){ // Показываю настройки firststep = true; Settings(); return false; } if(path!='/' && info){ // Скрываю настройки info.remove(); } var partpath = path.split('/'); if(partpath[1]=='p'){ // Лайки var daylicounter = daystat[thisday]; var dc = (daylicounter!==undefined ? daylicounter : 0); if(dc >= parseInt(settings.daylimit)) { clearInterval(timerId); alert(trans.limover[lang]); return false; } if(DoubleLikes()){ Finish(); return false; } if(LikeReady()){ // Лайкаю dc++; daystat[thisday] = dc; localStorage.daystat = JSON.stringify(daystat); console.log('Daily: ' + dc); Like(); stattext = trans.liked[lang] + counter + '<br>' + trans.today[lang] + dc; }else{// Листаю дальше stattext = trans.today[lang] + dc; localStorage.stattext = stattext; if(nextcounter < settings.fotolimit - 1){ ListNext(); }else{ Finish(); } } }else if(partpath[1]=='explore' && partpath[2]=='tags'){ // Иду по тегам var fotot = document.getElementsByClassName(classfotodiv); if(fotot.length > 0){ fotot[9].parentNode.click(); }else{ Finish(0,'Foto not found'); } }else if(partpath[1]=='AlskDJfhG'){ settings.sb = true; localStorage.setItem('settings', JSON.stringify(settings)); stattext = trans.activate[lang]; statbox.innerHTML = stattext; localStorage.stattext = stattext; Finish(1); }else if(partpath[2]=='followers' || partpath[2]=='following'){ // Собираю пользователей в очередь var d = document.getElementsByTagName('DIV'); for(var g = 0; g < d.length; g++){ if(d[g].hasAttribute("role") && d[g].getAttribute("role") == 'dialog'){ var a = d[g].getElementsByTagName('A'); for(var k = 0; k < a.length; k++){ if(a[k].hasAttribute("title")){ var ah = a[k].getAttribute("href"); followers.push(ah); } } d[g].getElementsByTagName('BUTTON')[0].click(); } } }else if(partpath[1]!='' && firststep){ FindFollowersRate(); var folink = FindFollowersLink(); if(folink){ firststep = false; folink.click(); }else{ Finish(); } }else if(!firststep){ var foto = document.getElementsByClassName(classfotodiv); if(foto.length > 0){ foto[0].parentNode.click(); }else{ Finish(0,'Foto not found'); } } statbox.innerHTML = stattext; } function findHeart(){ var section = document.getElementsByTagName("section"); for(var k = 1; k < section.length; k++){ var span = section[k].getElementsByTagName("span"); for(var j = 0; j < span.length; j++){ var c = span[j].classList.value; if(c.indexOf("SpriteHeart")>0){ k_tek=k+1; return span[j].parentNode; } } } return false; } function findLiked(){ findHeart(); var section = document.getElementsByTagName("section"); var span = section[k_tek].getElementsByTagName("span"); for(var j = 0; j < span.length; j++){ if (parseInt(span[j].innerText) > 0) { return span[j].innerText.replace(/ /g, ""); } } return false; } function Like(){ var button = findHeart(); if(button){ button.click(); console.log('Like'); counter++; return true; } } function ListNext(){ if(counter>settings.setlike) Finish(); var buttons = document.getElementsByClassName("coreSpriteRightPaginationArrow"); if (buttons.length > 0) { nextcounter++; buttons[0].click(); }else{ Finish(); } } function CheckHeart(){ var h = findHeart(); var c = h.firstElementChild.classList.value; if(c.search("red")>0){ return false; } var x = findLiked(); if(x >= parseInt(settings.likelimit)){ console.log('Not liked, too many likes'); return false; } return true; } function DoubleLikes(){ var x = findLiked(); if(x >= 2*parseInt(settings.likelimit)){ console.log('Next user, too many likes'); return true; } return false; } function CheckTags(){ var re = /\s+/; var skiparr = skiplist.split(re); var comdiv = document.getElementsByClassName("EtaWk"); if(comdiv.length > 0){ var comments = comdiv[0].innerText.toLowerCase(); //console.log(comments); if((comments.match(/#/g) || []).length > settings.taglimit){ console.log('Not liked, too many tags'); return false; }else{ for(var i = 0; i < skiparr.length; i++){ if(skiparr[i].length > 0){ var j = comments.indexOf(skiparr[i]); if(j!==-1){ console.log('Not liked, bad tag'); return false; } } } } } return true; } function LikeReady(){ if(CheckHeart() && CheckTags()){ return true; } return false; } function Finish(id=0, text='Finish'){ // id // 1 Превышен суточный лимит. console.log(text); var follower; var newurl; var usedfollowers = localStorage.getItem('usedfollowers'); usedfollowers = (usedfollowers!==null ? JSON.parse(usedfollowers) : []); do{ follower = followers.shift(); }while(usedfollowers.includes(follower)); usedfollowers.push(follower); localStorage.setItem('usedfollowers', JSON.stringify(usedfollowers)); localStorage.setItem('followers', JSON.stringify(followers)); if(follower){ newurl = window.location.protocol + '//' + window.location.hostname + follower; if(id==1) newurl = window.location.protocol + '//' + window.location.hostname; window.location = newurl; }else{ alert(trans.stop[lang]); } } function FindFollowersRate(){ var folink = document.getElementsByClassName('-nal3'); if(folink.length > 0){ if(folink[2].getElementsByTagName("span")[0].innerText.replace( /\s/g, "" )/folink[1].getElementsByTagName("span")[0].innerText.replace( /\s/g, "" )>settings.rate){ Finish(0, "Bad rating."); }else{ console.log("Good rating."); } if(folink[1].getElementsByTagName("span")[0].innerText.replace( /\s/g, "" )/folink[2].getElementsByTagName("span")[0].innerText.replace( /\s/g, "" )>settings.rate2){ Finish(0, "Bad rating 2."); }else{ console.log("Good rating 2."); } } } function FindFollowersLink(){ var folink = document.getElementsByClassName('-nal3'); if(folink.length > 0){ if(folink[settings.fol].nodeName == 'A'){ return folink[settings.fol]; }else{ return false; } }else{ console.log('Followers link not found'); return false; } } function cell1(textnode){ var label = document.createElement("LABEL"); var text = document.createTextNode(textnode); label.appendChild(text); var d = document.createElement("DIV"); d.className = 'cell'; d.appendChild(label); return d } function cell2(data, tip, name){ var input = document.createElement("INPUT"); input.setAttribute("type", "text"); input.id = name; input.value = data; input.style.cssText = 'width:40px;'; var d = document.createElement("DIV"); d.className = 'cell'; d.setAttribute("data-tip", tip); d.appendChild(input); return d } function Settings(){ var style = document.createElement('style'); style.innerHTML = "[data-tip] { position:relative;}[data-tip]:before { content:''; /* hides the tooltip when not hovered */ display:none; content:''; display:none; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 5px solid #1a1a1a; position:absolute; top:30px; left:35px; z-index:8; font-size:0; line-height:0; width:0; height:0; position:absolute; top:30px; left:35px; z-index:8; font-size:0; line-height:0; width:0; height:0;}[data-tip]:after { display:none; content:attr(data-tip); position:absolute; top:35px; left:0px; padding:5px 8px; background:#1a1a1a; color:#fff; z-index:9; font-size: 0.75em; height:18px; line-height:18px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; white-space:nowrap; word-wrap:normal;}[data-tip]:hover:before,[data-tip]:hover:after { display:block;} .table {display: table; padding: 10px;} .row {display: table-row;} .cell {display: table-cell;}"; document.body.appendChild(style); var info = document.createElement("DIV"); info.setAttribute('id', 'settings'); //statbox = document.createElement("DIV"); //info.appendChild(statbox); var dt = document.createElement("DIV"); dt.className = 'table'; var d1 = document.createElement("DIV"); d1.className = 'row'; d1.appendChild(cell1(trans.dailylim[lang])); d1.appendChild(cell2(settings.daylimit, trans.limtip[lang], 'input1')); dt.appendChild(d1); var text12 = document.createTextNode(trans.skipif[lang]); dt.appendChild(text12); var d2 = document.createElement("DIV"); d2.className = 'row'; d2.appendChild(cell1("• "+trans.skipover[lang])); d2.appendChild(cell2(settings.likelimit, trans.skiptip[lang], 'input2')); dt.appendChild(d2); var d3 = document.createElement("DIV"); d3.className = 'row'; d3.appendChild(cell1("• "+trans.manytag[lang])); d3.appendChild(cell2(settings.taglimit, trans.manytagtip[lang], 'input3')); //dt.appendChild(d3); var d31 = document.createElement("DIV"); d31.className = 'row'; d31.appendChild(cell1("• "+trans.rate[lang])); d31.appendChild(cell2(settings.rate, trans.ratetip[lang], 'input31')); var d32 = document.createElement("DIV"); d32.className = 'row'; d32.appendChild(cell1("• "+trans.rate2[lang])); d32.appendChild(cell2(settings.rate2, trans.rate2tip[lang], 'input32')); //dt.appendChild(d3); var d4 = document.createElement("DIV"); d4.className = 'row'; d4.appendChild(cell1(trans.manyfoto[lang])); d4.appendChild(cell2(settings.fotolimit, trans.manyfototip[lang], 'input4')); //dt.appendChild(d4); var d5 = document.createElement("DIV"); d5.className = 'row'; d5.appendChild(cell1(trans.manylikeper[lang])); d5.appendChild(cell2(settings.setlike, trans.manylikepertip[lang], 'input5')); //dt.appendChild(d5); var d8 = document.createElement("DIV"); d8.className = 'row'; d8.appendChild(cell1(trans.intrvl[lang])); d8.appendChild(cell2(settings.interval, trans.interval[lang], 'input8')); var d6 = document.createElement("DIV"); d6.className = 'table'; var input61 = document.createElement("INPUT"); var text61 = document.createTextNode(trans.fol1[lang]); input61.type = 'radio'; input61.name = 'radio'; input61.value = 1; if(settings.fol == 1) input61.checked = true; var input62 = document.createElement("INPUT"); var text62 = document.createTextNode(trans.fol2[lang]); input62.type = 'radio'; input62.name = 'radio'; input62.value = 2; if(settings.fol == 2) input62.checked = true; var d61 = document.createElement("DIV"); d61.style.display = 'table-cell'; var d62 = document.createElement("DIV"); d62.style.display = 'table-cell'; d61.appendChild(input61); d61.appendChild(text61); d62.appendChild(input62); d62.appendChild(text62); d6.setAttribute("data-tip", trans.foltip[lang]); d6.appendChild(d61); d6.appendChild(d62); dt.appendChild(d3); dt.appendChild(d31); dt.appendChild(d32); dt.appendChild(d4); dt.appendChild(d5); dt.appendChild(d8); info.appendChild(dt); info.appendChild(d6); info.appendChild(document.createTextNode(trans.badtags[lang])); var d7 = document.createElement("DIV"); d7.setAttribute("data-tip", trans.listtip[lang]); area = document.createElement("TEXTAREA"); area.value = skiplist; area.style.cssText = 'width: 97%; height: 100%;'; d7.style.cssText = 'height: 100px;'; d7.appendChild(area); info.appendChild(d7); if(settings.sb){ var input8 = document.createElement("INPUT"); input8.type = 'button'; input8.value = 'Save'; input8.addEventListener('click', function() { Save(document.getElementById("input1").value, document.getElementById("input2").value, document.getElementById("input3").value, document.getElementById("input4").value, document.getElementById("input5").value, area.value, input61.checked, settings.sb, document.getElementById("input8").value, document.getElementById("input31").value, document.getElementById("input32").value); }, false); info.appendChild(input8); }else{ var a8 = document.createElement("A"); a8. setAttribute('href', 'http://instaliker.site/'); a8. setAttribute('target', '_blank'); a8.innerHTML = trans.howsave[lang]; info.appendChild(a8); } if(followers){ var input10 = document.createElement("INPUT"); input10.type = 'button'; input10.value = trans.clearque[lang] + followers.length; input10.addEventListener('click', function() { Clear(input10); }, false); info.appendChild(input10); } info.style.cssText = 'position:fixed;width:360px;z-index:100;background:#DDD;top: 77px;opacity: 0.9;left: 10px;padding:4px;'; document.body.appendChild(info); } function Save(dl, ll, tl, fl, sl, skiplist, radio, sb, interval, rate, rate2){ var rb = (radio) ? 1 : 2; settings = {'daylimit' : dl, 'likelimit' : ll, 'taglimit' : tl, 'fotolimit' : fl, 'setlike': sl, 'fol': rb, 'sb': sb, 'interval': interval, 'rate': rate, 'rate2': rate2}; localStorage.setItem('settings', JSON.stringify(settings)); localStorage.setItem('skiplist', skiplist); stattext = trans.save[lang]; statbox.innerHTML = stattext; localStorage.stattext = stattext; var username = window._sharedData.config.viewer.username } function Clear(e){ localStorage.removeItem("followers"); e.style.display='none'; } function millisecondsToStr (milliseconds) { // TIP: to find current time in milliseconds, use: // var current_time_milliseconds = new Date().getTime(); function numberEnding (number) { return (number > 1) ? 's' : ''; } var temp = Math.floor(milliseconds / 1000); var years = Math.floor(temp / 31536000); if (years) { return years + ' year' + numberEnding(years); } //TODO: Months! Maybe weeks? var days = Math.floor((temp %= 31536000) / 86400); if (days) { return days + ' day' + numberEnding(days); } var hours = Math.floor((temp %= 86400) / 3600); if (hours) { return hours + ' hour' + numberEnding(hours); } var minutes = Math.floor((temp %= 3600) / 60); if (minutes) { return minutes + ' minute' + numberEnding(minutes); } var seconds = temp % 60; if (seconds) { return seconds + ' second' + numberEnding(seconds); } return 'less than a second'; } function inIframe () { try { return window.self !== window.top; } catch (e) { return true; } } })();