Постовой (*): Комплексная оптимизация и продвижение сайта – основные направления деятельности нашей Компании.
Сразу оговорюсь. Скрипт не полностью автоматический, удаляет сообщения только с текущей страницы стены. Связано это с тем, что написан на коленке в 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 регулярным выражениям (подробнее, например, здесь).
Регулярные выражения в 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, позволяющее сделать то же самое (описывать его я здесь не буду и если будут вопросы – велкам в комментарии).
Оставьте свой комментарий
|
12.10 2024 в 3:04 пп
12.10 2024 в 6:27 пп
17.10 2024 в 11:39 дп
21.10 2024 в 5:59 пп
21.10 2024 в 6:31 пп
23.10 2024 в 12:06 пп
25.10 2024 в 6:39 дп