Лайфхакер
Лайфхакер
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Декабрь без стресса
🎁 Подарки на Новый год
Новости
Здоровье
Спорт и фитнес
Покупки
Технологии
Отношения
Кино
Реклама
ЛикбезВеб-сервисы
22 февраля 2023

Как быстро удалить записи со стены «ВКонтакте»

Два простых и бесплатных способа, благодаря которым вам не придётся стирать публикации вручную.
Фото автора Max Volotsky
Max Volotsky

Как быстро удалить записи со стены «ВКонтакте»

С помощью мобильного приложения

Программа Tool 42, доступная на Android и iOS, очистит стену за несколько минут. После запуска приложение запросит логин и пароль от вашей учётной записи «ВКонтакте». Введите их, чтобы дать Tool 42 доступ к аккаунту.

Затем выберите «Стена» → «Очистка стены» и нажмите на имя своего профиля. Выделите период, за который вы желаете стереть сообщения, и кликните «Удалить записи». Это запустит очистку.

Когда процесс завершится, на всякий случай отключите свою учётную запись от приложения, а также измените пароль от соцсети «ВКонтакте».

Tool 42
Pavlo HromadchukЦена: Бесплатно
Загрузить
Tool 42
Pavel GromadchukЦена: Бесплатно
Загрузить

С помощью специального скрипта

Вам понадобится компьютер с браузером и небольшой фрагмент кода, который приведён в статье. Время очистки будет зависеть от общего количества записей.

1. Откройте свою страницу «ВКонтакте»

Как удалить все записи со стены ВК: откройте свою страницу «ВКонтакте»

Авторизуйтесь и перейдите на главную страницу «ВКонтакте».

2. Откройте консоль браузера

Если вы работаете в Chrome, нажмите Ctrl + Shift + J (Windows) или Cmd + Opt + J (macOS). В Firefox для этого предусмотрены комбинации Ctrl + Shift + K (Windows) и Cmd + Opt + K (macOS). Если используете другой браузер, клавиши для запуска его консоли вы легко найдёте с помощью Google.

Как удалить все записи со стены ВК: откройте консоль браузера

3. Скопируйте этот скрипт, вставьте его в консоль и нажмите Enter

