Обновить parce.js
This commit is contained in:
parent
c028c7d006
commit
8cb94ad2f8
121
parce.js
121
parce.js
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue