Автоматически принимайте cookie-баннеры без клика
Окна согласия cookie — это пункт оплаты проезда в современном вебе. Вы платите ту же пошлину на каждом сайте каждый день. Короткое JavaScript-правило JustZix может оплатить её за вас — кликая по кнопке принятия (или отклонения) в тот же миг, как баннер появляется.
Как работают баннеры
Большинство диалогов согласия — это обычный блок HTML, вставленный в страницу. Обычно они содержат кнопку с предсказуемым текстом — «Принять», «Принять всё», «Я согласен», «Понятно» — или узнаваемый id/класс. Поскольку JS JustZix работает в контексте страницы, вы можете найти эту кнопку и кликнуть её программно.
Простейшая версия: клик по тексту кнопки
Это правило сканирует каждую кнопку на странице и кликает первую, чья метка совпадает со списком фраз принятия. Оно нечувствительно к регистру и обрезает пробелы.
var ACCEPT = ['accept all', 'accept', 'i agree', 'agree', 'got it', 'allow all',
'принять всё', 'принять все', 'принять', 'я согласен', 'согласен', 'понятно'];
function clickConsent() {
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (ACCEPT.indexOf(label) !== -1) {
buttons[i].click();
return true;
}
}
return false;
}
clickConsent();
Обработка баннеров, загружающихся поздно
Многие менеджеры согласия (страница запускает их через менеджер тегов) вставляют баннер через секунду-две после загрузки. JustZix запускает ваш JS один раз за загрузку страницы, так что один вызов может пропустить поздний баннер. Используйте MutationObserver, чтобы следить за новыми узлами и повторять попытку, затем остановитесь, когда добьётесь успеха.
var ACCEPT = ['accept all', 'accept', 'i agree', 'agree', 'got it', 'allow all',
'принять всё', 'принять все', 'принять', 'я согласен', 'согласен', 'понятно'];
function clickConsent() {
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (ACCEPT.indexOf(label) !== -1) { buttons[i].click(); return true; }
}
return false;
}
if (!clickConsent()) {
var observer = new MutationObserver(function () {
if (clickConsent()) observer.disconnect();
});
observer.observe(document.documentElement, { childList: true, subtree: true });
setTimeout(function () { observer.disconnect(); }, 10000);
}
Страховка setTimeout отсоединяет наблюдателя через десять секунд, так что он никогда не работает вечно на странице, где баннера нет.
Нацеливание на конкретную платформу согласия
Если вы заходите лишь на горстку сайтов, нацельтесь на точную кнопку по селектору — это быстрее и избегает случайных кликов. Осмотрите баннер в DevTools, скопируйте id или класс и используйте его напрямую.
function clickById(selectors) {
for (var i = 0; i < selectors.length; i++) {
var el = document.querySelector(selectors[i]);
if (el) { el.click(); return true; }
}
return false;
}
clickById([
'#onetrust-accept-btn-handler',
'.cookie-consent__accept',
'button[data-testid="accept-all"]'
]);
Предпочитаете отклонять?
Пользователи, заботящиеся о приватности, могут перевернуть логику — просто поменяйте список фраз. Многие баннеры теперь по закону обязаны иметь кнопку «Отклонить всё», так что это работает на множестве сайтов.
var REJECT = ['reject all', 'reject', 'decline', 'necessary only', 'only necessary',
'отклонить всё', 'отклонить все', 'отклонить', 'только необходимые'];
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (REJECT.indexOf(label) !== -1) { buttons[i].click(); break; }
}
Хорошие практики
- Держите правило привязанным к
*только если доверяете списку фраз — широкое совпадение по тексту может изредка кликнуть несвязанную кнопку. При сомнении привязывайте к каждому сайту. - Всегда отсоединяйте наблюдателей с таймаутом, чтобы правило не могло утечь.
- Это правило кликает кнопки, которые уже существуют на странице; оно не отправляет данных и не связывается с сервером.
- Если сайт прячет контент за баннером, клик «принять» также восстанавливает прокрутку — дополнительный CSS не нужен.
Возьмите проверенную копию из готовых примеров или скачайте JustZix, если начинаете с нуля. Сочетайте это с нашим руководством об автоматическом раскрытии скрытого контента ради более плавного чтения.
Оцени эту статью
Оценок пока нет — оцени первым.