V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
TrackBack
V2EX  ›  奇思妙想

注册各种网站时自动点击同意用户协议和隐私政策的浏览器插件

  •  
  •   TrackBack · 2025 年 4 月 27 日 · 1766 次点击
    这是一个创建于 283 天前的主题,其中的信息可能已经有所发展或是发生改变。

    灵感来源于插件 I don't care about cookies,或者很多广告拦截插件比如 Adblock Plus 也专门有一个 cookie 弹窗过滤列表

    所以有没有人整一个注册各种网站时自动同意用户协议的插件?反正不同意也不让注册,每次都要多点一下有够烦的

    技术上应该也不难,法律上的问题不知道大不大,不过和 cookie 的情况应该是一样的。

    1 条回复    2026-01-17 10:23:20 +08:00
    gloria07
        1
    gloria07  
       1 月 17 日
    // ==UserScript==
    // @name 通用网站协议自动同意助手
    // @namespace http://tampermonkey.net/
    // @version 1.1
    // @description 尝试自动勾选用户协议复选框或点击同意按钮。适用于大多数网站。
    // @author YourName
    // @match *://*/*
    // @grant none
    // @run-at document-end
    // ==/UserScript==

    (function() {
    'use strict';

    // 策略 1:尝试勾选常见的协议复选框
    const checkboxKeywords = ['agreement', 'agree', 'protocol', 'policy', 'terms', 'user-agreement', 'consent'];
    const buttonKeywords = ['同意', '同意并继续', '接受', '接受协议', 'agree', 'accept', 'confirm', '允许', '授权', 'consent', 'ok', '下一步', 'next', 'continue'];

    function attemptToAgree() {
    console.log('通用协议助手:开始尝试自动同意...');

    // 策略 1A: 通过属性匹配复选框
    let checkboxes = document.querySelectorAll('input[type="checkbox"]');
    for (let checkbox of checkboxes) {
    let id = checkbox.id.toLowerCase();
    let name = checkbox.name.toLowerCase();
    let parentText = checkbox.parentElement?.textContent?.toLowerCase() || '';
    // 检查是否与协议相关关键词匹配
    if (checkboxKeywords.some(keyword => id.includes(keyword) || name.includes(keyword) || parentText.includes(keyword))) {
    if (!checkbox.checked) {
    checkbox.click();
    console.log('通用协议助手:已通过策略 1A (属性匹配)自动勾选复选框。');
    // 勾选后不一定立即提交,所以继续执行寻找按钮
    break;
    }
    }
    }

    // 策略 2: 点击各种类型的“同意”按钮(主要策略)
    let allButtons = document.querySelectorAll('button, input[type="button"], input[type="submit"], a.btn, .btn, [role="button"]');
    let clicked = false;

    for (let button of allButtons) {
    let buttonText = (button.textContent || button.value || button.getAttribute('aria-label') || '').trim().toLowerCase();
    let buttonClass = button.className.toLowerCase();

    // 检查按钮文本是否包含同意关键词
    if (buttonKeywords.some(keyword => buttonText.includes(keyword))) {
    // 额外检查,确保不是“不同意”或“拒绝”按钮
    if (!buttonText.includes('不同意') && !buttonText.includes('拒绝') && !buttonText.includes('disagree') && !buttonText.includes('reject') && !buttonText.includes('cancel')) {
    button.click();
    console.log('通用协议助手:已通过策略 2 (按钮文本)点击同意按钮。按钮文本:', button.textContent);
    clicked = true;
    break; // 点击一个后就退出
    }
    }
    }

    // 策略 3: 如果没找到明显的按钮,尝试通过表单的提交动作
    if (!clicked) {
    let forms = document.querySelectorAll('form');
    for (let form of forms) {
    let formHtml = form.innerHTML.toLowerCase();
    // 检查表单内是否包含协议相关文本
    if (formHtml.includes('协议') || formHtml.includes('agree') || formHtml.includes('terms')) {
    let submitBtn = form.querySelector('button[type="submit"], input[type="submit"]');
    if (submitBtn) {
    submitBtn.click();
    console.log('通用协议助手:已通过策略 3 (表单提交)尝试提交。');
    clicked = true;
    break;
    }
    }
    }
    }

    if (!clicked) {
    console.log('通用协议助手:本次未找到可自动同意的目标。页面结构可能特殊或已同意。');
    }
    }

    // 使用 MutationObserver 监听 DOM 变化,应对动态加载的页面
    const observer = new MutationObserver(function(mutations) {
    // 避免频繁执行,设置一个简单的标志
    if (!window.agreementHelperTriggered) {
    window.agreementHelperTriggered = true;
    setTimeout(attemptToAgree, 500); // 延迟半秒执行,确保元素已加载
    setTimeout(() => { window.agreementHelperTriggered = false; }, 2000);
    }
    });

    // 开始观察
    observer.observe(document.body, {
    childList: true,
    subtree: true
    });

    // 页面加载完成后立即尝试一次
    if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', attemptToAgree);
    } else {
    setTimeout(attemptToAgree, 1000);
    }
    })();
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   959 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:14 · PVG 04:14 · LAX 12:14 · JFK 15:14
    ♥ Do have faith in what you're doing.