воскресенье, 23 февраля 2014 г.

Быстро удалить ботов из группы

Плохо, когда в списке подписчиков группы/паблика ВКонтакте много заблокированных аккаунтов - «собачек», это вызывает недоверие пользователей. Собачек надо удалять. Но при количестве подписчиков свыше нескольких тысяч вручную это делать очень долго и утомительно. Все можно автоматизировать - и очень просто:)

Я написал специальный JavaScript код для определения собачек и их автоматического удаления. Код можно выполнить в консоли Chrome Developer, консоли Firebug или - что проще для большинства - просто скопировав его в адресную строку на открытой странице редактирования участников паблика.

Выполняется код некоторое время - его можно запустить и заняться своими делами, после окончания работы нам покажут сообщение со статистикой о количестве собачек в паблике и вопросом, хотим ли мы их автоматически удалить или хотим оставить.



Простейший способ запустить скрипт - открыть страницу редактирования подписчиков паблика и скопировать код в адресную строку, дополнив его в начале текстом javascript:. Таким образом, текст в адресной строке будет выглядеть как-то так: javascript:var timeout = 20; var head = ... . Можно создать закладку с этим кодом и впоследствии вызывать ее быстро со страницы одним кликом.
Код:

var timeout = 20;
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type= 'text/javascript';
script.src= 'https://code.jquery.com/jquery-2.1.0.min.js';
head.appendChild(script);

function checkJQLoaded(){return typeof $ != 'undefined' && $.fn != 'undefined';}
var loadJQ = setInterval(function () {
    timeout--;
    if (checkJQLoaded()) {
      loadAllAccounts();
      clearInterval(loadJQ);
      return;
    }
    else if (timeout > 0) {
      return;
    }
    else {
      alert('Что-то я не могу загрузить JQuery. '
            + 'Попробуйте обновить страницу и сделать всё заново!');
      clearInterval(loadJQ);
    }
}, 100);


var allCnt = 0;
var dogsCnt = 0;
var accountsCnt;

function loadAllAccounts(){
    var initialHeight = 0; var stops = 0;
    accountsCnt = $('div#gedit_users_summary_members').text()
                  .replace(/\D/g, '');
    var sInterval = setInterval(function(){
        if (initialHeight == document.body.clientHeight
            && $('img.gedit_user_img').length+15 > accountsCnt){
             stops++;
             if (stops > 30
                 && $('img.gedit_user_img').length+15 > accountsCnt) {
                   clearInterval(sInterval); go(); return;
             }
         } else {
             stops = 0;
         }
         initialHeight = document.body.clientHeight;
         $('a#gedit_users_more_members').click();
         scrollTo(0, 9999999999);
    }, 100);
}

function go(){
  $('img.gedit_user_img').each(function(){
    var src = $(this).attr('src');
    allCnt++;
    if (src != '/images/deactivated_200.png' && src != '/images/deactivated_100.png')
      $(this).parent().parent().parent().hide();
    else
      dogsCnt++;
    });

    if (confirm('Всего обработано подписчиков: ' + allCnt
        + '; собачек: '
         + dogsCnt + ' (' + (100*dogsCnt/allCnt).toFixed(2) + '%)\n'
         + 'Удаляем собачек?')){
        var dogsArray = $('img[src="/images/deactivated_200.png"],img[src="/images/deactivated_100.png"]');
        var currentDogIndex = 0;
        var dogsInterval = setInterval(
          function(){
            if (!dogsArray[currentDogIndex]){
              clearInterval(dogsInterval);
              return;
            }

            $(dogsArray[currentDogIndex]).parent().parent().parent()
                .find("a.gedit_user_action").last().click();
            currentDogIndex++;
          },
        1000
      );
    }
}

