Обновить parce.js

This commit is contained in:
NW 2024-09-25 12:42:17 +00:00
parent c028c7d006
commit 8cb94ad2f8
1 changed files with 90 additions and 31 deletions

121
parce.js
View File

@ -1,34 +1,93 @@
# WhatsApp Group Contacts Parser
// Скрипт для парсинга контактов из групп WhatsApp
Этот проект представляет собой скрипт для парсинга номеров телефонов из групп WhatsApp. Он автоматически прокручивает список участников группы и извлекает уникальные номера телефонов.
/**
* Функция для автоматической прокрутки элемента
* @param {HTMLElement} element - элемент, который нужно прокрутить
* @returns {Promise} - промис, который разрешается, когда прокрутка завершена
*/
function autoScroll(element) {
return new Promise((resolve) => {
const scrollInterval = setInterval(() => {
element.scrollBy(0, 2500); // Прокрутка на 2500 пикселей
## Описание
Скрипт использует JavaScript для работы с DOM элементов веб-страницы WhatsApp Web. Он находит номера телефонов в элементах с определенными селекторами и сохраняет их в уникальном наборе для предотвращения дублирования. Результаты выводятся в формате JSON.
## Функциональность
- **Автоматическая прокрутка**: Скрипт прокручивает список участников, пока не достигнет конца.
- **Парсинг номеров телефонов**: Извлекает уникальные номера телефонов из элементов DOM.
- **Поддержка различных форматов**: Поддерживает международные форматы номеров с кодами стран.
## Установка
1. Скопируйте код скрипта в консоль вашего браузера или сохраните его в файл с расширением `.js`.
2. Откройте [WhatsApp Web](https://web.whatsapp.com).
3. Перейдите в нужную группу и откройте консоль разработчика (F12 или Ctrl+Shift+I).
4. Вставьте скрипт в консоль и нажмите Enter для запуска.
## Запуск
После запуска скрипта он начнет прокрутку и парсинг номеров телефонов. Результаты будут выведены в консоль в формате JSON, включая общее количество уникальных номеров.
```json
{
"count": 10,
"numbers": [
"+1234567890",
"+0987654321",
...
]
// Проверяем, достигли ли конца
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();