Удаление всех диалогов из ВКонтакте

В продолжении предыдущей статьи решил разобраться с тем, как удалять все сообщения. В итоге получился скрипт, для строки запроса. Правда в Opera скрипт работать не захотелось, но его можно вставить напрямую в консоль (Ctrl + Shift + I, затем иконка ">_"). Перед выполнением скрипта надо зайти на http://vkontakte.ru/im.

javascript:var a=document.getElementsByTagName("div");var b=[];for(i=0;i<a.length;++i){if(a[i].className=="dialogs_row "||a[i].className=="dialogs_row"){b.push(a[i].id.substring(9));}}i=0;c=setInterval(function(){IM.selectDialog(b[i]);setTimeout(function(){IM.deleteHistory(b[i++]);},500);setTimeout(function(){d=document.getElementsByTagName("button");j=0;while(d[j++].parentNode.className!="button_blue");d[j-1].click();},1000);if(i>b.length)clearInterval(c)},2000);

Если посмотреть повнимательнее на диалоги, в каждом диалоге можно найти "Действие" -> "Очистить историю сообщений". Эта ссылка вызывает функцию IM.deleteHistory(id), где id - это идентификатор диалога. Однако эта функция работает только в том случае, если соответствующий диалог открыт. Открывается этот диалог функцией IM.selectDialog(id). Получить же все необходимые идентификаторы можно на странице всех диалогов. Вот собственно код:

Id диалогов записаны в элементах, имеющих одинаковый класс. Так как JavaScript не умеет делать выборку элементов по классу, то это делается отсеиванием из div-ов. Кстати, почему-то одинаковые элементы могут иметь класс отличающийся на символ пробела. Может быть это специально для чего-то сделано? У каждого элемента нужного нам класса есть поле id, которое содержит значение типа im_dialog######, где ###### - нужный нам номер диалога. С помощью функции sbstring этот номер и вырезается.

Дальше сложнее. Теперь для каждого диалога нам надо сначала выбрать его с помощью IM.selectDialog(id), потом подождать пока диалог загрузится, затем вызвать удаление диалога с помощью IM.deleteHistory(id), снова подождать, а затем еще и подтвердить удаление. Все это сделано с задержкой, так как сервер ВКонтакте не всегда быстро реагирует. Кстати с подтверждением все не так просто. Кнопка, нажатие которой необходимо сымитировать, отличается только тем, что она синяя. Даже текст "Удалить" внутри и тот не уникален. Поэтому кнопка проверяется по значению класса родителя.

Вообще все, что может делать пользователь на ВКонтакте реализовано через JavaScript объекты, содержащие все необходимые функции. Так для работы с аудио-файлам это был AudioEdit, для старой системы сообщений - mail, для новых диалогов - IM. Поскольку это JavaScript, то естественно код открыт и можно спокойно смотреть и исследовать возможности этих объектов. Достаточно просто иметь браузер.

На этом пока все. Что бы вы хотели еще удалить из ВКонтакте? =) Или вам надо автоматизировать какой-то другой набор повторяющихся действий?

Комментариев нет: