- Сообщения
- 202
- Реакции
- 0
Если на стене ВКонтакте накопились сотни или даже тысячи старых записей, удалять каждую вручную через меню «Удалить запись» довольно долго.
Один из вариантов автоматизировать этот процесс — небольшой JavaScript-скрипт, который запускается непосредственно в консоли браузера. Никаких дополнительных программ или расширений устанавливать не требуется.
Скрипт последовательно находит записи на открытой странице, вызывает контекстное меню, ищет пункт удаления и переходит к следующей записи.
Скрипт удаляет записи со стены, поэтому перед запуском убедитесь, что открыта именно та страница, которую вы хотите очистить.
Также стоит учитывать, что интерфейс ВКонтакте периодически меняется. Скрипт работает с DOM-элементами страницы, поэтому после изменений дизайна или структуры VK отдельные селекторы могут потребовать корректировки.
Как запустить скрипт
Как остановить скрипт
Если процесс нужно прекратить, самый простой вариант — обновить страницу
После перезагрузки выполнение JavaScript, запущенного через консоль, прекратится.
Актуальность скрипта: 2026 год.
Один из вариантов автоматизировать этот процесс — небольшой JavaScript-скрипт, который запускается непосредственно в консоли браузера. Никаких дополнительных программ или расширений устанавливать не требуется.
Скрипт последовательно находит записи на открытой странице, вызывает контекстное меню, ищет пункт удаления и переходит к следующей записи.
Скрипт удаляет записи со стены, поэтому перед запуском убедитесь, что открыта именно та страница, которую вы хотите очистить.
Также стоит учитывать, что интерфейс ВКонтакте периодически меняется. Скрипт работает с DOM-элементами страницы, поэтому после изменений дизайна или структуры VK отдельные селекторы могут потребовать корректировки.
Как запустить скрипт
- Откройте свою страницу ВКонтакте в обычном браузере.
- Перейдите к стене с записями.
- Откройте инструменты разработчика:
F12илиCtrl + Shift + I - Перейдите на вкладку: Console
Вставьте приведённый ниже JavaScript-код целиком и нажмите Enter. - После запуска в консоли начнут появляться сообщения о ходе работы: количество найденных записей, удаление очередного поста, ошибки поиска элементов и общее количество удалённых записей.
JavaScript:// ============================================ // УДАЛЕНИЕ ВСЕХ ПОСТОВ НА СТЕНЕ VK (ИСПРАВЛЕННАЯ ВЕРСИЯ) // ============================================ async function deleteAllPostsInOrder() { let totalDeleted = 0; let noNewPostsCount = 0; const MAX_ATTEMPTS = 10; let currentIndex = 0; console.log('🚀 Начинаем удаление постов по порядку (от старых к новым)...'); while (noNewPostsCount < MAX_ATTEMPTS) { const posts = document.querySelectorAll( 'div[data-testid*="post"], .wall_post, ._post, .post, [class*="PostRoot"], .feed_row, .wall__post' ); console.log(`📊 Всего постов на странице: ${posts.length}`); if (posts.length === 0) { console.log('⚠️ Посты не найдены. Проверяем...'); noNewPostsCount++; await sleep(1000); continue; } let deletedInThisPass = 0; for (let i = currentIndex; i < posts.length; i++) { const post = posts[i]; try { if (!document.contains(post)) { continue; } // Проверяем видимость поста const rect = post.getBoundingClientRect(); if (rect.top < -200 || rect.top > window.innerHeight + 200) { post.scrollIntoView({ behavior: 'smooth', block: 'center' }); await sleep(300); } // Ищем кнопку меню (три точки) let menuButton = post.querySelector('button[data-testid="post_context_menu_toggle"]'); if (!menuButton) { const alternativeMenu = post.querySelector('.post__header_actions button:last-child'); if (alternativeMenu) { menuButton = alternativeMenu; } else { continue; } } // Кликаем по кнопке меню menuButton.click(); console.log('📌 Открываем меню...'); // Ждем появления меню с увеличенной задержкой await sleep(500); // Ищем кнопку "Удалить" с приоритетом на видимые элементы let deleteButton = null; // Сначала ищем в видимых меню const visibleMenus = document.querySelectorAll( '[role="menu"]:not([hidden]), [role="menuitem"]:not([hidden]), ' + '.vkuiPopover:not([hidden]), .vkuiDropdown:not([hidden]), ' + '.vkuiActionSheet:not([hidden])' ); for (const menu of visibleMenus) { // Проверяем, что меню видимо const menuRect = menu.getBoundingClientRect(); if (menuRect.height === 0) continue; const items = menu.querySelectorAll('button, [role="menuitem"], .vkuiActionSheetItem, div[role="button"]'); for (const item of items) { const text = item.textContent || item.innerText; if (text && (text.includes('Удалить') || text.includes('Delete') || text.includes('Удалить запись'))) { deleteButton = item; console.log('✅ Найдена кнопка "Удалить" в меню'); break; } } if (deleteButton) break; } // Если не нашли, пробуем найти по селекторам if (!deleteButton) { deleteButton = document.querySelector( '[data-testid*="delete"]:not([hidden]), [aria-label*="удалить"]:not([hidden]), ' + '[class*="Delete"]:not([hidden]), .vkuiActionSheetItem:not([hidden])' ); } if (deleteButton) { // Убеждаемся, что кнопка видима и кликабельна if (deleteButton.offsetParent !== null) { deleteButton.click(); console.log(`🗑️ Удаляем пост #${totalDeleted + 1}`); await sleep(300); // Подтверждаем удаление let confirmBtn = document.querySelector( 'button[data-testid*="confirm"], button[class*="confirm"], ' + '.vkuiButton--mode-primary, .vkuiButton--primary, ' + 'button[class*="primary"]' ); // Проверяем все кнопки в диалоге if (!confirmBtn) { const dialog = document.querySelector('[role="dialog"], .vkuiModalRoot, .vkuiPopoutRoot'); if (dialog) { const buttons = dialog.querySelectorAll('button'); for (const btn of buttons) { const text = btn.textContent || btn.innerText; if (text && (text.includes('Удалить') || text.includes('Да') || text.includes('OK') || text.includes('Confirm'))) { confirmBtn = btn; break; } } } } if (confirmBtn) { confirmBtn.click(); console.log('✅ Подтверждено удаление'); await sleep(200); } totalDeleted++; deletedInThisPass++; await sleep(300); currentIndex = i; } else { console.log('⚠️ Кнопка "Удалить" не видима'); document.body.click(); await sleep(200); } } else { console.log('❌ Кнопка "Удалить" не найдена, закрываем меню'); // Закрываем меню через Escape document.body.click(); // Или через Esc const escEvent = new KeyboardEvent('keydown', { key: 'Escape' }); document.dispatchEvent(escEvent); await sleep(200); } } catch (error) { console.warn('⚠️ Ошибка при удалении поста:', error); // Пытаемся закрыть меню document.body.click(); await sleep(200); continue; } } console.log(`✅ Удалено за этот проход: ${deletedInThisPass} постов`); console.log(`📈 Всего удалено: ${totalDeleted} постов`); if (deletedInThisPass === 0) { noNewPostsCount++; console.log(`⏳ Попытка ${noNewPostsCount} из ${MAX_ATTEMPTS} без удалений`); window.scrollBy({ top: window.innerHeight * 0.5, behavior: 'smooth' }); await sleep(1000); } else { noNewPostsCount = 0; if (deletedInThisPass > 2) { window.scrollBy({ top: window.innerHeight * 0.3, behavior: 'smooth' }); await sleep(500); } currentIndex = 0; } if (deletedInThisPass === 0 && noNewPostsCount > 5) { console.log('🔍 Проверяем конец стены...'); const lastPost = posts[posts.length - 1]; if (lastPost) { lastPost.scrollIntoView({ behavior: 'smooth' }); await sleep(500); } } } console.log(`🎉 УДАЛЕНИЕ ЗАВЕРШЕНО! Удалено всего постов: ${totalDeleted}`); console.log('💡 Если остались посты, запустите скрипт еще раз.'); } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } console.log('🔥 Запуск исправленного скрипта удаления...'); console.log('📌 Не переключайте вкладку во время работы'); deleteAllPostsInOrder();
Как остановить скрипт
Если процесс нужно прекратить, самый простой вариант — обновить страницу
F5. После перезагрузки выполнение JavaScript, запущенного через консоль, прекратится.
Актуальность скрипта: 2026 год.
Последнее редактирование: