Обновить 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 пикселей
|
||||||
|
|
||||||
## Описание
|
// Проверяем, достигли ли конца
|
||||||
|
if (element.scrollHeight - element.scrollTop <= element.clientHeight) {
|
||||||
Скрипт использует JavaScript для работы с DOM элементов веб-страницы WhatsApp Web. Он находит номера телефонов в элементах с определенными селекторами и сохраняет их в уникальном наборе для предотвращения дублирования. Результаты выводятся в формате JSON.
|
clearInterval(scrollInterval); // Останавливаем прокрутку
|
||||||
|
resolve(); // Завершаем промис
|
||||||
## Функциональность
|
}
|
||||||
|
}, 10000); // Прокрутка каждые 10 секунд
|
||||||
- **Автоматическая прокрутка**: Скрипт прокручивает список участников, пока не достигнет конца.
|
});
|
||||||
- **Парсинг номеров телефонов**: Извлекает уникальные номера телефонов из элементов DOM.
|
|
||||||
- **Поддержка различных форматов**: Поддерживает международные форматы номеров с кодами стран.
|
|
||||||
|
|
||||||
## Установка
|
|
||||||
|
|
||||||
1. Скопируйте код скрипта в консоль вашего браузера или сохраните его в файл с расширением `.js`.
|
|
||||||
2. Откройте [WhatsApp Web](https://web.whatsapp.com).
|
|
||||||
3. Перейдите в нужную группу и откройте консоль разработчика (F12 или Ctrl+Shift+I).
|
|
||||||
4. Вставьте скрипт в консоль и нажмите Enter для запуска.
|
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
После запуска скрипта он начнет прокрутку и парсинг номеров телефонов. Результаты будут выведены в консоль в формате JSON, включая общее количество уникальных номеров.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"count": 10,
|
|
||||||
"numbers": [
|
|
||||||
"+1234567890",
|
|
||||||
"+0987654321",
|
|
||||||
...
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Функция для парсинга номеров телефонов
|
||||||
|
* @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