搜索引擎官网净化器

自动屏蔽虚假搜索结果,智能保留官方网站

目前為 2025-03-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name         搜索引擎官网净化器
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  自动屏蔽虚假搜索结果,智能保留官方网站
// @author       little fool
// @license      MIT
// @match        *://www.baidu.com/*
// @match        *://www.google.com/*
// @match        *://www.bing.com/*
// @grant        GM_addStyle
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM.registerMenuCommand
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
// ==/UserScript==

(function() {
    'use strict';

    // 增强样式
    GM_addStyle(`
        .official-site-mark {
            background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%) !important;
            color: white !important;
            padding: 2px 8px !important;
            border-radius: 4px !important;
            font-size: 0.8em !important;
            margin-left: 10px !important;
            animation: fadeInMark 0.5s;
        }
        @keyframes fadeInMark {
            from { opacity: 0; transform: translateY(-5px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .search-result-warning {
            position: relative;
            background: #fff3e0 !important;
            border-left: 4px solid #ffa000 !important;
            padding: 12px !important;
            margin: 10px 0 !important;
            animation: shakeWarning 0.5s;
        }
        @keyframes shakeWarning {
            0%, 100% { transform: translateX(0); }
            25% { transform: translateX(-5px); }
            75% { transform: translateX(5px); }
        }
        .search-result-warning::before {
            content: "⚠️ 已屏蔽可疑结果";
            display: block;
            font-weight: bold;
            margin-bottom: 5px;
            color: #d32f2f;
        }
    `);

    // 智能配置(新增必应支持)
    const SearchEngineConfig = {
        'www.baidu.com': {
            resultContainer: '#content_left',
            resultSelector: '.c-container',
            officialMarkers: [
                '.c-icon-v',
                { type: 'text', pattern: /官网$/ },
                { type: 'text', pattern: /官方.*网站/ }
            ],
            dangerPatterns: [
                /.*彩票.*/,
                /.*网赚.*/,
                /.*代购.*/,
                /虚假.*网站/
            ],
            urlWhitelist: [
                /\.gov\.cn$/,
                /\.edu\.cn$/,
                /\.org\.cn$/,
                /\.com\.cn$/,
                /^https?:\/\/[^/]+\.cn\//
            ]
        },
        'www.google.com': {
            resultContainer: '#search',
            resultSelector: '.g',
            officialMarkers: [
                '.VuuXrf',
                { type: 'text', pattern: / - Official Site$/i },
                { type: 'text', pattern: /官网/i }
            ],
            dangerPatterns: [
                /.*casino.*/i,
                /.*porn.*/i,
                /.*pharmacy.*/i
            ],
            urlWhitelist: [
                /\.gov$/,
                /\.edu$/,
                /\.org$/,
                /^https?:\/\/[^/]+\.com\//
            ]
        },
        'www.bing.com': {
            resultContainer: '#b_results',
            resultSelector: '.b_algo',
            officialMarkers: [
                { type: 'attr', selector: '[aria-label="官方站点"]' },
                { type: 'text', pattern: /官网$/i },
                { type: 'text', pattern: /Official Site/i }
            ],
            dangerPatterns: [
                /.*赌博.*/i,
                /.*色情.*/i,
                /.*诈骗.*/i
            ],
            urlWhitelist: [
                /\.gov/,
                /\.edu/,
                /\.org/
            ]
        }
    };

    class EnhancedSearchOptimizer {
        constructor() {
            this.currentEngine = location.hostname;
            this.config = SearchEngineConfig[this.currentEngine];
            if (!this.config) return;

            this.enabled = true;
            this.init();
        }

        async init() {
            this.enabled = await GM.getValue('enableFilter', true);
            this.setupDOMObserver();
            this.processExistingResults();
            this.addControlPanel();
            this.addMenuCommands();
        }

        setupDOMObserver() {
            this.observer = new MutationObserver(mutations => {
                if (!this.enabled) return;
                mutations.forEach(mutation => {
                    mutation.addedNodes.forEach(node => {
                        if (node.nodeType === 1 && node.matches(this.config.resultSelector)) {
                            this.analyzeResult(node);
                        }
                    });
                });
            });

            const container = document.querySelector(this.config.resultContainer);
            if (container) {
                this.observer.observe(container, {
                    childList: true,
                    subtree: true
                });
            }
        }

        processExistingResults() {
            if (!this.enabled) return;
            $(this.config.resultSelector).each((i, el) => {
                if (!el.dataset.processed) {
                    this.analyzeResult(el);
                    el.dataset.processed = 'true';
                }
            });
        }

        analyzeResult(element) {
            if (!this.enabled) return;

            const isOfficial = this.checkOfficialMarkers(element);
            const isDangerous = this.checkDangerousPatterns(element);
            const urlValid = this.checkUrlValidity(element);

            if (isDangerous || !urlValid) {
                this.markAsSuspicious(element);
            } else if (isOfficial) {
                this.highlightOfficial(element);
            }
        }

        checkOfficialMarkers(element) {
            return this.config.officialMarkers.some(marker => {
                if (typeof marker === 'string') {
                    return element.querySelector(marker) !== null;
                }
                switch (marker.type) {
                    case 'text':
                        return marker.pattern.test(element.textContent);
                    case 'attr':
                        return element.querySelector(marker.selector) !== null;
                    default:
                        return false;
                }
            });
        }

        checkDangerousPatterns(element) {
            const text = element.textContent.toLowerCase();
            return this.config.dangerPatterns.some(pattern => 
                pattern.test(text)
            );
        }

        checkUrlValidity(element) {
            const link = element.querySelector('a');
            return link && this.config.urlWhitelist.some(pattern => 
                pattern.test(link.href)
            );
        }

        markAsSuspicious(element) {
            element.style.display = 'none';
            const warning = document.createElement('div');
            warning.className = 'search-result-warning';
            element.parentNode.insertBefore(warning, element);
        }

        hightlightOfficial(element) {
            if (element.querySelector('.official-site-mark')) return;
            const mark = document.createElement('span');
            mark.className = 'official-site-mark';
            mark.textContent = '认证官网';
            element.querySelector('h3, h2')?.appendChild(mark);
        }

        addControlPanel() {
            this.panel = document.createElement('div');
            this.panel.innerHTML = `
                <div style="position:fixed;top:20px;right:20px;background:white;padding:15px;box-shadow:0 2px 10px rgba(0,0,0,0.1);border-radius:8px;z-index:9999">
                    <h3 style="margin:0 0 12px 0;font-size:16px;">搜索净化控制</h3>
                    <label style="display:flex;align-items:center;gap:8px;">
                        <input type="checkbox" id="toggleFilter" ${this.enabled ? 'checked' : ''}>
                        <span>智能过滤</span>
                    </label>
                </div>
            `;
            document.body.appendChild(this.panel);

            this.panel.querySelector('#toggleFilter').addEventListener('change', async (e) => {
                this.enabled = e.target.checked;
                await GM.setValue('enableFilter', this.enabled);
                this.processExistingResults();
            });
        }

        addMenuCommands() {
            GM.registerMenuCommand('切换过滤开关', () => {
                this.enabled = !this.enabled;
                GM.setValue('enableFilter', this.enabled);
                this.panel.querySelector('#toggleFilter').checked = this.enabled;
                this.processExistingResults();
            });
        }
    }

    // 初始化优化器
    new EnhancedSearchOptimizer();

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址