Задача. Необходимо массово удалить разом все посты (темы, записи, заметки) в группе на Одноклассниках.
Решение. В самой социальной сети функции удалить все посты сразу нет. Можно удалять только вручную. Чтобы автоматизировать данный процесс предлагаю использовать js-скрипт («костыль», конечно, но у меня получилось». Скрипт будет удалять только видимые на экране посты. Поэтому заранее необходимо страницу максимально прокрутить вниз, чтобы подгрузились все посты (это тоже автоматизируем).
Алгоритм удаления всех постов в Одноклассниках:
- Перейти в группу на Одноклассниках.
- Перейти на вкладку «Темы».
- Открыть консоль разработчика в браузере (обычно F12).
- В консоли перейти во вкладку «Console».
- Нужно прокрутить страницу всавить, чтобы все посты прогрузились на странице. Это можно сделать автоматически, вставив в консоль Код №1 и выполнить его, нажав Enter.
- Когда пролистается до последнего поста или посчитаете необходимым остановить скроллинг, нужно остановить скрипт скроллинга функцией
clearInterval(setScroll);
. - Для удаления постов вставить в консоль Код №2 и нажать Enter.
- Должно появиться диалоговое окно с предложением удалить посты — Согласиться.
Конечно будут посты некоторые пропускаться (в консоли можно будет увидеть сообщение «Пропуск»), но можно будет обновить страницу и еще раз пройтись скриптом. Всёже это быстрее, чем вручную мотать 2 тысячи постов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
async function scrollPageOk (){ // Если присутствует класс кнопки "Показать ещё", тогда if (!document.body.querySelector('.loader-container .loader-controls-bottom')) { // Получаем количество пикселей на которое сейчас прокручен документ let yPage = window.pageYOffset; // Клик по кнопке "Показать ещё" (бывает перекидывает в самый верх) document.body.querySelector('.loader-controls-bottom a').click(); window.scroll(0, yPage); // Прокручиваем страницу к месту где закончили await new Promise(r => setTimeout(r, 1000)); // Ждем 1 сек console.log("Клик"); } window.scrollBy (0,1000); // Прокрутка экрана на 1000px } let setScroll = setInterval (scrollPageOk, 200); // Start прокрутки clearInterval(setScroll); // Stop прокрутки |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
async function deleteOkPosts() { // Получаем элемент при наведении на который появляется блок с "удалить" let selectPostLink = document.body.querySelectorAll('.feed_menu_ic'); for (var i = 0; i < selectPostLink.length; i++) { // Создаем событие наведения на элемент var event = new Event('mouseenter', { 'view': window, 'bubbles': true, 'cancelable': true }); // Добавляем событие (Имитируем наведение курсора на элемент) selectPostLink[i].dispatchEvent(event); // Ждем секунд, чтобы сработали скрипты ОК await new Promise(r => setTimeout(r, 1000)); // Получаем элемент Удалить let deleteElement = document.body.querySelectorAll('#hook_Block_ShortcutMenu .u-menu_li a')[1]; // Если элемента Удалить нет, то подождем 2 секунд (чтобы все еще подгрузилось) и пропустим эту итерацию цикла if (deleteElement == undefined) { await new Promise(r => setTimeout(r, 2000)); console.log("Пропуск " + [i]); continue; } else { // Если элемент есть, то имитируем клик по нему console.log([i] +" - " + deleteElement); deleteElement.click(); } } console.log(selectPostLink.length + ' posts deleted'); }; if (confirm("Удалить темы?")){ deleteOkPosts(); } |
- В строке
.querySelectorAll('#hook_Block_ShortcutMenu .u-menu_li a')[1];
мы получаем эемент Удалить. В данном случае это 2-й элемент в массиве, а ранее был 3-й (т.е. было [2]). Сами «Одноклассники» могут менять свой код. Поэтому стоит учитывать и проверить если что. - В строке
new Promise(r => setTimeout(r, 1000))
можно увеличить число миллисекунд, если пропускается много постов.
а где сами коды?
В статье Код №1 и Код №2. Подписано же.
Приветствую, скрипт на удаление прекрасно работает, а вот прокрутка перестала работать 🙁
Возможно как-то противодействуют подобным манипуляциям. А что в консоли пишет?
Пишет undefined после вставки скрипта в консоль и ничего не происходит
async function scrollPageOk (){
// Если присутствует класс кнопки «Показать ещё», тогда
if (!document.body.querySelector(‘.loader-container .loader-controls-bottom’)) {
// Получаем количество пикселей на которое сейчас прокручен документ
let yPage = window.pageYOffset;
// Клик по кнопке «Показать ещё» (бывает перекидывает в самый верх)
document.body.querySelector(‘.loader-controls-bottom a’).click();
window.scroll(0, yPage); // Прокручиваем страницу к месту где закончили
await new Promise(r => setTimeout(r, 1000)); // Ждем 1 сек
console.log(«Клик»);
}
window.scrollBy (0,1000); // Прокрутка экрана на 1000px
}
let setScroll = setInterval (scrollPageOk, 200); // Start прокрутки
Последнюю строку не вставляйте в код
clearInterval(setScroll); // Stop прокрутки
/* Код Игоря */
Последнюю строку не вставляйте в код
clearInterval(setScroll); // Stop прокрутки
VM845:3 Uncaught SyntaxError: Invalid or unexpected token