您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hide specific car makes/models from listing results
当前为
// ==UserScript== // @name Car Listing Filter // @namespace http://tampermonkey.net/ // @version v0.0.3 // @description Hide specific car makes/models from listing results // @author [email protected] // @match *://www.autotrader.com/* // @match *://www.carfax.com/* // @match *://www.cargurus.com/* // @match *://www.carmax.com/* // @match *://www.cars.com/* // @match *://www.carvana.com/* // @grant none // ==/UserScript== (function() { 'use strict'; // Enable or disable detailed logging const verboseLogging = true; // Set to false to disable logging function log(...args) { if (verboseLogging) { console.log(...args); } } // Add or modify models you want to block in this array (case-insensitive) const blockedModels = [ 'buick encore', 'dodge journey', 'ford ecosport', 'hyundai', 'jeep', 'kia', 'mitsubishi outlander', 'nissan', 'trax' ]; // Site-specific configuration const siteConfig = { 'www.autotrader.com': { container: '.inventory-listing', textElement: '[data-cmp="subheading"]', }, 'www.carfax.com': { container: '.srp-list-item', textElement: '.srp-list-item__header' }, 'www.cargurus.com': { container: '[data-testid="srp-listing-tile"]', textElement: '[data-testid="srp-tile-listing-title"] h4', additionalTextElements: ['dl dd'] }, 'www.carmax.com': { container: 'article.car-tile', textElement: 'div.scct--make-model-container a.scct--make-model-info-link' }, 'www.cars.com': { container: '.vehicle-card', textElement: '.vehicle-card-link' }, 'www.carvana.com': { container: '[data-qa="result-tile"]', textElement: '[data-qa="make-model"]' } }; function hideBlockedModels() { const host = window.location.hostname; const config = siteConfig[host]; if (!config) { log("No configuration found for host:", host); return; } log("Blocking with the following settings"); log("Host:", host); log("Config:", config); document.querySelectorAll(config.container).forEach(card => { let shouldHide = false; log("Checking card:", card); // Check primary element const titleElement = card.querySelector(config.textElement); if (titleElement) { const titleText = titleElement.textContent.toLowerCase(); log("Found title text:", titleText); shouldHide = blockedModels.some(model => titleText.includes(model.toLowerCase())); if (shouldHide) { log("Title matched blocked model:", titleText); } } else { log("Title element not found for card"); } // Additional check for model specification in details if (!shouldHide && config.additionalTextElements) { shouldHide = config.additionalTextElements.some(selector => { const el = card.querySelector(selector); if (el) { const elText = el.textContent.toLowerCase(); log("Checking additional text element:", elText); const match = blockedModels.some(model => elText.includes(model.toLowerCase())); if (match) { log("Additional text matched blocked model:", elText); return true; } } return false; }); } if (shouldHide) { log("Hiding element:", card); card.style.setProperty('display', 'none', 'important'); // Alternative // card.remove(); } }); } hideBlockedModels(); // Observer for dynamic content const observer = new MutationObserver(hideBlockedModels); observer.observe(document.body, { childList: true, subtree: true }); })();