(function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item [onclick^="wall.deletePost"] ');for (var i = 0; i < deletePostLink.length; i++) { deletePostLink [i] .click(); } alert(deletePostLink.length + ' posts deleted'); setInterval(() => (window.scrollTo(0,document.body.scrollHeight)), 1000)}());

Как удалить все записи со стены ВК: вставьте скрипт в консоль и нажмите Enter

Если вы хотите сохранить какое‑то количество последних постов, присвойте переменной i нужное значение, чтобы скрипт не удалил эти записи:

(function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item [onclick^="wall.deletePost"] ');for (var i = Здесь укажите число ваших последних постов; i < deletePostLink.length; i++) { deletePostLink [i] .click(); } alert(deletePostLink.length + ' posts deleted'); setInterval(() => (window.scrollTo(0,document.body.scrollHeight)), 1000)}());

5. Когда браузер отобразит диалоговое окно, подтвердите удаление

После подтверждения скрипт сотрёт все публикации со стены «ВКонтакте». Чем их больше, тем дольше будет идти процесс.

Как удалить все записи со стены ВК: подтвердите удаление

Если вы решили сохранить часть постов и указали нужное количество, то эти записи останутся на стене после очистки.

Как удалить записи со стены ВК: подтвердите удаление

Если на странице после запуска кода сохранятся лишние посты, которые вы хотите стереть, попробуйте ввести и активировать скрипт в консоли ещё раз.

UPD. Материал был обновлён в феврале 2023 года.

Читайте также
📱💻🖥
Как закрыть свой профиль «ВКонтакте»
Как привязать Instagram* к Facebook* и «ВКонтакте»
Как публиковать истории во «ВКонтакте»
Как посмотреть удалённые сообщения в соцсети «ВКонтакте»
Почему не приходят уведомления «ВКонтакте» и как это исправить

*Деятельность Meta Platforms Inc. и принадлежащих ей социальных сетей Facebook и Instagram запрещена на территории РФ.

Обложка: Лайфхакер
Если нашли ошибку, выделите текст и нажмите Ctrl + Enter

Лучшие предложения

5 хороших электрических зубных щёток дешевле 5 000 рублей

5 хороших электрических зубных щёток дешевле 5 000 рублей

Берём в подарок колонку «Яндекс Станция Миди» со скидкой 50%

Берём в подарок популярную колонку «Яндекс Станция Миди»

Надо брать: мощная GaN-зарядка от Asometech за полцены

Надо брать: мощная GaN-зарядка от Asometech за полцены

Новинку OPPO Find X9 отдают сейчас со скидкой 56% на AliExpress

Новинку OPPO Find X9 отдают сейчас со скидкой 56% на AliExpress

Простой в освоении 3D-принтер ELEGOO Centauri Carbon отдают с отличной скидкой

Простой в освоении 3D-принтер ELEGOO Centauri Carbon отдают с отличной скидкой

30 besproigryshnyh podarkov muzhu na Novyj god

30 беспроигрышных подарков мужу на Новый год

Надо брать: «Имаджинариум» — культовая игра на ассоциации

Надо брать: «Имаджинариум» — культовая игра на ассоциации

Как подобрать шапку по форме лица

Как подобрать шапку по форме лица

Это интересно
3 фактора, которые влияют на качество вашего сна

3 фактора, которые влияют на качество вашего сна

Приоритетная задача! Чек-лист отдыха на праздниках

Приоритетная задача! Чек-лист отдыха на праздниках

Как найти увлечение после 60 лет и&nbsp;почему это&nbsp;важно

Как найти увлечение после 60 лет и почему это важно

5 гаджетов, которые помогут сделать жизнь&nbsp;проще

5 гаджетов, которые помогут сделать жизнь проще

Реклама
Комментарии
07.03.17 17:15
Комментарий удален
Dmitry Gegedosh
06.04.18 08:47
1500 постов удалило меньше чем за 2 минуты)
07.03.17 19:03
Комментарий удален
Иван Март
28.02.18 00:40
Страница действительно легче становится после удаления "старого" и не нужного. Ведь браузеру легче становится загружать страницы, это я уже ощутил чистя устаревшую информацию . Прокрутил страницу до 2013 года и браузер потреблял 1.7 Гб ОЗУ и страница дика лагала, после удаления 3.000 + постов страница вообще зависала на несколько минут и еле еле ожила. Чистка заняла +- 40 минут.
Наталья Кайда
12.03.17 16:13
Огромное спасибо за скрипт!:) Вот бы еще такой же для удаления комментов в сообществах-пабликах..:)
Yervand Baghdasarian
24.05.17 00:10
Спасибо Вам большое
Vyacheslav Frolov
19.06.17 20:23
Спасибо. Помогло! Удалил махом все записи пролистав до конца
Олег
09.07.17 18:31
Спасибо
Сергей Тавпеко
24.07.17 01:45
Спасибо ОГРОМНОЕ ?
Эльвира Ануфриева
24.07.17 09:16
Здорово! Спасибо огромнейшее!
Оксана Ростовская
04.08.17 11:48
Спасибо большое! Всё получилось!
Aiturgan Abdyjaparova
14.08.17 00:54
Я ТАК БЛАГОДАРНА ВАМ СПАСИБО
Катя Дементьева
29.08.17 21:01
помогло спасибо !
Теодор Ларионов
21.09.17 16:58
Если нужно какое-то кол-во постов (самых новых) не удалять, то просто присваиваем i значение того кол-ва самых новых постов, которые удалять не надо) Пример: (function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item[onclick^="wall.deletePost"]'); for (var i = 65; i < deletePostLink.length; i++) { deletePostLink[i].click(); } alert(deletePostLink.length + ' posts deleted'); }());
Андрей Приходько
23.09.17 23:32
можете это вставить и будет само крутить до конца setInterval(() => (window.scrollTo(0,document.body.scrollHeight)), 1000)
Lestart
27.07.20 21:35
А как остановить то скроллинг?
Dmitry Skoblev
11.08.21 10:48
как остановить????
Dmitry Skoblev
11.08.21 10:48
КАК ОСТАНОВИТЬ
Alex Ponomar
11.08.21 17:49
Закрыть вкладку...
Надежда Рожкова
03.11.21 04:02
так закроешь - а удалить то потом старые записи как? если нужно например последние оставить
Alex Ponomar
03.11.21 09:30
Это способ удалить все записи, про выборочное удаление речи не было.
Ivan Chesky
16.12.22 04:56
Спасибо! Скрипт рабочий.
Al' Pachino
12.10.17 04:03
Удалило все записи за секунд 10. Яндекс Браузер, спасибо ребят)
Александр Тарханов
22.10.17 16:35
Большое спасибо, все получилось!
Лёша Непейвода
28.10.17 18:36
спасибо рабочий способ
Марина Асоян
05.11.17 22:02
О СПАСИБО ВАМ БОЛЬШОЕЕЕЕЕЕЕ
Илья Левин
29.11.17 18:39
Спасибо ребята) Крутой способ. Понимаю что эти почти 5к постов я бы год убирал) Пользуйтесь чуваки,быстрее способа точно нету)))
Алексей Кузнецов
25.03.18 20:51
Спасибо автору. Реально помогло! Каких-нибудь полчаса и стена чистая, а записей накопилось с 2013 года!
Ульяна Сичкарь
22.04.18 13:40
Спасибо большое!)
Дмитрий Соколов
08.07.18 13:36
Удаление всех видео (function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.getElementsByClassName('video_thumb_action_delete'); for (var i = 0; i < deletePostLink.length; i++) { deletePostLink[i].click(); } alert(deletePostLink.length + ' posts deleted'); }());
Надежда Рожкова
02.11.21 15:12
у меня почему-то ошибку выдало(
Надежда Рожкова
02.11.21 15:12
VM1390:1 Uncaught TypeError: deletePostLink.click is not a function at <anonymous>:1:257 at <anonymous>:1:318
Polina Kvant
14.01.25 15:34
ой, а можно такой же, только для репостов?
Александр Скоропад
27.07.18 23:33
Подправил скрипт что бы скролил и удалял сам. (function () { 'use strict'; setTimeout(function run() { window.scrollTo(0, 0); var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item[onclick^="wall.deletePost"]'); for (var i = 0; i < deletePostLink.length; i++) { deletePostLink[i].click(); var card = deletePostLink[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement; card.parentElement.removeChild(card); } window.scrollTo(0,document.body.scrollHeight); setTimeout(run, 100); }, 100); }());
Сергей Смирнов
04.05.20 04:03
Привет, можеш поправить скрипт что бы скролил и удалял сам
Vasya Pechkin
31.10.21 15:30
вставляю и ничего не происходит, скрипты прокрутки и удаление прокрученных постов работаю, а этот нет(
Alexander Lashko
06.12.23 16:48
Вот этот скрипт хороший . удаляет все быстро . А тот что изначально стоит надо убрать . он не работает. удаляет 20 записей. а остальное время только листает страницы. И компьютер от него зависает
Катя RPB
07.12.24 13:20
Предыдущие не помогали, ваш помог, спасибо большое!
Алексей Стружков
14.10.18 13:40
Спасибо огромное (1427 постов) - ПУФ
Анна Иванова
07.12.18 14:23
Дружище! Благодарю от всей души! Сидела, 2 часа вручную, как дура, удаляла.... после этой статьи вжух и за 5 минут удалила все записи! Дай Бог тебе здоровья и благополучия!
Досжан Сейтқасым
26.12.18 19:56
Спосибо очень полезно
Uylia Palehova
30.12.18 06:02
Спасибо! Всё удалила!!! Ура)))
Дарья Подгорная
12.01.19 16:56
Спасибочки :)
Вадим Можегов
13.01.19 05:28
Спасибо)
Иван Радеев
19.01.19 13:05
памагло, спс )))
Алла Стеблецова
01.02.19 12:51
Спасибо, скрип рабочий
Чердак Лиса
13.02.19 17:48
Вы супер!
Mr Trololo
20.02.19 17:18
У меня получилось спасибо!??????
Анастасия Ветрова
22.04.19 16:09
Спасибо!!!?????
Сергей Букреев
24.04.19 14:41
Спасибо помогло не хотел маозги компосировать
Фарида Солтанбекова
25.04.19 08:59
Супер спасибо! все за раз удалилось!
Надежда Ревуцкая
04.05.19 12:08
Спасибо огромное! Получилось!)
Галина Моисеенкова
06.05.19 11:13|изменено
Записи за 10 лет(более 15000 записей) удалила за минут 20, правда комп подвис немного, но выдюжил))) спасибо))
Андрей Бояренко
07.05.19 16:44
Спасибо большое!!!!! Получилось!
Лидия Кирилова
12.05.19 09:01
Большое спасибо ,очень помогло.
Денис Ковалёв
19.05.19 14:37
Чтобы сохранить последние публикации, а остальные удалить, можно указать число здесь: (function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item[onclick^="wall.deletePost"]'); for (var i = КОЛИЧЕСТВО_ПОСЛЕДНИХ_ПОСТОВ; i < deletePostLink.length; i++) { deletePostLink[i].click(); } alert(deletePostLink.length + ' posts deleted'); }());
Леонид Шеметов
30.10.23 17:57
Денис, можно ли отредактировать скрипт, чтобы удалялись только фотографии, но сами посты были сохранены?
Инна Риккер
15.01.20 18:41
Спасибо за полезную и доходчивую статью! Сижу вот...удаляю. Записи с незапамятных времен. Если бы удаляла по одной, сидела бы у компьютера до второго пришествия, ??
Даниил Егоров
28.01.20 09:42
Спасибо! Все сработало) Лень было удалять 5к записей ХD
Елена Абакумова
09.03.20 22:48
Рабочий скрипт, спасибо!
Антон Собейко
23.06.20 11:53
Почему один раз удалило, а второй раз не удаляет? Пишет типо что 0 постов...
Max Volotsky
23.06.20 12:46
Потому что в первый раз все удалились?
Дмитрий Черношкур
31.07.20 21:51
Спасибо, помогло
Ринат Рахметжанов
01.08.20 15:04
СПАСИБО ВАМ )))) ОЧИСТИЛ ВСЕ ЗАПИСИ
Игорь Анихеев
01.11.20 18:56
Что то сложно тут написали, просто проматываем страницу вниз, кнопкой page down.И вводим этоdocument.querySelectorAll('.ui_actions_menu._ui_menu a:first-child').forEach( i => i.click())
Татьяна Вавилова
07.11.20 17:16
477 постов за минуту! огонь!!!!!!!!
Богдан Иванов
14.02.21 20:27
А0
Богдан Иванов
14.02.21 20:27
Да
Sergey Kirillov
16.05.21 20:28
Спасибо за JS код!
Any Rodnaya
05.07.21 10:06
а есть такое приложение чтобы удалить все сообщения из архива?
Игорян Берлогин
04.10.22 11:04
И будете забанены.
Ivan Chesky
16.12.22 04:55
За 15 лет накопилось 97+ тысяч записей. На полную очистку ушёл почти весь день. Были сложности, но всё получилось. Спасибо за скрипты и отдельное спасибо за скрипты в комментариях.
Constantin D'yakonov
09.02.23 17:05
Всем добрый день!Попытался сделать скрипт для удаления со стены ВК только постов, содержащих определенный текст, но что-то пока не фурычит. Я не силён в JS, но может комьюнити допилит скрипт, было бы супер.В текущей конфиге скрипт ищёт посты с текстом "meduza" и должен их удалять, листать ниже по странице и повторять операцию.Заранее всем спасибо за участие!(function () { "use strict"; setTimeout(function run() { window.scrollTo(0, 0); var deletePostLink = document.body.querySelectorAll( 'a.ui_actions_menu_item[onclick^="wall.deletePost"]' ); for (var i = 0; i < deletePostLink.length; i++) { var card = deletePostLink[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement; var isDel = [...card.querySelectorAll('.wall_post_text')].filter(j => j.innerText.indexOf("meduza") >= 0).length?true:false; if(isDel) { deletePostLink[i].click() } else { continue } card.parentElement.removeChild(card); } window.scrollTo(0, document.body.scrollHeight); setTimeout(run, 100); }, 100);})();Браузер: Chrome, Version 109.0.5414.119, MacOS 12.6.2
Леонид Шеметов
30.10.23 17:55
Можно ли удалить только фотографии из постов опубликованных на стене?
Konstantin Dyakonov
20.05.24 21:19
выходит сообщение что не следует вставлять код если вы не понимаите го -пхахахах у кого из имбицилов заработало вы лешие)
Alexander Usachev
12.09.24 13:23
Что-то не удаляет, только скроллит до самого первого поста. И потом не дает вернуться наверх
Alexander Usachev
12.09.24 14:54
Работает этот скрипт (заменить "КОЛИЧЕСТВО_ПОСТОВ_ДЛЯ_УДАЛЕНИЯ" и "КОЛИЧЕСТВО_ПОСЛЕДНИХ_ПОСТОВ" на значения ): ====================================================== (function () { 'use strict'; if (!confirm('Удалить все записи со стены?')) return; var deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item[onclick^="wall.deletePost"]'); var scrollAttempts = 0; var maxScrollAttempts = 100; var scrollInterval = setInterval(() => { var prevScrollHeight = document.body.scrollHeight; window.scrollTo(0, document.body.scrollHeight); deletePostLink = document.body.querySelectorAll('a.ui_actions_menu_item[onclick^="wall.deletePost"]'); scrollAttempts++; if (scrollAttempts >= maxScrollAttempts || deletePostLink.length >= КОЛИЧЕСТВО_ПОСТОВ_ДЛЯ_УДАЛЕНИЯ || document.body.scrollHeight === prevScrollHeight) { clearInterval(scrollInterval); for (var i = КОЛИЧЕСТВО_ПОСЛЕДНИХ_ПОСТОВ; i < deletePostLink.length; i++) { deletePostLink[i].click(); } alert(deletePostLink.length + ' posts deleted'); } }, 100); }()); ===================================== "КОЛИЧЕСТВО_ПОСЛЕДНИХ_ПОСТОВ" - сколько последних постов сохранить
Святослав 1
01.01.25 17:48
01.01.2025 видимо после последних обнов не работает
Жи Л
02.01.25 01:41|изменено
Здравствуйте, что-то перестал работать скрипт. Может алгоритмы поменялись в вк. Никто в ближайшее время стену не чистил? Раньше эти скрипты хорошо срабатывали.
Святослав 1
12.01.25 13:28
Не смог найти рабочий скрипт. Пришлось пользоваться сервисом tool42
San Rub
16.02.25 01:50|изменено
Вот рабочий код var test = false, offset = 50, pause = 1, count = 0; function itit() { offset = prompt('Кол-во первых записей которые нужно оставить.\nУбедитесь что на странице есть больше чем указанное кол-во', 50); pause = prompt('Пауза в секундах перед запросами (рекомендуем 1-10)', 1); test = confirm("Вы подтверждаете что хотите удалить все записи в группе/странице?\nКроме первых " + offset + "\n\nНаблюдать за процессом можно в консоли (F12 > console).\nЧтобы остановить удаление, просто закройте страницу."); document.querySelectorAll('#wall_more_link')[0]?.click(); scrollingTest(); } function scrollingTest() { document.querySelectorAll('#wall_more_link')[0]?.click(); var posts = document.querySelectorAll('div._post'); console.log('Предварительная загрузка записей', posts.length, 'из', offset * 2); if (posts.length < offset * 2) { setTimeout(function () { scrollingTest(); }, 1500); } else { setTimeout(function () { removePost(); }, 1500); } } function removePost() { if (test == true) { count++; var posts = document.querySelectorAll('div._post'); var post = posts[offset]; if (post) { console.log('Удаление поста с id ' + post.id); // Находим кнопку "Действия" (контекстное меню) var contextMenuButton = post.querySelector('[data-testid="post_context_menu_toggle"]'); if (contextMenuButton) { // Кликаем на кнопку "Действия" contextMenuButton.click(); // Ждем, пока меню откроется, и находим кнопку удаления setTimeout(function () { var deleteButton = document.querySelector('[data-testid="post_context_menu_item_delete"]'); if (deleteButton) { deleteButton.click(); console.log('Пост удален:', post.id); // Подтверждаем удаление (если требуется) setTimeout(function () { var confirmButton = document.querySelector('.vkuiModalRoot .vkuiButton--mode-primary'); if (confirmButton) { confirmButton.click(); console.log('Удаление подтверждено'); } }, 500); } else { console.error('Кнопка удаления не найдена'); } // Удаляем пост из DOM post.remove(); // Продолжаем удаление setTimeout(function () { removePost(); }, pause * 1000); }, 500); // Задержка для открытия меню } else { console.error('Кнопка "Действия" не найдена'); } } else { // Если посты закончились, нажимаем на кнопку "к предыдущим постам" var moreLink = document.querySelector('#wall_more_link'); if (moreLink && moreLink.style.display !== 'none') { console.log('Нажимаем на кнопку "к предыдущим постам"'); moreLink.click(); // Ждем загрузки новых постов setTimeout(function () { removePost(); }, 2000); // Задержка для загрузки новых постов } else { alert('Похоже что посты закончились или требуется перезапустить скрипт'); } } } } itit();
Polina Kvant
14.01.25 15:30
у меня на странице 55 тысяч репостов, есть мои фотографии и записи, которые я хочу оставить. можно ли в скрипте что-то поменять, чтобы удалил только репосты?
CepGo simha
22.05.25 09:44
Доброго дня. А напишите, пожалуйста, скрипт для выхода из всех групп ВК. Это очень актуальная и нужная тема. Часто страницы взламывают и подписываются на 500-1000 групп разом, а потом вручную их удалять - это отдельное мучение. Заранее спасибо )
Кирилл Тимонин
22.11.25 20:32
22.11.2025 - новая версия скрипта для автоматического удаления постов со стены ВК, учитывающая все изменения алгоритма удаления постов и интерфейса ВК. У скрипта есть удобное меню для управления процессом. Пред запуском скрипта необходимо войти в режим просмотра сообщений стены с выбором по календарю (двойной клик по слову Сообщения). Далее - выбираете год и дату в календаре, с которой начинать удалять сообщения - например 31 декабря 2023 года. Сообщения будут удаляться в прошлое - весь декабрь, ноябрь, октябрь и так далее. В меню скрипта нужно выбрать год - это служит предохранителем от случайного удаления текущих постов этого года. Скорость удаления постов от 0.1 до 3 секунд. Настраивать в зависимости от скорости вашего интернета и мощности компьютера. Для максимально быстрой работы скрипта необходимо в настройках браузера отключить показ картинок и видео. Скрипт успешно тестировался в браузере Хром на любых скоростях. Удаляет без ошибок. var test = false, count = 0, targetYear = 2024, deletePause = 100; var controlElements = {}; // Объект для хранения элементов управления // Функция создания панели управления function createControlPanel() { var panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; z-index: 10000; background: rgba(0,0,0,0.8); color: white; border-radius: 10px; padding: 15px; font-family: Arial, sans-serif; min-width: 200px; backdrop-filter: blur(10px); `; var title = document.createElement('div'); title.innerHTML = '🎯 Управление удалением'; title.style.cssText = 'font-weight: bold; margin-bottom: 10px; font-size: 16px;'; panel.appendChild(title); var stats = document.createElement('div'); stats.id = 'controlStats'; stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}сек`; stats.style.cssText = 'margin-bottom: 10px; font-size: 12px; line-height: 1.4;'; panel.appendChild(stats); // Кнопка остановки/продолжения controlElements.stopBtn = document.createElement('button'); controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.cssText = ` background: #ff4444; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-right: 5px; margin-bottom: 5px; width: 100%; `; controlElements.stopBtn.onclick = function() { if (test) { // Останавливаем скрипт test = false; controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; console.log('⏸️ Скрипт приостановлен пользователем'); } else { // Продолжаем скрипт test = true; controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; console.log('▶️ Скрипт продолжен пользователем'); // Запускаем процесс снова setTimeout(() => { processPostsContinuously(); }, 100); } updateControlPanel(); }; panel.appendChild(controlElements.stopBtn); // Кнопка перезапуска var restartBtn = document.createElement('button'); restartBtn.innerHTML = '🔄 Перезапустить'; restartBtn.style.cssText = ` background: #44aaff; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-bottom: 5px; width: 100%; `; restartBtn.onclick = function() { test = false; console.log('🔄 Перезапуск скрипта...'); // Сбрасываем кнопку остановки к красному цвету if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } setTimeout(() => { restartWithNewSettings(); }, 500); }; panel.appendChild(restartBtn); // Кнопка быстрых настроек var settingsBtn = document.createElement('button'); settingsBtn.innerHTML = '⚙️ Быстрые настройки'; settingsBtn.style.cssText = ` background: #ffaa00; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; width: 100%; `; settingsBtn.onclick = function() { quickSettings(); }; panel.appendChild(settingsBtn); document.body.appendChild(panel); return panel; } // Функция сброса кнопки остановки при перезапуске function resetStopButton() { if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } } // Функция обновления панели управления function updateControlPanel() { var stats = document.getElementById('controlStats'); if (stats) { stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}секСтатус: ${test ? 'активен' : 'пауза'}`; } } // Функция быстрых настроек function quickSettings() { if (test) { alert('Сначала остановите скрипт для изменения настроек!'); return; } var newPause = parseFloat(prompt('Новая пауза между удалениями (секунды):\n\n0.1-0.3 - Максимальная скорость\n0.5-1.0 - Баланс\n1.5-3.0 - Максимальная надежность', deletePause/1000)); if (!isNaN(newPause) && newPause >= 0.1 && newPause <= 3) { deletePause = newPause * 1000; console.log('⚙️ Пауза изменена: ' + newPause + ' сек.'); updateControlPanel(); } else { alert('Некорректное значение паузы!'); } } // Функция перезапуска с новыми настройками function restartWithNewSettings() { // Сбрасываем счетчик count = 0; // Запрос года для удаления var currentYear = new Date().getFullYear(); var newTargetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', targetYear)); // Проверка корректности года if (isNaN(newTargetYear) || newTargetYear < 2000 || newTargetYear > currentYear) { alert('Некорректный год! Будет использован предыдущий год: ' + targetYear); } else { targetYear = newTargetYear; } // Настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', deletePause/1000)); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НОВЫЕ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление с новыми настройками?"); if (test) { console.log('🔄 ПЕРЕЗАПУСК С НОВЫМИ НАСТРОЙКАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); // Сбрасываем кнопку остановки к красному цвету resetStopButton(); updateControlPanel(); startContinuousDeletion(); } else { updateControlPanel(); } } // Остановка по клавише ESC document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && test) { test = false; if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; } console.log('⏸️ Скрипт приостановлен по клавише ESC'); updateControlPanel(); } }); function disableMediaLoading() { document.querySelectorAll('img, video, iframe').forEach(el => { el.style.display = 'none'; }); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { if (node.tagName === 'IMG' || node.tagName === 'VIDEO') { node.style.display = 'none'; } node.querySelectorAll?.('img, video').forEach(media => { media.style.display = 'none'; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); console.log('⚡ Медиа заблокированы'); } function itit() { disableMediaLoading(); // Запрос года для удаления var currentYear = new Date().getFullYear(); targetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', currentYear)); // Проверка корректности года if (isNaN(targetYear) || targetYear < 2000 || targetYear > currentYear) { alert('Некорректный год! Будет использован текущий год: ' + currentYear); targetYear = currentYear; } // Точная настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', '0.5')); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление?"); if (test) { console.log('⚡ ЗАПУСК С НАСТРОЕННЫМИ ПАРАМЕТРАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); createControlPanel(); startContinuousDeletion(); } } function startContinuousDeletion() { console.log('🔄 Начинаем непрерывное удаление...'); updateControlPanel(); processPostsContinuously(); } function processPostsContinuously() { if (!test) { console.log('⏸️ Скрипт на паузе'); return; } console.log(`\n=== ПОИСК ПОСТОВ ЗА ${targetYear} ГОД ===`); var posts = document.querySelectorAll('div._post'); console.log(`📊 На странице: ${posts.length} постов`); if (posts.length === 0) { console.log('📭 Постов не найдено, пытаемся загрузить...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); return; } var postsToDelete = []; for (var i = 0; i < posts.length; i++) { var post = posts[i]; var postDate = extractDateFromPost(post); if (postDate && postDate.getFullYear() === targetYear) { postsToDelete.push({ element: post, date: postDate, index: i }); } } console.log(`🎯 Найдено постов за ${targetYear} год: ${postsToDelete.length}`); // Показываем информацию о найденных постах if (postsToDelete.length > 0) { console.log('📅 Даты найденных постов:'); postsToDelete.forEach(post => { console.log(' - ' + post.date.toLocaleDateString()); }); } if (postsToDelete.length > 0) { console.log('🔥 Начинаем удаление...'); deletePostsSequentially(postsToDelete, 0, () => { console.log(`✅ Удаление завершено. Всего удалено: ${count}`); updateControlPanel(); setTimeout(processPostsContinuously, 500); }); } else { console.log('📭 Постов за ' + targetYear + ' год не найдено, загружаем следующую страницу...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); } } function loadMorePosts() { return new Promise((resolve) => { console.log('🔍 Поиск пагинации для загрузки следующей страницы...'); // Ищем кнопку "1" в пагинации (первая страница) var paginationButton = findPaginationButton(); if (paginationButton) { console.log('✅ Найдена кнопка пагинации, нажимаем...'); paginationButton.click(); console.log('⏳ Ждем загрузки новой страницы (3 секунды)...'); setTimeout(() => { // Прокручиваем немного для стимуляции загрузки window.scrollTo(0, 100); setTimeout(() => { console.log('✅ Новая страница загружена'); resolve(true); }, 1000); }, 3000); } else { console.log('❌ Кнопка пагинации не найдена, пробуем альтернативные методы...'); // Альтернативные методы загрузки var alternativeButtons = [ document.querySelector('#fw_load_more.pg_more_link'), document.querySelector('#wall_more_link'), document.querySelector('.wall_more_link'), document.querySelector('.pg_more_link'), findElementByText('к предыдущим постам') ]; var foundButton = alternativeButtons.find(btn => btn !== null); if (foundButton) { console.log('✅ Найдена альтернативная кнопка, нажимаем...'); foundButton.click(); console.log('⏳ Ждем загрузки постов (4 секунды)...'); setTimeout(() => { console.log('✅ Посты загружены через альтернативную кнопку'); resolve(true); }, 4000); } else { console.log('❌ Ни одна кнопка не найдена, используем прокрутку...'); var oldCount = document.querySelectorAll('div._post').length; window.scrollTo(0, 0); setTimeout(() => { window.scrollTo(0, document.body.scrollHeight); console.log('⏳ Ждем загрузки постов после прокрутки (5 секунд)...'); setTimeout(() => { var newCount = document.querySelectorAll('div._post').length; if (newCount > oldCount) { console.log(`✅ Загружено ${newCount - oldCount} постов через прокрутку`); resolve(true); } else { console.log('❌ Не удалось загрузить новые посты через прокрутку'); resolve(false); } }, 5000); }, 1000); } } }); } // Функция поиска кнопки пагинации "1" function findPaginationButton() { // Ищем все элементы пагинации var paginationContainers = [ document.querySelector('.pagination_page'), document.querySelector('.pagination_pages'), document.querySelector('.page_list'), document.querySelector('.pagination_list'), document.querySelector('[data-module="uiPagination"]'), document.querySelector('.ui_pagination') ]; // Ищем в контейнерах пагинации for (var container of paginationContainers) { if (container) { // Ищем кнопку с цифрой "1" var button = container.querySelector('a[href*="offset=0"], a[href*="page=1"], .pagination_page:first-child, .page:first-child'); if (button) return button; // Ищем по тексту "1" var buttons = container.querySelectorAll('a, span, .page, .pagination_page'); for (var btn of buttons) { if (btn.textContent && btn.textContent.trim() === '1') { return btn; } } } } // Ищем по всему документу ссылки с offset=0 var offsetLinks = document.querySelectorAll('a[href*="offset=0"]'); for (var link of offsetLinks) { if (link.textContent && link.textContent.trim() === '1') { return link; } } // Ищем любую кнопку с цифрой "1" в вероятных контейнерах пагинации var allButtons = document.querySelectorAll('a, span, .page, .pagination_page, .ui_pagination a'); for (var btn of allButtons) { if (btn.textContent && btn.textContent.trim() === '1' && (btn.href && btn.href.includes('wall') || btn.parentElement && btn.parentElement.className.includes('pagination'))) { return btn; } } return null; } function findElementByText(text) { var elements = document.querySelectorAll('a, span, div, button'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var elementText = element.textContent || element.innerText; if (elementText && elementText.trim() === text) { return element; } } return null; } function extractDateFromPost(postElement) { try { var dateElement = postElement.querySelector('.PostDateBlock__root'); if (dateElement) { var dateText = dateElement.textContent || dateElement.innerText; if (dateText) { return parseDateFromText(dateText); } } var likeWrap = postElement.querySelector('.like_wrap'); if (likeWrap) { var likeText = likeWrap.textContent || likeWrap.innerText; if (likeText) { return parseDateFromText(likeText); } } } catch (e) { return null; } return null; } function parseDateFromText(text) { if (!text) return null; text = text.replace(/\s+/g, ' ').trim(); var datePatterns = [ /(\d{1,2})\s+(янв|фев|мар|апр|май|июн|июл|авг|сен|окт|ноя|дек)\s+(\d{4})/i, /(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})/i ]; for (var pattern of datePatterns) { var match = text.match(pattern); if (match) { var day = parseInt(match[1]); var monthStr = match[2].toLowerCase(); var year = parseInt(match[3]); var months = { 'янв': 0, 'января': 0, 'фев': 1, 'февраля': 1, 'мар': 2, 'марта': 2, 'апр': 3, 'апреля': 3, 'май': 4, 'мая': 4, 'июн': 5, 'июня': 5, 'июл': 6, 'июля': 6, 'авг': 7, 'августа': 7, 'сен': 8, 'сентября': 8, 'окт': 9, 'октября': 9, 'ноя': 10, 'ноября': 10, 'дек': 11, 'декабря': 11 }; var month = months[monthStr]; if (month !== undefined) { return new Date(year, month, day); } } } return null; } function deletePostsSequentially(posts, currentIndex, callback) { if (currentIndex >= posts.length || test === false) { callback(); return; } var post = posts[currentIndex]; deleteSinglePost(post.element).then(() => { count++; console.log(`✅ Удален пост ${currentIndex + 1}/${posts.length}. Всего: ${count}`); // Используем настроенную пользователем паузу console.log(`⏱️ Ждем ${deletePause/1000} сек. перед следующим удалением...`); setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, deletePause); }).catch((error) => { console.error('❌ Ошибка:', error); // При ошибке используем стандартную паузу 100мс setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, 100); }); } function deleteSinglePost(postElement) { return new Promise((resolve, reject) => { try { var menuButton = postElement.querySelector('[data-testid="post_context_menu_toggle"]'); if (!menuButton) { reject('Кнопка меню не найдена'); return; } menuButton.click(); setTimeout(() => { var deleteButton = document.querySelector('[data-testid="post_context_menu_item_delete"]'); if (!deleteButton) { reject('Кнопка удаления не найдена'); return; } deleteButton.click(); setTimeout(() => { var confirmButton = document.querySelector('.vkuiButton--mode-primary'); if (confirmButton) { confirmButton.click(); } postElement.remove(); resolve(); }, 200); }, 200); } catch (error) { reject(error); } }); } function showFinalStats() { var message = `🎉 УДАЛЕНИЕ ЗАВЕРШЕНО!\n\n• Год: ${targetYear}\n• Удалено постов: ${count}\n• Пауза между удалениями: ${deletePause/1000} сек.`; alert(message); console.log(message); updateControlPanel(); } // Запускаем скрипт itit(); // КОМАНДЫ ДЛЯ УПРАВЛЕНИЯ: // - test = false // Остановить скрипт // - restartWithNewSettings() // Перезапуск с новыми настройками // - quickSettings() // Быстрые настройки паузы // - resetStopButton() // Сброс кнопки остановки
Кирилл Тимонин
22.11.25 20:32
22.11.2025 - новая версия скрипта для автоматического удаления постов со стены ВК, учитывающая все изменения алгоритма удаления постов и интерфейса ВК. У скрипта есть удобное меню для управления процессом. Пред запуском скрипта необходимо войти в режим просмотра сообщений стены с выбором по календарю (двойной клик по слову Сообщения). Далее - выбираете год и дату в календаре, с которой начинать удалять сообщения - например 31 декабря 2023 года. Сообщения будут удаляться в прошлое - весь декабрь, ноябрь, октябрь и так далее. В меню скрипта нужно выбрать год - это служит предохранителем от случайного удаления текущих постов этого года. Скорость удаления постов от 0.1 до 3 секунд. Настраивать в зависимости от скорости вашего интернета и мощности компьютера. Для максимально быстрой работы скрипта необходимо в настройках браузера отключить показ картинок и видео. Скрипт успешно тестировался в браузере Хром на любых скоростях. Удаляет без ошибок. var test = false, count = 0, targetYear = 2024, deletePause = 100; var controlElements = {}; // Объект для хранения элементов управления // Функция создания панели управления function createControlPanel() { var panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; z-index: 10000; background: rgba(0,0,0,0.8); color: white; border-radius: 10px; padding: 15px; font-family: Arial, sans-serif; min-width: 200px; backdrop-filter: blur(10px); `; var title = document.createElement('div'); title.innerHTML = '🎯 Управление удалением'; title.style.cssText = 'font-weight: bold; margin-bottom: 10px; font-size: 16px;'; panel.appendChild(title); var stats = document.createElement('div'); stats.id = 'controlStats'; stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}сек`; stats.style.cssText = 'margin-bottom: 10px; font-size: 12px; line-height: 1.4;'; panel.appendChild(stats); // Кнопка остановки/продолжения controlElements.stopBtn = document.createElement('button'); controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.cssText = ` background: #ff4444; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-right: 5px; margin-bottom: 5px; width: 100%; `; controlElements.stopBtn.onclick = function() { if (test) { // Останавливаем скрипт test = false; controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; console.log('⏸️ Скрипт приостановлен пользователем'); } else { // Продолжаем скрипт test = true; controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; console.log('▶️ Скрипт продолжен пользователем'); // Запускаем процесс снова setTimeout(() => { processPostsContinuously(); }, 100); } updateControlPanel(); }; panel.appendChild(controlElements.stopBtn); // Кнопка перезапуска var restartBtn = document.createElement('button'); restartBtn.innerHTML = '🔄 Перезапустить'; restartBtn.style.cssText = ` background: #44aaff; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; margin-bottom: 5px; width: 100%; `; restartBtn.onclick = function() { test = false; console.log('🔄 Перезапуск скрипта...'); // Сбрасываем кнопку остановки к красному цвету if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } setTimeout(() => { restartWithNewSettings(); }, 500); }; panel.appendChild(restartBtn); // Кнопка быстрых настроек var settingsBtn = document.createElement('button'); settingsBtn.innerHTML = '⚙️ Быстрые настройки'; settingsBtn.style.cssText = ` background: #ffaa00; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 12px; width: 100%; `; settingsBtn.onclick = function() { quickSettings(); }; panel.appendChild(settingsBtn); document.body.appendChild(panel); return panel; } // Функция сброса кнопки остановки при перезапуске function resetStopButton() { if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '🛑 Остановить'; controlElements.stopBtn.style.background = '#ff4444'; } } // Функция обновления панели управления function updateControlPanel() { var stats = document.getElementById('controlStats'); if (stats) { stats.innerHTML = `Год: ${targetYear}Удалено: ${count}Пауза: ${deletePause/1000}секСтатус: ${test ? 'активен' : 'пауза'}`; } } // Функция быстрых настроек function quickSettings() { if (test) { alert('Сначала остановите скрипт для изменения настроек!'); return; } var newPause = parseFloat(prompt('Новая пауза между удалениями (секунды):\n\n0.1-0.3 - Максимальная скорость\n0.5-1.0 - Баланс\n1.5-3.0 - Максимальная надежность', deletePause/1000)); if (!isNaN(newPause) && newPause >= 0.1 && newPause <= 3) { deletePause = newPause * 1000; console.log('⚙️ Пауза изменена: ' + newPause + ' сек.'); updateControlPanel(); } else { alert('Некорректное значение паузы!'); } } // Функция перезапуска с новыми настройками function restartWithNewSettings() { // Сбрасываем счетчик count = 0; // Запрос года для удаления var currentYear = new Date().getFullYear(); var newTargetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', targetYear)); // Проверка корректности года if (isNaN(newTargetYear) || newTargetYear < 2000 || newTargetYear > currentYear) { alert('Некорректный год! Будет использован предыдущий год: ' + targetYear); } else { targetYear = newTargetYear; } // Настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', deletePause/1000)); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НОВЫЕ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление с новыми настройками?"); if (test) { console.log('🔄 ПЕРЕЗАПУСК С НОВЫМИ НАСТРОЙКАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); // Сбрасываем кнопку остановки к красному цвету resetStopButton(); updateControlPanel(); startContinuousDeletion(); } else { updateControlPanel(); } } // Остановка по клавише ESC document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && test) { test = false; if (controlElements.stopBtn) { controlElements.stopBtn.innerHTML = '▶️ Продолжить'; controlElements.stopBtn.style.background = '#44aa44'; } console.log('⏸️ Скрипт приостановлен по клавише ESC'); updateControlPanel(); } }); function disableMediaLoading() { document.querySelectorAll('img, video, iframe').forEach(el => { el.style.display = 'none'; }); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { if (node.tagName === 'IMG' || node.tagName === 'VIDEO') { node.style.display = 'none'; } node.querySelectorAll?.('img, video').forEach(media => { media.style.display = 'none'; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); console.log('⚡ Медиа заблокированы'); } function itit() { disableMediaLoading(); // Запрос года для удаления var currentYear = new Date().getFullYear(); targetYear = parseInt(prompt('Введите год, посты за который нужно удалить\n(например: 2024, 2023, 2022)', currentYear)); // Проверка корректности года if (isNaN(targetYear) || targetYear < 2000 || targetYear > currentYear) { alert('Некорректный год! Будет использован текущий год: ' + currentYear); targetYear = currentYear; } // Точная настройка паузы между удалениями var pauseInput = parseFloat(prompt('Пауза между удалениями постов (секунды)\n\nРекомендации:\n• 0.1-0.3 - Максимальная скорость (риск ошибок)\n• 0.5-1.0 - Баланс скорости и надежности\n• 1.5-3.0 - Максимальная надежность', '0.5')); // Проверка и ограничение паузы if (isNaN(pauseInput) || pauseInput < 0.1) { pauseInput = 0.1; } else if (pauseInput > 3) { pauseInput = 3; } deletePause = pauseInput * 1000; test = confirm("⚡ НАСТРОЙКИ УДАЛЕНИЯ:\n\n• Год: " + targetYear + "\n• Пауза между удалениями: " + pauseInput + " сек." + "\n• Медиа заблокированы: Да\n\nНачать удаление?"); if (test) { console.log('⚡ ЗАПУСК С НАСТРОЕННЫМИ ПАРАМЕТРАМИ'); console.log('🎯 Целевой год: ' + targetYear); console.log('⏱️ Пауза между удалениями: ' + pauseInput + ' сек.'); createControlPanel(); startContinuousDeletion(); } } function startContinuousDeletion() { console.log('🔄 Начинаем непрерывное удаление...'); updateControlPanel(); processPostsContinuously(); } function processPostsContinuously() { if (!test) { console.log('⏸️ Скрипт на паузе'); return; } console.log(`\n=== ПОИСК ПОСТОВ ЗА ${targetYear} ГОД ===`); var posts = document.querySelectorAll('div._post'); console.log(`📊 На странице: ${posts.length} постов`); if (posts.length === 0) { console.log('📭 Постов не найдено, пытаемся загрузить...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); return; } var postsToDelete = []; for (var i = 0; i < posts.length; i++) { var post = posts[i]; var postDate = extractDateFromPost(post); if (postDate && postDate.getFullYear() === targetYear) { postsToDelete.push({ element: post, date: postDate, index: i }); } } console.log(`🎯 Найдено постов за ${targetYear} год: ${postsToDelete.length}`); // Показываем информацию о найденных постах if (postsToDelete.length > 0) { console.log('📅 Даты найденных постов:'); postsToDelete.forEach(post => { console.log(' - ' + post.date.toLocaleDateString()); }); } if (postsToDelete.length > 0) { console.log('🔥 Начинаем удаление...'); deletePostsSequentially(postsToDelete, 0, () => { console.log(`✅ Удаление завершено. Всего удалено: ${count}`); updateControlPanel(); setTimeout(processPostsContinuously, 500); }); } else { console.log('📭 Постов за ' + targetYear + ' год не найдено, загружаем следующую страницу...'); loadMorePosts().then((success) => { setTimeout(processPostsContinuously, 1000); }); } } function loadMorePosts() { return new Promise((resolve) => { console.log('🔍 Поиск пагинации для загрузки следующей страницы...'); // Ищем кнопку "1" в пагинации (первая страница) var paginationButton = findPaginationButton(); if (paginationButton) { console.log('✅ Найдена кнопка пагинации, нажимаем...'); paginationButton.click(); console.log('⏳ Ждем загрузки новой страницы (3 секунды)...'); setTimeout(() => { // Прокручиваем немного для стимуляции загрузки window.scrollTo(0, 100); setTimeout(() => { console.log('✅ Новая страница загружена'); resolve(true); }, 1000); }, 3000); } else { console.log('❌ Кнопка пагинации не найдена, пробуем альтернативные методы...'); // Альтернативные методы загрузки var alternativeButtons = [ document.querySelector('#fw_load_more.pg_more_link'), document.querySelector('#wall_more_link'), document.querySelector('.wall_more_link'), document.querySelector('.pg_more_link'), findElementByText('к предыдущим постам') ]; var foundButton = alternativeButtons.find(btn => btn !== null); if (foundButton) { console.log('✅ Найдена альтернативная кнопка, нажимаем...'); foundButton.click(); console.log('⏳ Ждем загрузки постов (4 секунды)...'); setTimeout(() => { console.log('✅ Посты загружены через альтернативную кнопку'); resolve(true); }, 4000); } else { console.log('❌ Ни одна кнопка не найдена, используем прокрутку...'); var oldCount = document.querySelectorAll('div._post').length; window.scrollTo(0, 0); setTimeout(() => { window.scrollTo(0, document.body.scrollHeight); console.log('⏳ Ждем загрузки постов после прокрутки (5 секунд)...'); setTimeout(() => { var newCount = document.querySelectorAll('div._post').length; if (newCount > oldCount) { console.log(`✅ Загружено ${newCount - oldCount} постов через прокрутку`); resolve(true); } else { console.log('❌ Не удалось загрузить новые посты через прокрутку'); resolve(false); } }, 5000); }, 1000); } } }); } // Функция поиска кнопки пагинации "1" function findPaginationButton() { // Ищем все элементы пагинации var paginationContainers = [ document.querySelector('.pagination_page'), document.querySelector('.pagination_pages'), document.querySelector('.page_list'), document.querySelector('.pagination_list'), document.querySelector('[data-module="uiPagination"]'), document.querySelector('.ui_pagination') ]; // Ищем в контейнерах пагинации for (var container of paginationContainers) { if (container) { // Ищем кнопку с цифрой "1" var button = container.querySelector('a[href*="offset=0"], a[href*="page=1"], .pagination_page:first-child, .page:first-child'); if (button) return button; // Ищем по тексту "1" var buttons = container.querySelectorAll('a, span, .page, .pagination_page'); for (var btn of buttons) { if (btn.textContent && btn.textContent.trim() === '1') { return btn; } } } } // Ищем по всему документу ссылки с offset=0 var offsetLinks = document.querySelectorAll('a[href*="offset=0"]'); for (var link of offsetLinks) { if (link.textContent && link.textContent.trim() === '1') { return link; } } // Ищем любую кнопку с цифрой "1" в вероятных контейнерах пагинации var allButtons = document.querySelectorAll('a, span, .page, .pagination_page, .ui_pagination a'); for (var btn of allButtons) { if (btn.textContent && btn.textContent.trim() === '1' && (btn.href && btn.href.includes('wall') || btn.parentElement && btn.parentElement.className.includes('pagination'))) { return btn; } } return null; } function findElementByText(text) { var elements = document.querySelectorAll('a, span, div, button'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var elementText = element.textContent || element.innerText; if (elementText && elementText.trim() === text) { return element; } } return null; } function extractDateFromPost(postElement) { try { var dateElement = postElement.querySelector('.PostDateBlock__root'); if (dateElement) { var dateText = dateElement.textContent || dateElement.innerText; if (dateText) { return parseDateFromText(dateText); } } var likeWrap = postElement.querySelector('.like_wrap'); if (likeWrap) { var likeText = likeWrap.textContent || likeWrap.innerText; if (likeText) { return parseDateFromText(likeText); } } } catch (e) { return null; } return null; } function parseDateFromText(text) { if (!text) return null; text = text.replace(/\s+/g, ' ').trim(); var datePatterns = [ /(\d{1,2})\s+(янв|фев|мар|апр|май|июн|июл|авг|сен|окт|ноя|дек)\s+(\d{4})/i, /(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})/i ]; for (var pattern of datePatterns) { var match = text.match(pattern); if (match) { var day = parseInt(match[1]); var monthStr = match[2].toLowerCase(); var year = parseInt(match[3]); var months = { 'янв': 0, 'января': 0, 'фев': 1, 'февраля': 1, 'мар': 2, 'марта': 2, 'апр': 3, 'апреля': 3, 'май': 4, 'мая': 4, 'июн': 5, 'июня': 5, 'июл': 6, 'июля': 6, 'авг': 7, 'августа': 7, 'сен': 8, 'сентября': 8, 'окт': 9, 'октября': 9, 'ноя': 10, 'ноября': 10, 'дек': 11, 'декабря': 11 }; var month = months[monthStr]; if (month !== undefined) { return new Date(year, month, day); } } } return null; } function deletePostsSequentially(posts, currentIndex, callback) { if (currentIndex >= posts.length || test === false) { callback(); return; } var post = posts[currentIndex]; deleteSinglePost(post.element).then(() => { count++; console.log(`✅ Удален пост ${currentIndex + 1}/${posts.length}. Всего: ${count}`); // Используем настроенную пользователем паузу console.log(`⏱️ Ждем ${deletePause/1000} сек. перед следующим удалением...`); setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, deletePause); }).catch((error) => { console.error('❌ Ошибка:', error); // При ошибке используем стандартную паузу 100мс setTimeout(() => { deletePostsSequentially(posts, currentIndex + 1, callback); }, 100); }); } function deleteSinglePost(postElement) { return new Promise((resolve, reject) => { try { var menuButton = postElement.querySelector('[data-testid="post_context_menu_toggle"]'); if (!menuButton) { reject('Кнопка меню не найдена'); return; } menuButton.click(); setTimeout(() => { var deleteButton = document.querySelector('[data-testid="post_context_menu_item_delete"]'); if (!deleteButton) { reject('Кнопка удаления не найдена'); return; } deleteButton.click(); setTimeout(() => { var confirmButton = document.querySelector('.vkuiButton--mode-primary'); if (confirmButton) { confirmButton.click(); } postElement.remove(); resolve(); }, 200); }, 200); } catch (error) { reject(error); } }); } function showFinalStats() { var message = `🎉 УДАЛЕНИЕ ЗАВЕРШЕНО!\n\n• Год: ${targetYear}\n• Удалено постов: ${count}\n• Пауза между удалениями: ${deletePause/1000} сек.`; alert(message); console.log(message); updateControlPanel(); } // Запускаем скрипт itit(); // КОМАНДЫ ДЛЯ УПРАВЛЕНИЯ: // - test = false // Остановить скрипт // - restartWithNewSettings() // Перезапуск с новыми настройками // - quickSettings() // Быстрые настройки паузы // - resetStopButton() // Сброс кнопки остановки
Что вы могли пропустить
Новая теория заговора: библиотекари скрывают книги, которые советует ChatGPT
Новая теория заговора: библиотекари скрывают книги, которые советует ChatGPT
0
Вчера
Новости
Технологии
Рататуй в мире гаджетов: представлен ИИ-куб для оценки степени готовности блюд
Рататуй в мире гаджетов: представлен ИИ-куб для оценки степени готовности блюд
0
Вчера
Новости
Устройства
«Сбер» запустил оплату картами «Мир» со смарт‑часов — без интернета и смартфона рядом
«Сбер» запустил оплату картами «Мир» со смарт‑часов — без интернета и смартфона рядом
0
Вчера
Новости
Технологии
Что такое конвекция в духовке и зачем она нужна
Что такое конвекция в духовке и зачем она нужна
0
Вчера
Ликбез
Технологии
WhatsApp заново изобрёл голосовую почту — теперь можно отправлять аудио- и видеоответы на пропущенные
WhatsApp заново изобрёл голосовую почту — теперь можно отправлять аудио- и видеоответы на пропущенные
0
Вчера
Новости
Технологии
Google показала инновационный браузер Disco — он создаёт мини-приложения под задачу на лету
Google показала инновационный браузер Disco — он создаёт мини-приложения под задачу на лету
0
Вчера
Браузеры
Новости
OpenAI представила флагманскую ИИ-модель GPT-5.2 — в попытке угнаться за конкурентами
OpenAI представила флагманскую ИИ-модель GPT-5.2 — в попытке угнаться за конкурентами
0
Вчера
Новости
Технологии
Герои Disney, Pixar и Marvel приходят в ChatGPT и Sora — нейровидео с ними теперь официально разрешено
Герои Disney, Pixar и Marvel приходят в ChatGPT и Sora — нейровидео с ними теперь официально разрешено
0
11 декабря
Новости
Технологии
Последний оплот: Apple сильно усложнила блокировку iMessage со стороны правительств
Последний оплот: Apple сильно усложнила блокировку iMessage со стороны правительств
0
11 декабря
iOS
Новости
Названы самые скачиваемые приложения и игры в App Store в 2025 году
Названы самые скачиваемые приложения и игры в App Store в 2025 году
0
11 декабря
iOS
Новости
Ayaneo показала свой первый Android-смартфон — современное воплощение Xperia Play
Ayaneo показала свой первый Android-смартфон — современное воплощение Xperia Play
0
11 декабря
Новости
Устройства
15 лучших аналогов фена, стайлера и выпрямителя Dyson
15 лучших аналогов фена, стайлера и выпрямителя Dyson
0
11 декабря
Ликбез
Устройства
HyperOS 3 получат ещё 15 устройств Xiaomi, включая Redmi K60 Pro
HyperOS 3 получат ещё 15 устройств Xiaomi, включая Redmi K60 Pro
0
10 декабря
Новости
Устройства
Надо брать: флагманский смартфон iQOO 15
Надо брать: флагманский смартфон iQOO 15
0
10 декабря
Технологии
Устройства
В ChatGPT встроили Photoshop и Acrobat для редактирования фото и PDF — они бесплатные
В ChatGPT встроили Photoshop и Acrobat для редактирования фото и PDF — они бесплатные
0
10 декабря
Новости
Технологии

Новые комментарии

Аватар автора комментария
th oh18 минут назад

0 / 0

ТОЛЬКО ДЛЯ ЧАСОВ Huawei
«Сбер» запустил оплату картами «Мир» со смарт‑часов — без интернета и смартфона рядом
Аватар автора комментария
Максим Радионов33 минуты назад

0 / 0

Нейронный процессор?! 😂
Берём в подарок популярную колонку «Яндекс Станция Миди»
Аватар автора комментария
Михаил Ванишев2 часа назад

0 / 0

Я сразу скажу что не любитель детективов, но первая часть была ничего, вторая как то так себе, но с третьей особо оплевался, мне чертовски не зашло, поставил 2 из 10. Не кол, потому что когда в конце объяснили что происходило, всё-таки накинул балл 😁
«Достать ножи: Воскрешение покойника» — лучший детектив года (но с нюансами)
Аватар автора комментария
Даниил Ломако3 часа назад

0 / 0

Продайте пж :)
Берём в подарок популярную колонку «Яндекс Станция Миди»
От ПМС до овуляции. Всё, что нужно знать о менструальном цикле

От ПМС до овуляции. Всё, что нужно знать о менструальном цикле

Лайфхакер
Информация
О проектеРубрикиРекламаРедакцияВакансииДля начинающих авторовО компании
Подписка
TelegramВКонтактеTwitterViberYouTubeИнициалRSS
Правила
Пользовательское соглашениеПолитика обработки персональных данныхПравила применения рекомендательных технологийПравила сообществаСогласие на обработку персональных данныхСогласие для рекламных рассылокСогласие для информационной программы
18+Копирование материалов запрещено.
Издание может получать комиссию от покупки товаров, представленных в публикациях