- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток. Подскажите есть скрипт он применяется в ZennoPoster. скрипт рабочий и предназначен для клика по надписи "Показать ещё 5", где цифра может меняться. надписи "Показать ещё 5" прикреплена к конкретному блоку "Нежилые помещения" и действия осуществляются только в этом блоке. сам скрипт отрабатывает и делает клик по надписи, но когда текст полностью исчезает даже из DOM страницы, то скрипт все равно продолжает кликать. как сделать так, чтобы после пропадания надписи скрипт прекращал работу. приложил скрипт и код из DOM.
(function() { // Функция для клика по кнопке "Показать ещё" function clickShowMore() { try { const titles = document.querySelectorAll('.FlatGroups__Title-sc-jd2s28-15'); for (let i = 0; i < titles.length; i++) { const title = titles[i]; if (title.textContent.trim() === 'Нежилые помещения') { const mainWrapper = title.closest('.FlatGroups__FlatGroupWrapper-sc-jd2s28-8'); if (mainWrapper) { const showMoreBtn = mainWrapper.querySelector('.FlatGroupDetails__ButtonMore-sc-1uwm85r-3'); if (showMoreBtn) { const buttonText = showMoreBtn.textContent.trim(); if (buttonText.includes('Показать ещё')) { console.log('Кликаем по кнопке "Показать ещё"'); showMoreBtn.click(); console.log('Кликнули по кнопке "Показать ещё"'); // Задержка (блокирующая, но более совместимая) var start = new Date().getTime(); for (var j = 0; j < 1e7; j++) { if ((new Date().getTime() - start) > 1000){ break; } } return "CLICKED"; // Кликнули, нужно повторить } else { console.log('Кнопка "Показать ещё" не содержит ожидаемый текст.'); } } else { console.log('Кнопка "Показать ещё" не найдена.'); } } } } console.log("Показать ещё" отсутствует. Завершаем работу.'); return "DONE"; // Кнопки нет, заканчиваем } catch (error) { console.error('Произошла ошибка:', error); return "ERROR"; // Произошла ошибка } } let result = clickShowMore(); return result; // Возвращаем результат })();Доброго времени суток. Подскажите есть скрипт он применяется в ZennoPoster. скрипт рабочий и предназначен для клика по надписи "Показать ещё 5", где цифра может меняться. надписи "Показать ещё 5" прикреплена к конкретному блоку "Нежилые помещения" и действия осуществляются только в этом блоке. сам скрипт отрабатывает и делает клик по надписи, но когда текст полностью исчезает даже из DOM страницы, то скрипт все равно продолжает кликать. как сделать так, чтобы после пропадания надписи скрипт прекращал работу. приложил скрипт и код из DOM
Такие вопросы надо решать через чатгпт
Проблема, скорее всего, в том, что после исчезновения текста кнопки DOM-дерево может измениться, но скрипт продолжает работать потому что цикл повторного клика не выходит при отсутствии элемента. Ниже можно предложить несколько подходов, чтобы остановить работу после пропадания надписи.
Предлагаемые решения (выберите один или комбинируйте):
Ниже пример переработанного скрипта с учетом пунктов 1 и 2. Он пытается кликнуть по кнопке только если она действительно указывается как кнопка “Показать ещё” внутри блока “Нежилые помещения” и прекращает работу, если надпись исчезла.
(function() { // Флаг завершения let finished = false; // Функция для клика по кнопке "Показать ещё" function clickShowMore() { try { // Находим все секции с заголовками const titles = document.querySelectorAll('.FlatGroups__Title-sc-jd2s28-15'); for (let i = 0; i < titles.length; i++) { const title = titles[i]; // Ищем нужную секцию по тексту if (title.textContent.trim() === 'Нежилые помещения') { const mainWrapper = title.closest('.FlatGroups__FlatGroupWrapper-sc-jd2s28-8'); if (mainWrapper) { const showMoreBtn = mainWrapper.querySelector('.FlatGroupDetails__ButtonMore-sc-1uwm85r-3'); if (showMoreBtn) { const buttonText = showMoreBtn.textContent.trim(); // Проверяем текст кнопки и наличие элемента if (buttonText.includes('Показать ещё')) { console.log('Кликаем по кнопке "Показать ещё"'); showMoreBtn.click(); console.log('Кликнули по кнопке "Показать ещё"'); // Небольшая задержка (можно заменить на более точную, но без блокирующей) const start = Date.now(); while (Date.now() - start < 100) { // просто ждать ~100мс, не блокируя основной поток слишком долго // можно оставить пустым, но цикл даст минимальную задержку } return "CLICKED"; // попробовали кликнуть, повторим цикл } else { console.log('Кнопка "Показать ещё" не содержит ожидаемый текст.'); // Раздел про завершение: кнопка есть, но текст другой — возможно она недоступна // Продолжаем цикл поиска по другим секциям } } else { console.log('Кнопка "Показать ещё" не найдена.'); } } } } // Если ни одна секция не содержит нужной кнопки — завершаем console.log("Показать ещё" отсутствует. Завершаем работу."); finished = true; return "DONE"; } catch (error) { console.error('Произошла ошибка:', error); finished = true; return "ERROR"; } } // Основной цикл выполнения: повторяем до DONE или ERROR // Ограничение по количеству повторов, чтобы не зацикливаться бесконечно let maxTries = 50; let result = "PENDING"; while (!finished && maxTries-- > 0) { result = clickShowMore(); if (result === "CLICKED") { // повторяем попытку повторного клика в следующем проходе // можно добавить небольшую задержку // здесь просто идём к следующей итерации continue; } else { // DONE или ERROR - завершаемся break; } } return result; })();Дополнительные заметки:
СПАСИБО ЗА ОТКЛИК, НО ВАШ СКРИПТ НА ДАННЫЙ МОМЕНТ ДАЖЕ ПО КНОПКЕ НЕ КЛИКАЕТ, ПОЭТОМУ ОСНОВНУЮ ПРОБЛЕМУ РЕШАТЬ ПРИ ЭТОМ НЕТ СМЫСЛА.
это не мой скрипт. а чатгпт. с первого раза он часто кодирует не совсем правильно. и если после применения скрипта ему указывать какие ошибки возникают, то он переделывает код и рано или поздно код нормально заработает
это не мой скрипт. а чатгпт. с первого раза он часто кодирует не совсем правильно. и если после применения скрипта ему указывать какие ошибки возникают, то он переделывает код и рано или поздно код нормально заработает
А зачем постить непонятный вам и непроверенный скрипт? =) Чтобы что?
А зачем постить непонятный вам и непроверенный скрипт? =) Чтобы что?
ну как зачем? чтобы и вы отметились в данном топике)
А вы считаете, что перепостив человеку нерабочий ответ чатгпт, даже не проверив его, принесли пользу кому-либо? =) Или вы проверили код, и он у вас работает?
Лучше использовать стандартные средства - конструктор действий zennoposter и поиск по XPath (JS может и не выполниться)
Без самого сайта трудно подсказать, но там полюбому есть блоки и классы. Когда кнопка активная у неё один класс, когда неактивна - другой. Так можно построить xpath и кликать на нужное, а если этого нет - значит идти по красной ветке.
Показать ещё" отсутствует. Завершаем работу?
в конце это рабочий код или только для отладки или же это именно желаемое поведение, чтоб этот скрипт выполнялся.
let result = clickShowMore(); return result; // Возвращаем результатЯ зено постером не пользовался. но с ути как я понял это автоматизация действий человека. И суть скрипта если есть нужные блоки на странице выполнить клик. Вы хотите чтоб код не выполнялся, если на странице нет таковых блоков. Для этого нужно выполнить проверку наличия этих блоков (что данный код и выполняет). Что не так? и почему он не должен работать в этом сценарии?
Если бы функция вешалась обработчиком клика не какой то объект, вот тогда ее можно было бы убрать: при очередном клике проверяете что кликов больше не потребуется и снимаете обработчик.
Если вы хотите уменьшить количестов проверок - доставайте из текста цифру и сохраняйте ее в глобальной переменной самой первой проверкой проверяйте значение.
В общем хорошо бы сначала описать саму суть решаемой проблемы.