注册各种网站时自动点击同意用户协议和隐私政策的浏览器插件 - V2EX
这是一个专门讨论 idea 的地方。

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

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
TrackBack

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

  •  
  •   TrackBack Apr 27, 2025 1981 views
    This topic created in 384 days ago, the information mentioned may be changed or developed.

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

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

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

    1 replies    2026-01-17 10:23:20 +08:00
    gloria07
        1
    gloria07  
       Jan 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);
    }
    })();
    About     Help     Advertise     Blog     API     FAQ     Solana     3029 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 67ms UTC 07:14 PVG 15:14 LAX 00:14 JFK 03:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86