commit 0b88ee364a2343c69d6274c44d7820b5fbe92947 Author: NW Date: Sun Jan 26 19:19:54 2025 +0000 Init diff --git a/parce.js b/parce.js new file mode 100644 index 0000000..21545fd --- /dev/null +++ b/parce.js @@ -0,0 +1,92 @@ +// Настройки скрипта +const settings = { + scrollContainerSelector: '.x1n2onr6.x1n2onr6.xyw6214.x78zum5.x1r8uery.x1iyjqo2.xdt5ytf.x6ikm8r.x1odjw0f.x1hc1fzr.x1tkvqr7', // Селектор контейнера для прокрутки + participantSelector: '.x10l6tqk.xh8yej3.x1g42fcv', // Селектор элементов участников + nameSelector: '.x1iyjqo2.x6ikm8r.x10wlt62.x1n2onr6.xlyipyv.xuxw1ft.x1rg5ohu._ao3e', // Селектор имени участника + numberSelector: 'span._ajzr span._ao3e', // Селектор номера телефона + statusSelector: '.x13faqbe._ao3e.selectable-text.copyable-text', // Селектор статуса участника + scrollStep: 72, // Высота прокрутки за один шаг (в пикселях) + scrollDelay: 1000, // Задержка между шагами прокрутки (в миллисекундах) + enableLogs: true, // Включить логирование +}; + +// Функция для прокрутки списка участников +function scrollParticipants() { + const scrollContainer = document.querySelector(settings.scrollContainerSelector); // Контейнер для прокрутки + if (scrollContainer) { + // Симулируем фокус на контейнере + scrollContainer.focus(); + + // Прокручиваем на высоту одного блока (scrollStep) + scrollContainer.scrollTop += settings.scrollStep; + if (settings.enableLogs) { + console.log(`Прокрутка выполнена: scrollTop = ${scrollContainer.scrollTop}px`); + } + return scrollContainer.scrollTop; // Возвращаем текущее значение scrollTop + } else { + console.error('Контейнер для прокрутки не найден'); + return 0; + } +} + +// Функция для парсинга данных +function parseParticipants() { + const participants = []; + const participantElements = document.querySelectorAll(settings.participantSelector); // Элементы участников + + participantElements.forEach(participant => { + const nameElement = participant.querySelector(settings.nameSelector); + const numberElement = participant.querySelector(settings.numberSelector); // Номер телефона + const statusElement = participant.querySelector(settings.statusSelector); + + const name = nameElement ? nameElement.innerText : 'N/A'; + const number = numberElement ? numberElement.innerText : 'N/A'; + const status = statusElement ? statusElement.innerText : 'N/A'; + + participants.push({ name, number, status }); + }); + + return participants; +} + +// Функция для автоматической прокрутки и сбора данных +function collectData() { + const allParticipants = []; + const scrollContainer = document.querySelector(settings.scrollContainerSelector); + + if (!scrollContainer) { + console.error('Контейнер для прокрутки не найден'); + return; + } + + // Получаем общую высоту контента + const totalHeight = parseInt(scrollContainer.scrollHeight, 10); + if (settings.enableLogs) { + console.log(`Общая высота контента: ${totalHeight}px`); + } + + // Функция для выполнения прокрутки и сбора данных + const scrollAndCollect = () => { + const currentScrollTop = scrollParticipants(); // Прокручиваем + const participants = parseParticipants(); // Собираем данные + allParticipants.push(...participants); + + // Проверяем, достигли ли мы конца списка + if (currentScrollTop + scrollContainer.clientHeight >= totalHeight) { + if (settings.enableLogs) { + console.log('Достигнут нижний предел. Все данные собраны:'); + console.table(allParticipants); // Вывод данных в виде таблицы + } + // Здесь можно сохранить данные, например, отправить на сервер или сохранить в файл + } else { + // Продолжаем прокрутку через указанную задержку + setTimeout(scrollAndCollect, settings.scrollDelay); + } + }; + + // Запускаем процесс + scrollAndCollect(); +} + +// Запуск сбора данных +collectData(); \ No newline at end of file