京东指定店铺(名)屏蔽器

批量屏蔽指定京东店铺的商品

// ==UserScript==
// @name         京东指定店铺(名)屏蔽器
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  批量屏蔽指定京东店铺的商品
// @author       操你妈的黄牛
// @match        https://*.jd.com/*

// ==/UserScript==

(function() {
    'use strict';

    // 配置存储系统
    const CONFIG_KEY = 'jshop_blocker_config';
    const defaultConfig = {
        targetShops: ['工作室', '经营部','小店','小铺'],  // 默认屏蔽列表
        enableRegex: false,                   // 是否启用正则表达式
        hideMethod: 'display',                // 隐藏方式
        checkInterval: 1500,                  // 检查间隔
        debugMode: false                      // 调试模式
    };

    // 动态选择器配置(需适配页面结构)
    const selectors = {
        itemWrapper: '.gl-item, .goods-item',    // 商品容器
        shopNameElem: '.J_im_icon a, .shop-name',// 店铺名称元素
        itemMain: '.gl-i-wrap'                   // 商品主区域
    };

    // 初始化配置
    let config = Object.assign({}, defaultConfig, GM_getValue(CONFIG_KEY, {}));

    // 样式增强
    const style = document.createElement('style');
    style.textContent = `
        .jshop-blocked-item {
            position: relative;
            transition: opacity 0.3s;
        }
        .jshop-blocked-item::after {
            content: "已屏蔽: " attr(data-blocked-shop);
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background: rgba(255,0,0,0.9);
            color: white;
            padding: 5px 10px;
            border-radius: 4px;
            z-index: 999;
            font-size: 14px;
            pointer-events: none;
        }
        .jshop-blocked-item:hover::after {
            display: none;
        }
    `;
    document.head.appendChild(style);

    // 店铺匹配逻辑
    function isBlockedShop(shopName) {
        return config.targetShops.some(pattern => {
            try {
                if (config.enableRegex) {
                    const regex = new RegExp(pattern);
                    return regex.test(shopName);
                }
                return shopName.includes(pattern);
            } catch (e) {
                console.error(`正则表达式错误: ${pattern}`, e);
                return false;
            }
        });
    }

    // 核心处理逻辑
    function processItems() {
        const items = document.querySelectorAll(selectors.itemWrapper);
        items.forEach(item => {
            try {
                const shopElem = item.querySelector(selectors.shopNameElem);
                if (!shopElem) return;

                const shopName = shopElem.textContent.trim();
                if (isBlockedShop(shopName)) {
                    applyBlockEffect(item, shopName);
                }
            } catch (e) {
                config.debugMode && console.warn('处理失败:', e);
            }
        });
    }

    // 应用屏蔽效果
    function applyBlockEffect(item, shopName) {
        item.dataset.blockedShop = shopName;
        item.classList.add('jshop-blocked-item');

        switch(config.hideMethod) {
            case 'display':
                item.style.display = 'none';
                break;
            case 'remove':
                item.remove();
                break;
            case 'blur':
                item.style.filter = 'blur(3px)';
                item.style.opacity = '0.2';
                break;
            default:
                item.style.opacity = '0.3';
        }
    }

    // 动态加载处理
    const observer = new MutationObserver(mutations => {
        if (mutations.some(m => m.addedNodes.length)) {
            processItems();
        }
    });

    // 页面监控系统
    function initMonitor() {
        // 初始处理
        processItems();

        // 监听DOM变化
        observer.observe(document.documentElement, {
            childList: true,
            subtree: true,
            attributes: false
        });

        // 定时检查
        setInterval(processItems, config.checkInterval);

        // SPA路由监控
        let lastPath = location.pathname;
        setInterval(() => {
            if (location.pathname !== lastPath) {
                lastPath = location.pathname;
                processItems();
            }
        }, 1000);
    }

    // 配置管理接口
    function updateConfig(newConfig) {
        config = Object.assign({}, config, newConfig);
        GM_setValue(CONFIG_KEY, config);
        processItems();
    }

    // 初始化执行
    window.addEventListener('load', initMonitor);

    /* 高级功能示例 */
    // 可通过控制台调用:updateConfig({targetShops: ['新店铺']})
    window.JShopBlocker = {
        addShop: (shop) => updateConfig({targetShops: [...config.targetShops, shop]}),
        removeShop: (shop) => updateConfig({
            targetShops: config.targetShops.filter(s => s !== shop)
        }),
        toggleRegex: () => updateConfig({enableRegex: !config.enableRegex}),
        getConfig: () => ({...config})
    };
})();

QingJ © 2025

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