Как массово сделать предложения неактуальными в Getcourse
Есть в Getcourse один маленький, но очень раздражающий момент: массово перевести предложения из «Актуален» в «Неактуален» штатными средствами нельзя. Да, в таблице предложений есть чекбоксы. Можно выбрать сразу несколько предложений, но из массовых действий для них доступна только смена ставки НДС. Изменить таким способом актуальность предложений не получится. А если менять актуальность вручную, после каждого клика Getcourse ещё просит подтвердить действие. Когда предложений несколько десятков, работа превращается в бесконечное «Актуален → подтвердить → следующее → подтвердить» 😅 Поэтому я собрала с помощью ChatGPT код, который значительно ускоряет эту задачу. Как он работает Сначала через фильтр по кодовому слову, названию или тегу оставляем на странице только те предложения, которые действительно нужно перевести в «Неактуальные». Если предложений много и они занимают несколько страниц, нажимаем «Все», чтобы Getcourse показал их на одной странице. После этого открываем консоль браузера и запускаем код. Как открыть консоль: Chrome / Edge на Windows: F12 → вкладка Console Chrome / Edge на Mac: ⌘ + Option + J Firefox: F12 → Console Safari: сначала включите меню Разработка в настройках Safari, затем Разработка → Показать консоль JavaScript Перед запуском обязательно проверьте, что на странице остались только нужные предложения. Код обработает все предложения со статусом «Актуален», которые сейчас отображаются на странице.
Код в продолжении поста
После запуска в консоли будут появляться сообщения о процессе: какое предложение сейчас обрабатывается, какие уже переведены и есть ли ошибки. Итого получается такой алгоритм: Фильтруем предложения → нажимаем «Все» → проверяем список → открываем Console → вставляем код → Enter → готово. Я уже протестировала этот вариант на реальной странице с предложениями, и он отработал как нужно. В HTML Getcourse у ссылок актуальности действительно есть отдельный класс change-actuality-link, а ID предложения передаётся через data-object-id, поэтому код работает через штатный механизм изменения актуальности. index.html Сохраните себе код. Особенно пригодится тем, кто регулярно закрывает старые предложения, консультации, тарифы или другие временные офферы, которых в школе накопились сотни. #GetCourse #геткурс #техническийспециалист #техническийспециалистгеткурс #онлайншкола #автоматизация #онлайнобразование
· 2 ч
(async () => { const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); let done = 0; let errors = 0;
console.log('🚀 Запуск массового перевода предложений в «Неактуален»');
while (true) {
// Ищем первое предложение, которое сейчас «Актуален» const links = [...document.querySelectorAll( '#grid-offers a.change-actuality-link' )];
const link = links.find(el => el.textContent.trim() === 'Актуален' );
// Больше актуальных предложений нет if (!link) { console.log(\✅ Готово. Обработано: ${done}\); break; }
const id = link.dataset.objectId;
try { // Отключаем подтверждение link.dataset.needConfirm = '0'; link.setAttribute('data-need-confirm', '0');
if (window.jQuery) { $(link) .attr('data-need-confirm', '0') .data('need-confirm', 0) .data('needConfirm', 0); }
console.log(\⏳ Обрабатываю предложение ${id}\);
const oldText = link.textContent.trim();
// Запускаем штатный обработчик Getcourse link.click();
// Ждём завершения AJAX / PJAX let success = false;
for (let i = 0; i < 100; i++) { await sleep(300);
const row = document.querySelector( \tr[data-key="${id}"]\ );
if (!row) { success = true; break; }
const currentLink = row.querySelector( 'a.change-actuality-link' );
if ( currentLink && currentLink.textContent.trim() !== oldText ) { success = true; break; }
// Если Getcourse всё-таки показал подтверждение const buttons = [ ...document.querySelectorAll('button, a') ];
const confirmButton = buttons.find(btn => { const text = btn.textContent.trim(); const style = getComputedStyle(btn);
return ( style.display !== 'none' && style.visibility !== 'hidden' && text.includes('Сделать неактуальным') ); });
if (confirmButton) { console.log(\✔ Подтверждаю предложение ${id}\); confirmButton.click(); } }
if (success) { done++; console.log(\✅ ${id} → Неактуален\); } else { errors++; console.warn( \⚠️ Не удалось дождаться результата для ${id}\ ); }
} catch (e) { errors++; console.error( \❌ Ошибка у предложения ${id}, e );
await sleep(1000); }
// Небольшая пауза между предложениями await sleep(500); }
console.log( \🏁 Завершено. Успешно: ${done}, ошибок: ${errors}\ ); })();
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён