// Скрипт для парсинга контактов из групп WhatsApp /** * Функция для автоматической прокрутки элемента * @param {HTMLElement} element - элемент, который нужно прокрутить * @returns {Promise} - промис, который разрешается, когда прокрутка завершена */ function autoScroll(element) { return new Promise((resolve) => { const scrollInterval = setInterval(() => { element.scrollBy(0, 2500); // Прокрутка на 2500 пикселей // Проверяем, достигли ли конца if (element.scrollHeight - element.scrollTop <= element.clientHeight) { clearInterval(scrollInterval); // Останавливаем прокрутку resolve(); // Завершаем промис } }, 10000); // Прокрутка каждые 10 секунд }); } /** * Функция для парсинга номеров телефонов * @returns {Array} - массив найденных номеров телефонов */ function parsePhoneNumbers() { // Собираем все элементы span, которые могут содержать номера телефонов const phoneElements = document.querySelectorAll('div[role="gridcell"] span[dir="auto"], div[role="gridcell"] span[title]'); // Создаем массив для хранения всех номеров const phoneNumbers = []; // Проходим по каждому элементу и извлекаем номер телефона phoneElements.forEach(element => { const phoneNumber = element.textContent.trim(); // Получаем текст из элемента // Проверяем, соответствует ли текст формату номера телефона if (phoneNumber.match(/(?:\+?\d[\d\s\-()]*\d)/g)) { phoneNumbers.push(phoneNumber); } }); return phoneNumbers; // Возвращаем собранные номера } /** * Основная функция для прокрутки и парсинга */ async function scrollAndParse() { const block = document.querySelector('.x1n2onr6.x1n2onr6.xyw6214.x78zum5.x1r8uery'); // Замените селектор на нужный const allNumbers = new Set(); // Используем Set для уникальных номеров let previousCount = 0; // Количество номеров перед последней проверкой // Создаем наблюдатель для отслеживания изменений в DOM const observer = new MutationObserver(() => { const newNumbers = parsePhoneNumbers(); // Парсим новые данные newNumbers.forEach(number => allNumbers.add(number)); // Добавляем новые данные в Set previousCount = allNumbers.size; // Обновляем количество собранных номеров }); observer.observe(block, { childList: true, subtree: true }); // Наблюдаем за дочерними элементами while (true) { await autoScroll(block); // Ждем завершения прокрутки // Проверяем, есть ли новые элементы if (previousCount === allNumbers.size) { break; // Если новых номеров нет, выходим из цикла } // Задержка перед следующей прокруткой, чтобы элементы успели подгрузиться await new Promise(resolve => setTimeout(resolve, 2000)); // Ждем 2 секунды } // Останавливаем наблюдатель observer.disconnect(); // Конвертируем Set с номерами в массив и затем в JSON const resultJson = JSON.stringify({ count: allNumbers.size, // Общее количество уникальных элементов numbers: Array.from(allNumbers) }, null, 2); // Выводим результат в консоль console.log(resultJson); console.log("Общее количество записей в массиве: " + allNumbers.size); // Размер итогового массива // Если нужно сразу получить JSON-объект, а не строку: return resultJson; } // Запускаем прокрутку и парсинг scrollAndParse();