← 全部文章

教程

不点击就自动接受 Cookie 横幅

Cookie 同意横幅是现代网络的收费站。你在每个网站、每一天都交同样的过路费。一小段 JustZix JavaScript 规则可以替你交费——在横幅出现的瞬间点击接受(或拒绝)按钮。

横幅如何工作

大多数同意对话框是注入页面里的一段普通 HTML。它们通常包含一个文本可预测的按钮——"Accept"、"Accept all"、"I agree"、"Got it"——或一个可识别的 id/class。因为 JustZix JS 在页面上下文里运行,你可以找到那个按钮并以程序方式点击它。

最简单的版本:按按钮文本点击

这条规则扫描页面上的每个按钮,并点击第一个标签匹配一个接受短语列表的按钮。它不区分大小写并裁掉空白。

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 守卫在十秒后断开观察器,所以它永远不会在没有横幅的页面上无限运行。

针对特定的同意平台

如果你只浏览少数几个网站,就按选择器定位确切的按钮——这更快,并避免意外点击。在开发者工具里检查横幅,复制 id 或 class,并直接使用它。

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; }
}

良好实践

现成示例获取一份经过测试的副本,或者如果你是全新开始,下载 JustZix。把它与我们关于自动展开隐藏内容的指南搭配,获得更顺畅的阅读。

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

安装 JustZix,粘贴本文中的任意代码片段。两分钟,从零到一条在你所有设备上生效的规则。

获取 JustZix

功能 · 工作原理 · 示例 · 应用场景