Parce_WhatsApp_contact_group/parce.js

94 lines
4.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Скрипт для парсинга контактов из групп 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();