ImmoScout24 Suchen+ Filter

Blendet Anzeigen mit Suchen+ aus und passt das Raster automatisch an

Size

2.8 KB

Version

1.0.1

Created

Feb 7, 2026

Updated

about 1 month ago

1// ==UserScript==
2// @name		ImmoScout24 Suchen+ Filter
3// @description		Blendet Anzeigen mit Suchen+ aus und passt das Raster automatisch an
4// @version		1.0.1
5// @match		https://*.immobilienscout24.de/*
6// @icon		https://www.immobilienscout24.de/favicon.ico
7// ==/UserScript==
8(function() {
9    'use strict';
10
11    console.log('ImmoScout24 Suchen+ Filter gestartet');
12
13    // Funktion zum Ausblenden von Suchen+ Anzeigen
14    function hideSuchenPlusListings() {
15        // Finde alle Anzeigen-Karten
16        const listingCards = document.querySelectorAll('div[data-obid].listing-card');
17        let hiddenCount = 0;
18
19        listingCards.forEach(card => {
20            // Prüfe ob die Karte ein Suchen+ Badge enthält
21            const plusLogo = card.querySelector('[data-testid="plus-logo"]');
22            const paywallLabel = card.querySelector('.paywall-label');
23            
24            if (plusLogo || paywallLabel) {
25                // Blende die Anzeige aus
26                card.style.display = 'none';
27                hiddenCount++;
28                console.log('Suchen+ Anzeige ausgeblendet:', card.getAttribute('data-obid'));
29            }
30        });
31
32        if (hiddenCount > 0) {
33            console.log(`${hiddenCount} Suchen+ Anzeigen ausgeblendet`);
34        }
35    }
36
37    // Debounce-Funktion für Performance
38    function debounce(func, wait) {
39        let timeout;
40        return function executedFunction(...args) {
41            const later = () => {
42                clearTimeout(timeout);
43                func(...args);
44            };
45            clearTimeout(timeout);
46            timeout = setTimeout(later, wait);
47        };
48    }
49
50    // Initialisierung
51    function init() {
52        console.log('Initialisiere Suchen+ Filter...');
53        
54        // Erste Ausführung nach kurzer Verzögerung
55        setTimeout(() => {
56            hideSuchenPlusListings();
57        }, 1000);
58
59        // Beobachte Änderungen im DOM (z.B. beim Scrollen oder Laden neuer Anzeigen)
60        const observer = new MutationObserver(debounce(() => {
61            hideSuchenPlusListings();
62        }, 500));
63
64        // Beobachte den Container mit den Anzeigen
65        const listingsContainer = document.querySelector('[data-testid="ListingsGrid"], .cardContainer');
66        if (listingsContainer) {
67            observer.observe(listingsContainer, {
68                childList: true,
69                subtree: true
70            });
71            console.log('DOM Observer aktiviert');
72        } else {
73            console.log('Anzeigen-Container nicht gefunden, versuche es später erneut...');
74            // Versuche es nach weiteren 2 Sekunden nochmal
75            setTimeout(init, 2000);
76        }
77    }
78
79    // Starte wenn die Seite geladen ist
80    if (document.readyState === 'loading') {
81        document.addEventListener('DOMContentLoaded', init);
82    } else {
83        init();
84    }
85})();