Удаление всех записей со стены VK через JavaScript

  • Автор темы Автор темы mexan
  • Дата начала Дата начала
Сообщения
202
Реакции
0
Если на стене ВКонтакте накопились сотни или даже тысячи старых записей, удалять каждую вручную через меню «Удалить запись» довольно долго.

Один из вариантов автоматизировать этот процесс — небольшой JavaScript-скрипт, который запускается непосредственно в консоли браузера. Никаких дополнительных программ или расширений устанавливать не требуется.

Скрипт последовательно находит записи на открытой странице, вызывает контекстное меню, ищет пункт удаления и переходит к следующей записи.

Скрипт удаляет записи со стены, поэтому перед запуском убедитесь, что открыта именно та страница, которую вы хотите очистить.

Также стоит учитывать, что интерфейс ВКонтакте периодически меняется. Скрипт работает с DOM-элементами страницы, поэтому после изменений дизайна или структуры VK отдельные селекторы могут потребовать корректировки.

Как запустить скрипт
  1. Откройте свою страницу ВКонтакте в обычном браузере.
  2. Перейдите к стене с записями.
  3. Откройте инструменты разработчика: F12 или Ctrl + Shift + I
  4. Перейдите на вкладку: Console
    Вставьте приведённый ниже JavaScript-код целиком и нажмите Enter.
  5. После запуска в консоли начнут появляться сообщения о ходе работы: количество найденных записей, удаление очередного поста, ошибки поиска элементов и общее количество удалённых записей.

    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 год.
 
Последнее редактирование:
Назад
Сверху