89 комментариев:

  1. Большое спасибо за скрипт, очень помог!

    ОтветитьУдалить
    Ответы
    1. u menya v gruppe ~18 000 uchastnikov, s takim kolichestvom on ne spravlyaetsya :( Prosto nichego ne delaet.

      Proboval na maenkoi gruppe, tam normalno porabotal script, no s bolshimi ne rabotaet. Pochemu ? ( vsyo delal pravilo )

      Удалить
  2. Классно, спасибо!

    ОтветитьУдалить
  3. Шикарно! Спасибо большое! Единственное "но" - за сутки нельзя больше 1000 "собачек" удалить, но это мало кого касается))

    ОтветитьУдалить
  4. Офигенно!! Спасибо, бро!

    ОтветитьУдалить
  5. Отличный скрипт, ещё бы друзей собачек так же бы удалять, не поможете?

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Эмм, не работает..
    Всё сделал как вы описали - иконки подписчиков прокрутились немного вниз и в результате выходит сообщение - "Всего обработано подписчиков: 0, собачек: 0 (NaN%). Удаляем собачек?"

    ОтветитьУдалить
    Ответы
    1. Прошу прощения - не там код вставлял)
      Можете удалить комменты)

      Удалить
  8. Спасибо огромнейшее! Очень помогло!!

    ОтветитьУдалить
  9. Спасибо, очень удобно!

    ОтветитьУдалить
  10. Спасибо! Все действительно работает! Сначала была проблема, не получалось удалять, потом благодаря комментам понял, что надо проделывать данную операцию в управлении группой, а не просто в списке!

    ОтветитьУдалить
    Ответы
    1. Коллеги, помогите с проблемой. почему такое возникает.
      Всего обработано подписчиков: 0, собачек: 0 (NaN%). Удаляем собачек?"

      Удалить
  11. Спасибо, ты гений))) какой красивый код!

    ОтветитьУдалить
    Ответы
    1. Не самый красивый, но на момент написания материала - 100% рабочий:)

      Удалить
  12. Не работает.
    Вариант 1. Вставляете в Maxthon Cloud Browser или в Google Chrome, или в Opera, в разделе группы Управление сообществом – Участники, вместо адреса страницы в адресной строке, перед кодом добавив javascript:, и нажимаете Enter: - скрипт не срабатывает, пытаясь что-то найти в гугле, а в Опере просто выводя белую страницу с каким-то коротким очерком о джаве в верхнем левом углу.
    Вариант 2. Вставляете в Maxthon Cloud Browser или в Google Chrome, или в Opera, в разделе группы Управление сообществом – Участники, после адреса страницы в адресной строке, перед кодом вставив javascript:, и нажимаете Enter: - скрипт не срабатывает, пытаясь что-то найти в гугле, а в Опере просто выводя белую страницу с каким-то коротким очерком о джаве в верхнем левом углу.
    Вариант 3. Вставляете в Maxthon Cloud Browser или в Google Chrome, или в Opera, в разделе группы Управление сообществом – Участники перед адресом страницы в адресной строке, перед кодом вставив javascript:, и нажимаете Enter: - скрипт не срабатывает, пытаясь что-то найти в гугле, а в Опере просто выводя белую страницу с каким-то коротким очерком о джаве в верхнем левом углу.
    Вариант 4. Вставляете в Maxthon Cloud Browser или в Google Chrome, или в Opera, в разделе группы Управление сообществом – Информация, вместо адреса страницы в адресной строке, перед кодом добавив javascript:, и нажимаете Enter: - скрипт не срабатывает, пытаясь что-то найти в гугле, а в Опере просто выводя белую страницу с каким-то коротким очерком о джаве в верхнем левом углу.
    Вариант 5. Вставляете в Maxthon Cloud Browser или в Google Chrome, или в Opera в разделе группы Управление сообществом – Информация после адреса страницы в адресной строке, перед кодом вставив javascript:, и нажимаете Enter: - скрипт не срабатывает, пытаясь что-то найти в гугле, а в Опере просто выводя белую страницу с каким-то коротким очерком о джаве в верхнем левом углу.
    В интеренете не первый день, поэтому касаемо включённых скриптов в браузерах – они были включены. Так же ничего не даёт включение-отключение плагинов. Копирование прям с этой страницы кода или скопировав в блокнот а потом из блокнота в строку адреса – тоже ничего не даёт.

    ОтветитьУдалить
    Ответы
    1. Да, скрипт требует модификации, страница управления подписчиками сейчас изменилась, спасибо друзьям из команды ВК. Поправлю в ближайшее время и выложу подтверждающий видос с инструкцией.

      Удалить
    2. Спасибо, работает. Просто нужно не в адресную строку, а в консоль вводить.

      Удалить
    3. да, в консоли все заработало, правда со второго раза ;)

      Удалить
    4. Делайте всё как в видео в посте - всё работает сейчас

      Удалить
  13. а у меня все работает до сих пор

    ОтветитьУдалить
  14. Спасибо! Одной заботой меньше!

    ОтветитьУдалить
  15. Помогите пожалуйста.Я открыл консоль в хроме и вставил код и нажимаю интер, появляется строчка какая то и ничего не происходит

    ОтветитьУдалить
  16. бесплатно, быстро, удобно!
    сорветую http://vk.com/freekilldogs

    ОтветитьУдалить
  17. Скрипт работает. Большое спасибо. )

    ОтветитьУдалить
  18. u menya v gruppe ~18 000 uchastnikov, s takim kolichestvom on ne spravlyaetsya :( Prosto nichego ne delaet.

    Proboval na maenkoi gruppe, tam normalno porabotal script, no s bolshimi ne rabotaet. Pochemu ? ( vsyo delal pravilo )

    ОтветитьУдалить
  19. В коде нужно переименовать deactivated_100.gif на deactivated_100.png

    ОтветитьУдалить
    Ответы
    1. Спасибо! Сработало

      Удалить
    2. спасибо, таки в этом был затык

      Удалить
  20. скрипт пишет, что ноль собачек, а это не так

    ОтветитьУдалить
  21. Вставляла и в консоль и адресную строку - не находит собак, хотя их 200+. Но общее количество народа вместе с собаками посчитал

    ОтветитьУдалить
  22. Все заработало! Браузер хром соглашается сделать все красиво через консоль ява скрипт, если поменять deactivated_100.gif на deactivated_100.png, как и говорил позапоза...предыдущий оратор!
    Спасибо этому оратору и создателю скрипта!

    ОтветитьУдалить
  23. тоже не работает, код уже изменен на deactivated_100.png

    ОтветитьУдалить
  24. Браузер Firefox... неожиданно зависает и перегружает оперативную память. Чем больше обновлялся браузер, тем хуже работает скрипт, раньше работал как надо.

    ОтветитьУдалить
    Ответы
    1. У Firefox всегда проблемы с оперативкой. Используйте хром для этой задачи хотя бы.

      Удалить
    2. Не вижу смысла только ради этого использовать другой браузер... восстановить Internet Explorer... там есть возможность такое прописать?

      Удалить
  25. 1. в chrome почему то у меня не заработал, запускал в Epic Privacy Browser
    2. в коде нужно поправить пару строчек
    if (src != '/images/deactivated_200.png')
    var dogsArray = $('img[src="/images/deactivated_200.png"]');
    200 нужно поменять на 100 , видимо название картинки изменилось в вк
    Всем удачи :)

    ОтветитьУдалить
  26. Этот комментарий был удален автором.

    ОтветитьУдалить
  27. Пишет Uncaught SyntaxError: Unexpected token ILLEGAL(…)

    ОтветитьУдалить
  28. Просканировал и предложил очистить от собак, но потом тишина. Нет реакции.

    ОтветитьУдалить
  29. Вставил код в адресную строку, сделал как надо, но почему-то у меня не то чтобы начали удаляться участники из группы, а наоборот, их количество растет, я как бы вроде бы и рад, но долго ли это продлиться?) и что происходит вообще?)

    ОтветитьУдалить
  30. Спасибо за информацию. Удалить собачек из группы оказывается так просто http://www.socseti4you.ru/2015/07/kak-udalit-sobachek-iz-gruppy-vkontakte.html

    ОтветитьУдалить
  31. как сделать закладку с кодом?

    ОтветитьУдалить
  32. Хотел сам написать скрипт, потому решил загуглить!
    Спасибо большое! Помогли сберечь время!

    ОтветитьУдалить
  33. Запустил скрипт через вставку кода в адресную строку - всё работает!
    Спасибо огроменное!

    ОтветитьУдалить
  34. работает, спасибо

    ОтветитьУдалить
  35. единственное что смущает что собачку определяет тока по аватару - знаю людей которые считают это оригинальным (

    ОтветитьУдалить
    Ответы
    1. у тех, кто ставит себе такую аватарку - её адрес другой, их скрипт не удалит

      Удалить
    2. вы правы, не подумал об этом )

      Удалить
  36. Спасибо хороший скрипт,а теперь такой вопрос,как удалить из друзей тех которые заблокированы администрацией,короче на аватарке тоже собачка?

    ОтветитьУдалить
    Ответы
    1. Такого скрипта я не писал и времени сейчас на него нет. Если напишу - появится в блоге, в принципе задача такая есть тоже

      Удалить
  37. Спасибо! Все работает!

    ОтветитьУдалить
  38. Автор ты лучший !!!Спасибо большое, нереально помог ! :))
    Буду следить за твоим блогом, узнал по рекомендации о тебе, успехов ! )

    ОтветитьУдалить
  39. А не лучше крутить так, чтоб не было собак? Например тут http://goo.gl/lgZdZy. И при этом бесплатно.

    ОтветитьУдалить
  40. Автору респект.
    Под новый интерфейс вк нет вариации скрипта?

    ОтветитьУдалить
  41. В общем поправил текущий скрипт для новой версии интерфейса.
    Там нужно было поправить класс для фотки и класс для ссылки на удаление

    ОтветитьУдалить
    Ответы
    1. Подскажите, что именно и где нужно изменить?

      Удалить
    2. А пока ответа нету, подскажу, как включить старый дизайн Вконтакте:
      https://vk.com/old_design_vk?w=page-117993286_52503278

      Удалить
    3. Если опять удалят комментарий - пишите в личку vk.com/jx888

      Удалить
    4. Пробую еще раз
      Чтобы адаптировать под новый дизайн вк нужно
      заменить в текущем скрипте
      gedit_user_img
      на
      group_u_photo_img
      Строки 37, 40, 53

      и заменить
      gedit_user_action
      на
      group_u_action

      Удалить
    5. СПАСИБО!!!

      Удалить
  42. var timeout = 20;
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type= 'text/javascript';
    script.src= 'https://code.jquery.com/jquery-2.1.0.min.js';
    head.appendChild(script);

    function checkJQLoaded(){return typeof $ != 'undefined' && $.fn != 'undefined';}
    var loadJQ = setInterval(function () {
    timeout--;
    if (checkJQLoaded()) {
    loadAllAccounts();
    clearInterval(loadJQ);
    return;
    }
    else if (timeout > 0) {
    return;
    }
    else {
    alert('Что-то я не могу загрузить JQuery. '
    + 'Попробуйте обновить страницу и сделать всё заново!');
    clearInterval(loadJQ);
    }
    }, 100);


    var allCnt = 0;
    var dogsCnt = 0;
    var accountsCnt;

    function loadAllAccounts(){
    var initialHeight = 0; var stops = 0;
    accountsCnt = $('div#gedit_users_summary_members').text()
    .replace(/\D/g, '');
    var sInterval = setInterval(function(){
    if (initialHeight == document.body.clientHeight
    && $('img.group_u_photo_img').length+15 > accountsCnt){
    stops++;
    if (stops > 30
    && $('img.group_u_photo_img').length+15 > accountsCnt) {
    clearInterval(sInterval); go(); return;
    }
    } else {
    stops = 0;
    }
    initialHeight = document.body.clientHeight;
    $('a#gedit_users_more_members').click();
    scrollTo(0, 9999999999);
    }, 100);
    }

    function go(){
    $('img.group_u_photo_img').each(function(){
    var src = $(this).attr('src');
    allCnt++;
    if (src != '/images/deactivated_200.png' && src != '/images/deactivated_100.png')
    $(this).parent().parent().parent().hide();
    else
    dogsCnt++;
    });

    if (confirm('Всего обработано подписчиков: ' + allCnt
    + '; собачек: '
    + dogsCnt + ' (' + (100*dogsCnt/allCnt).toFixed(2) + '%)\n'
    + 'Удаляем собачек?')){
    var dogsArray = $('img[src="/images/deactivated_200.png"],img[src="/images/deactivated_100.png"]');
    var currentDogIndex = 0;
    var dogsInterval = setInterval(
    function(){
    if (!dogsArray[currentDogIndex]){
    clearInterval(dogsInterval);
    return;
    }

    $(dogsArray[currentDogIndex]).parent().parent().parent()
    .find("a.group_u_action").last().click();
    currentDogIndex++;
    },
    1000
    );
    }
    }

    ОтветитьУдалить
  43. Круто. Спасибо! Для нового вк работает, а какой скрипт нужен, чтобы удалить всех всех участников? В ЛС если что пожалуйста, очень надо vk.com/kolos156

    ОтветитьУдалить
  44. Работает, хороший скрипт, давно им пользуюсь

    ОтветитьУдалить
  45. Для страницы нет такого скрипта? Чтобы удалить ботов из подписчиков и друзей

    ОтветитьУдалить
  46. Программа для накрутки и раскрутки Вконтакте. Лучше VkBot. http://vto.pe/?ref=1788519

    ОтветитьУдалить
  47. Скрипт больше не пашет!

    ОтветитьУдалить
  48. Молодцы парни.
    Пашет этот
    ------------------------------------

    var timeout = 20;
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://code.jquery.com/jquery-2.1.0.min.js';
    head.appendChild(script);

    function checkJQLoaded() {
    return typeof $ != 'undefined' && $.fn != 'undefined';
    }
    var loadJQ = setInterval(function() {
    timeout--;
    if (checkJQLoaded()) {
    loadAllAccounts();
    clearInterval(loadJQ);
    return;
    } else if (timeout > 0) {
    return;
    } else {
    alert('Что-то я не могу загрузить JQuery. ' +
    'Попробуйте обновить страницу и сделать всё заново!');
    clearInterval(loadJQ);
    }
    }, 100);


    var allCnt = 0;
    var dogsCnt = 0;
    var accountsCnt;

    function loadAllAccounts() {
    var initialHeight = 0;
    var stops = 0;
    accountsCnt = $('div#gedit_users_summary_members').text()
    .replace(/\D/g, '');
    var sInterval = setInterval(function() {
    if (initialHeight == document.body.clientHeight &&
    $('img.group_u_photo_img').length + 15 > accountsCnt) {
    stops++;
    if (stops > 30 &&
    $('img.group_u_photo_img').length + 15 > accountsCnt) {
    clearInterval(sInterval);
    go();
    return;
    }
    } else {
    stops = 0;
    }
    initialHeight = document.body.clientHeight;
    $('a#gedit_users_more_members').click();
    scrollTo(0, 9999999999);
    }, 100);
    }

    function go() {
    $('img.group_u_photo_img').each(function() {
    var src = $(this).attr('src');
    allCnt++;
    if (src != '/images/deactivated_200.png' && src != '/images/deactivated_100.png')
    $(this).parent().parent().parent().hide();
    else
    dogsCnt++;
    });

    if (confirm('Всего обработано подписчиков: ' + allCnt +
    '; собачек: ' +
    dogsCnt + ' (' + (100 * dogsCnt / allCnt).toFixed(2) + '%)\n' +
    'Удаляем собачек?')) {
    var dogsArray = $('img[src="/images/deactivated_200.png"],img[src="/images/deactivated_100.png"]');
    var currentDogIndex = 0;
    var dogsInterval = setInterval(
    function() {
    if (!dogsArray[currentDogIndex]) {
    clearInterval(dogsInterval);
    return;
    }

    $(dogsArray[currentDogIndex]).parent().parent().parent()
    .find("a.group_u_action").last().click();
    currentDogIndex++;
    },
    1000
    );
    }
    }

    ОтветитьУдалить
  49. СПАСИБО, РАБОТАЕТ ВСЕ. а КТО НИБУДЬ ПОДСКАЖЕТ КАК ИЗ ДРУЗЕЙ СОБАЧЕК УБРАТЬ И ОТПИСАТЬ ОТ АККАУНТА?

    ОтветитьУдалить
  50. Народ, а можно так просто всех участников слить с группы? может кто скрипт отредактировать под слив участников?)

    ОтветитьУдалить
  51. Участников (id номера) можно слить к примеру targetHunter-ом

    ОтветитьУдалить
  52. Всем привет.. Ребят, а как это на сайт вставить?Я пробовал, у меня не робит кнопка

    ОтветитьУдалить