Лайфхакер
Лайфхакер
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Лучшее
Рубрики
Рецепты
Подкасты
Сервисы
Колонки
Новости
Здоровье
Спорт и фитнес
Покупки
Технологии
Отношения
Кино
Реклама
ЛикбезВеб-сервисы
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

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

15 товаров с AliExpress для тех, кому надоел интерьер дома

15 товаров с AliExpress для тех, кому надоел интерьер дома

Надо брать: демисезонные кроссовки от Baasploa со скидкой 69%

Надо брать: демисезонные кроссовки от Baasploa со скидкой 69%

Вещи для радости

10 вещей с маркетплейсов, которые порадовали нас на этой неделе

Робот-пылесос Roborock Qrevo C Pro

Флагманский робот-пылесос от Roborock отдают со скидкой 56% на AliExpress

10 популярных товаров с приличными скидками на AliExpress

10 популярных товаров с приличными скидками на AliExpress

Оформляем дебетовку с кешбэком до 15% за пополнение PS Store, Steam и Xbox

Оформляем дебетовку с кешбэком до 15% за пополнение PS Store, Steam и Xbox

Робот — мойщик окон от Divedeer

Дешевле 3 000 рублей стоит хороший мойщик окон прямо сейчас на AliExpress

Надо брать: пылесос с функцией влажной уборки Dreame G12 со скидкой 30%

Надо брать: пылесос с функцией влажной уборки Dreame G12 со скидкой 30%

Это интересно
10 стыдных вопросов об ИИ в дизайне: отвечает креативный директор студии Redis Agency Павел Дергачёв

10 стыдных вопросов об ИИ в дизайне: отвечает креативный директор студии Redis Agency Павел Дергачёв

Российский Красный Крест открывает набор на профессиональные курсы с возможностью бесплатного обучения

Российский Красный Крест открывает набор на профессиональные курсы с возможностью бесплатного обучения

Как сегодня в России создают новые лекарства и учатся «заживлять» трещины в металле

Как сегодня в России создают новые лекарства и учатся «заживлять» трещины в металле

Полезные подарки на 8 Марта: 3 пылесоса от Dreame со скидкой до 20 000 рублей

Полезные подарки на 8 Марта: 3 пылесоса от Dreame со скидкой до 20 000 рублей

Реклама
Комментарии
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() // Сброс кнопки остановки
Pavel Tomilov
15.02.26 12:16
здравствуйте, есть скрипт для очищения постов в сообществе?
Pavel Tomilov
11.02.26 14:25
Добрый день! Как удалить все записи в сообществе? Будьте добры, помогите.
Что вы могли пропустить
Личный опыт: 4 месяца с iPhone 17 — лучшим и скучнейшим айфоном 2026 года
Личный опыт: 4 месяца с iPhone 17 — лучшим и скучнейшим айфоном 2026 года
0
16:00
Устройства
Устройства
Есть тревожные звоночки: в масштабном исследовании оценили влияние ИИ на рынок труда
Есть тревожные звоночки: в масштабном исследовании оценили влияние ИИ на рынок труда
0
Вчера
Новости
Технологии
AnTuTu обновил рейтинг Android-смартфонов с лучшим соотношением цены и производительности
AnTuTu обновил рейтинг Android-смартфонов с лучшим соотношением цены и производительности
0
Вчера
Новости
Устройства
Появились первые результаты тестов производительности MacBook Neo
Появились первые результаты тестов производительности MacBook Neo
0
Вчера
Новости
Устройства
Как пользоваться нейросетью Nano Banana в 2026 году
Как пользоваться нейросетью Nano Banana в 2026 году
0
Вчера
Ликбез
Технологии
Deveillance представила Spectre I — гаджет, который не даёт другим устройствам вас прослушивать
Deveillance представила Spectre I — гаджет, который не даёт другим устройствам вас прослушивать
0
Вчера
Новости
Устройства
Google начала наказывать Android‑приложения за быстрый расход батареи
Google начала наказывать Android‑приложения за быстрый расход батареи
0
Вчера
Android
Новости
OpenAI представила GPT-5.4 — ИИ-модель, которая умеет управлять компьютером пользователя
OpenAI представила GPT-5.4 — ИИ-модель, которая умеет управлять компьютером пользователя
0
Вчера
Новости
Технологии
Почему новый MacBook Neo — именно то, чего так не хватало Apple и всем нам
Почему новый MacBook Neo — именно то, чего так не хватало Apple и всем нам
0
5 марта
Технологии
Технологии
Nothing представила два бюджетных смартфона в духе киберпанка — Phone 4(a) и 4(a) Pro
Nothing представила два бюджетных смартфона в духе киберпанка — Phone 4(a) и 4(a) Pro
0
5 марта
Новости
Устройства
11 приложений, которые помогут экономить на покупках в 2026 году
11 приложений, которые помогут экономить на покупках в 2026 году
0
5 марта
Стать богатым
Технологии
Apple выпустила бюджетный ноутбук MacBook Neo — он во многом не хуже Air-модели
Apple выпустила бюджетный ноутбук MacBook Neo — он во многом не хуже Air-модели
0
4 марта
Новости
Устройства
Программирование без рук: в ИИ-инструменте для написания кода Claude Code появился голосовой режим
Программирование без рук: в ИИ-инструменте для написания кода Claude Code появился голосовой режим
0
4 марта
Веб-сервисы
Новости
Unihertz показала Titan 2 Elite — кнопочный мини-смартфон в стиле BlackBerry
Unihertz показала Titan 2 Elite — кнопочный мини-смартфон в стиле BlackBerry
0
4 марта
Новости
Устройства
Лучшие бесплатные веб-сервисы февраля
Лучшие бесплатные веб-сервисы февраля
0
4 марта
Технологии
Технологии

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

Аватар автора комментария
Мила Цимбал44 минуты назад

0 / 0

У меня ярче и вроде шумней того, что в подборке. Есть тихий режим с приглушенной яркостью, но даже на максимальных настройках совсем не замечаешь шума при просмотре. Хотя расположен близко)
10 популярных товаров с приличными скидками на AliExpress
Аватар автора комментария
Sergei F1 час назад

0 / 0

Ну и отгрузили бы, а вы небось пожадничали.
Как перестать срываться на близких
Аватар автора комментария
Sergei F1 час назад

0 / 0

Величайший кадр - собака+лужа+заброшка из Сталкера.
Шурик и «Груз 200»: в соцсетях делятся «величайшими кадрами из российских фильмов»
Аватар автора комментария
Владимир «Росгард»2 часа назад

0 / 0

прикольно, но хрень, на ролике, стреляет робот практически в упор и промахивается, это как? даже сейчас робот попадает, а тут гораздо продвинут её, и не попадает.
Хидэо Кодзима поделился мнением о боевике «Военная машина» с Аланом Ричсоном
Подарки, которые сближают: 5 товаров с распродажи Авито для второй половинки  

Подарки, которые сближают: 5 товаров с распродажи Авито для второй половинки  

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