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

Эта светодиодная лента создаёт волшебную атмосферу и стоит меньше двух тысяч рублей

Эта светодиодная лента создаёт волшебную атмосферу и стоит меньше двух тысяч рублей

Надо брать: машинка для стрижки от Xiaomi со скидкой 72%

Надо брать: машинка для стрижки от Xiaomi со скидкой 72%

Проектор Wanbo Mozart 1 Pro 2025

Выбрасываем телевизор и забираем проектор Wanbo Mozart 1 Pro с хорошей скидкой

Баланс цены и мощности: 4 игровых ПК DigitalRazor Core до 142 000 рублей

Баланс цены и мощности: 4 игровых ПК DigitalRazor Core до 142 000 рублей

25 очаровательных товаров для дома, которые можно купить со скидкой

25 очаровательных товаров для дома, которые можно купить со скидкой

Распродажа Чёрная пятница наAliExpress

15 достойных внимания товаров со скидками до 67% на «чёрной пятнице»

iPhone 17 Pro подешевеет до 99 990 рублей в «чёрную пятницу». Добавляйте в корзину сейчас!

iPhone 17 Pro подешевеет до 99 990 рублей в «чёрную пятницу». Добавляйте в корзину сейчас!

Это интересно
Нейросети меняют рынок труда. Что нужно сделать сегодня, чтобы оставаться востребованным завтра

Нейросети меняют рынок труда. Что нужно сделать сегодня, чтобы оставаться востребованным завтра

Не просто плохое настроение: 6 фактов о депрессии, которые нужно знать каждому

Не просто плохое настроение: 6 фактов о депрессии, которые нужно знать каждому

Экология, инфраструктура и перспективы: 3 причины переехать на север Москвы

Экология, инфраструктура и перспективы: 3 причины переехать на север Москвы

Рак груди во время беременности: что&nbsp;нужно знать

Рак груди во время беременности: что нужно знать

Комментарии
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() // Сброс кнопки остановки
Что вы могли пропустить
Huawei показала раскладушку Mate X7 с защитой IP59 и увеличенной батареей
Huawei показала раскладушку Mate X7 с защитой IP59 и увеличенной батареей
0
Вчера
Новости
Устройства
Samsung перезапустит Bixby в Galaxy S26 — в голосового помощника встроят Perplexity
Samsung перезапустит Bixby в Galaxy S26 — в голосового помощника встроят Perplexity
0
Вчера
Новости
Технологии
Huawei выпустила прозрачный роутер с мини-горой внутри и подсветкой
Huawei выпустила прозрачный роутер с мини-горой внутри и подсветкой
0
Вчера
Новости
Устройства
15 гаджетов, которые помогут согреться и пережить холода
15 гаджетов, которые помогут согреться и пережить холода
0
Вчера
Устройства
Устройства
Disney создала роботизированного Олафа из «Холодного сердца» — он выглядит как живой
Disney создала роботизированного Олафа из «Холодного сердца» — он выглядит как живой
0
Вчера
Новости
Технологии
Huawei анонсировала MatePad Edge — мощный планшет с ноутбучным чипом и 140-ваттной зарядкой
Huawei анонсировала MatePad Edge — мощный планшет с ноутбучным чипом и 140-ваттной зарядкой
0
Вчера
Новости
Устройства
Представлена серия смартфонов Huawei Mate 80 с 20 ГБ ОЗУ и семью камерами
Представлена серия смартфонов Huawei Mate 80 с 20 ГБ ОЗУ и семью камерами
0
Вчера
Новости
Устройства
Без интернета, но с пропагандой: YouTube-блогер изучил два смартфона из Северной Кореи
Без интернета, но с пропагандой: YouTube-блогер изучил два смартфона из Северной Кореи
0
Вчера
Новости
Устройства
Баланс цены и мощности: 4 игровых ПК DigitalRazor Core до 142 000 рублей
Баланс цены и мощности: 4 игровых ПК DigitalRazor Core до 142 000 рублей
Вчера
Покупки
Технологии
В ChatGPT появилась функция «Исследование покупок» — как персональный продавец-консультант
В ChatGPT появилась функция «Исследование покупок» — как персональный продавец-консультант
0
Вчера
Веб-сервисы
Новости
У ИИ-устройства Сэма Альтмана и Джони Айва появился прототип — но релиза придётся подождать
У ИИ-устройства Сэма Альтмана и Джони Айва появился прототип — но релиза придётся подождать
0
Вчера
Новости
Устройства
Представлены Honor 500 и 500 Pro — смартфоны с батареями на 8 000 мА·ч и сенсорной кнопкой для съёмки
Представлены Honor 500 и 500 Pro — смартфоны с батареями на 8 000 мА·ч и сенсорной кнопкой для съёмки
0
24 ноября
Новости
Устройства
Что лучше — ноутбук или стационарный компьютер
Что лучше — ноутбук или стационарный компьютер
0
24 ноября
Ликбез
Устройства
«Проводник» в Windows 11 будет загружаться быстрее — особенно на слабых ПК
«Проводник» в Windows 11 будет загружаться быстрее — особенно на слабых ПК
0
24 ноября
Windows
Новости
Передача файлов с Android на iPhone и обратно заработает на Snapdragon-смартфонах
Передача файлов с Android на iPhone и обратно заработает на Snapdragon-смартфонах
0
24 ноября
Android
Новости

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

Аватар автора комментария
Александр Кузичев55 минут назад

0 / 0

увы, за 3 тысячи рублей вы получаете просто повербанк в тяжелом корпусе - не более. если реально интересен джампстартер (бустер), смотрите в сторону бренда CARKU (или его ближайших конкурентов), на примере модели Pro-60. Да дороговато, но зато вы не спалите авто и не будете переживать на счет емкости устройства и его характеристиках на морозе.
5 пусковых устройств для автомобиля, которые можно выгодно купить на «чёрной пятнице»
Аватар автора комментария
всем нам кирдык, и вам тоже1 час назад

0 / 0

По просьбам трудящихся, не иначе.
В России утвердили технологический сбор на ввозимую электронику — техника подорожает
Аватар автора комментария
Alex3 часа назад

0 / 0

Кто-нибудь пробовал это приложение- FlashGet Kids, поделитесь вречатлениями🙏
8 лучших приложений для родительского контроля на Android и iOS в 2025 году
Аватар автора комментария
Alex3 часа назад

0 / 0

Касперский, где мои дети - не рекомендую, просто выброшенные деньги. Ребенок выключил тел или перезагрузил- все ограничения родителя слетают; писали в тех. Поддержку - ничего сделать с этим не могут. Сейчас тоже в поиске приложения род.контроля. И кто-то тут писал про шпионить, смысл не в этом, а в том что бы умеренно ограничить использование гаджетов, и весь этот потом дерьма, которого полного в интернете. А наша школа, только добааила масла в огонь- убрав ведение дневника, д/з, которое давал учитель и т.д. Теперь все в МЭШ- гори он в аду🤬🤬🤬
8 лучших приложений для родительского контроля на Android и iOS в 2025 году
Задача — дойти до школы самому: как подготовить ребёнка и убедиться, что всё будет в порядке&nbsp;

Задача — дойти до школы самому: как подготовить ребёнка и убедиться, что всё будет в порядке  

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