
Mr. Steff mówi:
Nie lubię się przyznawać, ale jestem kotem — a koty szanują sprytnych przeciwników. Niektóre sklepy naprawdę dobrze się przede mną ukrywają. Oto jak to robią. I dlaczego to się niedługo zmieni.
Kiedy budowaliśmy BiasCAT, testowaliśmy go na dziesiątkach polskich i zagranicznych sklepów. Na Allegro, Media Expert czy Zalando — Mr. Steff działa doskonale. Ale na Temu? Cisza. Na Shein? Zero reakcji. Na AliExpress? Ledwie mrugnięcie. Dlaczego? Bo te platformy — świadomie lub nie — stosują techniki, które sprawiają, że tradycyjne narzędzia do wykrywania dark patterns stają się ślepe.
5 technik, którymi sklepy uciekają detekcji
1. Obfuskacja nazw CSS — „szyfr niewidzialnych klas"
Większość detektorów dark patterns (w tym BiasCAT v1) szuka elementów strony po nazwach klas CSS: „countdown", „timer", „old-price", „scarcity". To jak szukanie podejrzanego po nazwisku. Temu i Shein używają CSS Modules, styled-components lub hashed class names. Zamiast <div class="countdown-timer"> widzisz <div class="_2dEGT _3kXsU">. Sama treść (np. „02:47:33") jest ta sama, ale etykieta jest losowym ciągiem znaków. Dla detektora opartego na klasach — to jak szukanie kogoś, kto zmienił tożsamość.
/* Normal store */ <div class="countdown-timer">02:47:33</div> /* Temu/Shein */ <div class="_2dEGT _3kXsU">02:47:33</div>
2. Dynamiczne ładowanie przez API — „dark patterns po cichu"
Tradycyjne strony (np. Allegro) renderują treść w HTML — dark patterns są obecne od momentu załadowania strony. BiasCAT skanuje DOM i od razu je znajduje. Temu i Shein to aplikacje SPA (Single Page Application). Początkowy HTML to pusty <div id="app">. Treść — w tym dark patterns — ładuje się 1-3 sekundy później przez API. BiasCAT ma MutationObserver, który monitoruje zmiany, ale rozłącza się po 30 sekundach (żeby nie obciążać przeglądarki). Jeśli dark pattern pojawi się po tym czasie — Mr. Steff go nie zobaczy.
// Initial HTML: empty
<div id="app"></div>
// After 3s, API loads:
fetch('/api/products')
.then(r => r.json())
.then(data => renderProducts(data))
// → Dark patterns arrive AFTER scan3. Shadow DOM — „pokój, do którego nikt nie zagląda"
Shadow DOM to mechanizm przeglądarki, który tworzy izolowane fragmenty strony. Elementy wewnątrz Shadow DOM są niewidoczne dla document.querySelectorAll() — czyli dla większości detektorów, w tym naszego. Niektóre platformy umieszczają elementy manipulacyjne (popupy, banery z fake urgency) w Shadow DOM. To jak schowanie złodzieja w pokoju, do którego policja nie ma nakazu wejścia.
// Shadow DOM - invisible to querySelectorAll
const shadow = el.attachShadow({mode: 'closed'})
shadow.innerHTML = `
<div class="fake-urgency">
Only 2 left! ⏰
</div>
`4. Canvas / SVG zamiast tekstu — „narysuj zamiast napisać"
Niektóre sklepy renderują odliczania, ceny i komunikaty urgency jako grafikę (Canvas, SVG) zamiast tekstu HTML. Detektor, który czyta textContent elementów, widzi pustkę — bo tekst jest „narysowany" na obrazku. To jak napisanie fałszywego ogłoszenia pisakiem na szybie zamiast drukiem na papierze — skaner dokumentów go nie odczyta, ale Twoje oczy tak.
5. Semantyka kulturowa — „manipulacja, której nie znasz"
BiasCAT v1 rozpoznaje zachodnie i polskie wzorce manipulacji: „Ostatnia sztuka!", „47 osób ogląda", „Oferta kończy się za...". Ale Temu, będąc chińską platformą, używa nieco innych wzorców. Np. zamiast klasycznego countdown timer — animowane „flash sale" z pulsującymi pikselami. Zamiast „Tylko 2 sztuki" — gamifikacja z kołem fortuny i kuponami za kliknięcia. To nadal dark patterns, ale ubrane w inny kulturowo kostium, którego zachodni detektory nie rozpoznają.
Dlaczego to jest ważne?
Bo jeśli narzędzia do ochrony konsumentów nie nadążają za taktykami sklepów — konsument zostaje sam. Komisja Europejska szacuje, że dark patterns kosztują europejskich konsumentów ~45 miliardów euro rocznie. A platformy jak Temu, które generują ponad 10 miliardów USD przychodów rocznie, są mistrzami w tych technikach.
Przyznanie się do ograniczeń jest ważne. BiasCAT nie jest doskonały — żadne narzędzie nie jest. Ale transparentność wobec użytkowników to fundament naszego projektu. Dlatego ten artykuł istnieje. I dlatego budujemy coś lepszego.
🚀 Co budujemy w BiasCAT Pro
Analiza AI (LLM) — zamiast szukać klas CSS, model językowy przeanalizuje wizualnie i semantycznie co widzi użytkownik. „To wygląda jak fałszywe odliczanie" zamiast „to ma klasę timer".
Dłuższy monitoring SPA — adaptacyjny MutationObserver, który nie rozłącza się po 30s, lecz inteligentnie monitoruje dynamiczny content.
Shadow DOM piercing — technika przeszukiwania zagnieżdżonych Shadow DOM, żeby nic się nie schowało.
Community patterns — baza zgłoszeń od użytkowników. Ty widzisz dark pattern, zgłaszasz go, a Mr. Steff uczy się nowego triku.

„Jeszcze Was dopadnę, Temu. Kot ma cierpliwość. I team inżynierów. I grant z UE w planach. Miau." — Mr. Steff
