Cразу оговорюсь. Скрипт не полностью автоматический, удаляет сообщения только с текущей страницы стены. Связано это с тем, что написан на коленке в 5 утра, с другой стороны с тем, что я не придумал как перезагружать страницу так, чтобы скрипт оставался в памяти браузера (поэтому если у кого-то есть идеи прошу отписаться во благо всех нас, Великого Павла Дурова и Господа Нашего Б-га, аминь).
С другой стороны, так за 2 минуты можно очистить больше сотни сообщений – а что еще нужно? У меня за 3 года накопилось всего 500, а удаление заняло минут 5 (всплакнул крупной суровой мужской слезой).
Скрипт лучше рассматривать как тренировку JavaScript для программистов и баттхерт для простых пользователей (почему – смотри ниже). Поэтому если ты, дорогой читатель, «простой пользователь», немного пошевелить разными там химикалиями в мозгах все же придется (можно сразу смотреть «Часть 3″).
Часть 1. Обратите внимание на кавычки! При перепечатке в блог они «поехали», нужно подправить вручную. Начну с обзора того, что мы будем делать. Стена ВКонтакте располагается по адресу vkontakte.ru/wall.php. Если мы заглянем в код страницы и посмотрим на ссылку удаления, то увидим следующее:
<a href=»» onclick=»(deletePost(…));return false;»>Удалить</a>
То есть совершенно недвусмысленно понятно, что у ВКонтакта есть функция deletePost, которая и применяется. Например, все скрипты, которые я смог нагуглить применяли давно устаревший API, из-за чего и не работали.
Мы знаем, что в JavaScript любой код можно исполнить с помощью функции eval(). Например код:
eval («alert (‘a’)»);
выдаст нам окошко с сообщением «а». То есть функции eval мы передаем строку, которую она выполняет как если бы такой же javascript был написан в сценарии
Кроме того, нужно не забывать, что работать скрипт должен по таймеру. Сервер просто не успеет обработать 20 запросов (а именно столько сообщений на одной странице) за секунду и просто напросто не ничего удалит. И хорошо, если еще и бан не получим.
В остальном, в общем-то, всё. Единственное, пожалуй, из не-технического: желательно выводить предупреждение, чтобы случайно не удалить сообщения. Пусть даже и с одной страницы.
Часть 2. Теперь сам скрипт и как он работает.
var i = 0 , step_t; function Step(){ var myregexp = /<a onclick="(deletePost\(.+\));return false;">Удалить<\/a>/g; var match = myregexp.exec(document.body.innerHTML); if(match != null){ eval (match[1]); i = i + 1; } if (i >= 20){ clearInterval (step_t); } } if (confirm('Удалить все сообщения со стены?') == true){ step_t = setInterval("Step()", 500); }
Скрипт очень маленький, очень простой и понятный. С другой стороны на его примере можно узнать как использовать регулярные выражения и таймеры.
При старте скрипта мы выводим сообщение с помощью confirm (Yes/No Dialog Box) и проверяем ответ. Если ответ был «Да» («Ок» и т.п.), то мы запускаем таймер с помощью setInterval. Таймер срабатывает каждые пол-секунды (второй параметр) и вызывает при каждом срабатывании функцию Step(). Идентификатор таймера step_t (от step timer).
Отлично, теперь таймер запущен и каждые пол-секунды вызывается функция Step(), где и спрятан по сути весь скрипт.
Первым делов в этой функции мы находим на странице строку, содержащую deletePost и вытаскиваем её целиком.
Регулярные выражения в JavaScript можно инициализировать с помощью строки вида /pattern/mods. Где под pattern понимается само регулярное выражение, под mods – модификаторы. Как обычно, все символы «/» нужно закрыть слева-стоящим »\» если они не являются модификаторами.
При этом здесь мы используем простую конструкцию «.+». Символ «точка» означает в ней «любой символ», а «плюс» – «один или больше». То есть получается «один или больше одного любых символов». Скобками нужно отметить тот участок, который мы хотим выцепить в результате. И, конечно, надо учитывать, что если скобка есть в самой строке, по которой мы делаем поиск, то её нужно «экранировать» с помощью «\».
После всего этого регулярка «запускается» с помощью pattern.exec(string), где pattern – наша регулярка, string – то, по чему мы будем искать, а exec – функция выполнения.
Краткая справка закончена, всем спасибо. *кланяется*
Итак, мы создаем регулярное выражение вида «/<a href=»» onclick=»(deletePost\(.+\));return false;»>Удалить<\/a>/g» (хочу обратить внимание, что в коде оно должно использоваться без кавычек). И обрабатываем с его помощью все тело документа (которое хранится, как мы знаем, в document.body.innerHTML).
Как итог вечеринки найденная строка попадает в match[1] (ибо сам по себе match – это массив строк; например в match[0] хранится полностью найденное выражение, а match[2] не существует, т.к. скобками, с помощью которых «выцепляется» нужный фрагмент, у нас «огорожен» только один кусок).
Дальше все еще проще. В match[1] у нас попадает строка вида «deletePost(…)». Нам нужно её просто выполнить. Поэтому мы используем eval() и передаем ему в качестве аргумента найденное значение (ведь оно содержит уже и имя выполняемой функции – deletePost).
На всякий случай добавлена проверка – если match равен null, значит мы ничего не нашли и удалять нам нечего.
Счетчик i служит для определения – сколько сообщений мы уже удалили. Мы знаем, что на странице у нас всего 20 сообщений, поэтому добавлено условие i >= 20. Когда это условие выполняется, мы останавливаем таймер с помощью clearInterval() (функция принимает на входе идентификатор таймера).
Вот, собственно и вся логика работы скрипта.
Часть 3. Лично я «сижу» в Chrome, поэтому, чтобы запустить скрипт, мне нужно сделать следующее:
1) Перейти на страницу vkontakte.ru/wall.php
2) Нажать правой кнопкой куда-нить и выбрать «Проверить элемент». Откроется новое окно.
3) В нем нажать «Console», скопировать туда весь скрипт целиком и нажать Enter.
Для пользователей FireFox существует дополнение FireBug, позволяющее сделать то же самое (описывать его я здесь не буду и если будут вопросы – велкам в комментарии).
Ну вот не дано мне программирование. Вроде четко всё написано, вроде всё понятно. А как начинаешь делать, то после слов «заглянем в код страницы» то сразу пропадает охота что-то дальше продолжать. Ну а когда доходишь до самого скрипта, то смотришь на него, с таким умным видом, как баран смотрит на новые ворота. А в голову приходят мысли — говорила же мама , что нужно учиться.
Значит вам легче удалить все руками