feat: complete multi page feedback
This commit is contained in:
parent
de58fa6687
commit
6243ccb470
1 changed files with 33 additions and 21 deletions
54
script.js
54
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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue