diff --git a/script.js b/script.js index c4dce03..847da9a 100644 --- a/script.js +++ b/script.js @@ -98,21 +98,22 @@ textarea.dispatchEvent(reactEvent); } - async function handleFeedbackForm(form) { - console.log('📝 Форма обратной связи...'); + function isLastFeedbackPage(form) { + const counter = form.querySelector('.quiz__counter'); + if (!counter) return true; + const parts = counter.textContent.split('—').map(s => s.trim()); + return parts.length === 2 && parts[0] === parts[1]; + } - // Проверяем, есть ли текстовое поле + async function handleFeedbackPage(form) { const textarea = form.querySelector(FEEDBACK_TEXTAREA_SELECTOR); if (textarea) { - // Симулируем ввод текста simulateTyping(textarea, 'СПАСИБО!'); console.log('✓ Введён текст "СПАСИБО!"'); await sleep(500); - // Пробуем ещё раз если кнопка всё ещё disabled let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR); if (nextBtn && nextBtn.disabled) { - // Ещё один способ - через React fiber const reactKey = Object.keys(textarea).find(key => key.startsWith('__reactFiber') || key.startsWith('__reactProps')); if (reactKey) { const reactProps = textarea[reactKey]; @@ -123,7 +124,6 @@ await sleep(300); } } else { - // Обрабатываем radio-кнопки const radioGroups = form.querySelectorAll('.likert-scale__statement-row'); for (const row of radioGroups) { const firstRadio = row.querySelector('input[type="radio"]'); @@ -137,7 +137,6 @@ await sleep(300); - // Ждём пока кнопка станет активной let nextBtn = form.querySelector(FEEDBACK_NEXT_SELECTOR); let attempts = 0; while (nextBtn && nextBtn.disabled && attempts < 15) { @@ -146,29 +145,42 @@ attempts++; } - if (nextBtn && !nextBtn.disabled) { - nextBtn.click(); - console.log('✓ Нажата кнопка "Далее"'); - handledFeedbacks.add(form); - await sleep(CLICK_DELAY); - return true; - } - - // Если кнопка всё ещё disabled, пробуем кликнуть принудительно - if (nextBtn) { + if (nextBtn && nextBtn.disabled) { console.log('⚠️ Кнопка disabled, пробуем принудительный клик...'); nextBtn.disabled = false; nextBtn.classList.remove('button2_disabled'); + } + + if (nextBtn) { nextBtn.click(); - handledFeedbacks.add(form); + console.log('✓ Нажата кнопка "Далее"'); await sleep(CLICK_DELAY); return true; } - handledFeedbacks.add(form); return false; } + async function handleFeedbackForm(form) { + console.log('📝 Форма обратной связи...'); + + while (true) { + const last = isLastFeedbackPage(form); + const counter = form.querySelector('.quiz__counter'); + console.log(`📄 Страница: ${counter ? counter.textContent.trim() : '?'}`); + + await handleFeedbackPage(form); + + if (last) break; + + // Ждём загрузки следующей страницы формы + await sleep(CLICK_DELAY); + } + + handledFeedbacks.add(form); + return true; + } + async function handleQuizForm(form) { console.log('❓ Квиз...'); @@ -495,7 +507,7 @@ if (found) { await handleCourseModal(); } - } else if (window.location.pathname.includes('/trainer/')) { + } else if (window.location.pathname.includes('/trainer/') && window.monaco?.editor.getEditors().length > 0) { await handleTrainerPage(); } else { run();