feat: complete multi page feedback

This commit is contained in:
MasterAkulon 2026-03-27 10:48:59 +03:00
parent de58fa6687
commit 6243ccb470

View file

@ -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();