Playground Crawler
Client-side crawl yetmediğinde — server-side Chromium ile DOM scan, pattern detection ve screenshot review.
Ne zaman gerek?
Client-side crawl yetmiyorsa
JS-heavy SPA, late mount, dinamik content, shadow DOM — bu durumlarda server-side Chromium devreye girer.
JS-heavy SPA
React/Vue/Angular tek sayfa uygulamaları — DOM tamamen JS ile render ediliyorsa.
Late mount
Initial HTML boş, gerçek içerik 2-5 saniye sonra mount oluyor — Chromium bekleyebilir.
Dinamik yüklenen DOM
Scroll + click + lazy load — etkileşim olmadan görünmeyen elementler için scripted interaction.
Shadow DOM
Web component'lerin shadow root'larına client-side erişim sınırlı; server-side Chromium pierce edebilir.
3 crawl modu
Single · Multi · Screenshot-only
İhtiyaca göre 3 mod. Multi-page CH events_canonical'dan dinamik URL listesi alır.
single_page
single_pageTek URL ver, DOM scan + pattern detect + screenshot. En hızlı mod — playground önizleme için ideal.
multi_page
multi_pageCH events_canonical son 7 gün distinct source_context['context_url'] → multi-page crawl. Tüm sayfalarda aynı pattern arar (toplam sayım).
screenshot_only
screenshot_onlyFull-page + viewport screenshot, DOM scan yok. UX review / regression için.
6-strategy selector generator
Auto-healing fail-safe için katmanlı seçici
Her event için 6 farklı selector tipi üretilir — biri kırılırsa diğeri devreye girer (5-katmanlı fallback).
Niye 6 katman?
Frontend redesign'ı CSS class'ları, ARIA label'ları, text içeriği kırabilir. 6 katman birden kırılmadıkça event tracking devam eder.
dataAttrdata-* attribute — en stabil (manuel eklenir, dev-controlled)textGörünür text içeriği — i18n değişiminde kırılabilircssCSS class / id — class refactor'da riskxpathXPath ifadesi — DOM hiyerarşi bağımlıregexAttribute regex match — pattern-basedariaARIA role + label — accessibility-grade, görece stabil
// 6 strateji, en spesifikten en gevşeğe doğru
{
"selectors": [
{ "type": "data_attr", "value": "[data-testid='cart-add']" },
{ "type": "aria", "value": "[role='button'][aria-label='Sepete ekle']" },
{ "type": "text", "value": "button:has-text('Sepete ekle')" },
{ "type": "css", "value": ".product-card .add-to-cart" },
{ "type": "xpath", "value": "//button[contains(., 'Sepete ekle')]" },
{ "type": "regex", "value": "button[name=~'add.cart']" }
]
}Pattern detection
1.248 cart button → tek event
Aynı tasarımdaki tekrarlanan element'leri otomatik gruplar — tek event tanımı tüm sayfalara yayılır.
Nasıl gruplar?
Selector + komşu DOM yapısı + accessible label benzerliğine göre cluster oluşturur. Cluster içindeki tüm element'ler tek event'e bağlanır.
# Multi-page crawl → 1.248 add-to-cart noktası bulundu
gurulu playground crawl \
--mode multi_page \
--base https://shop.example.com \
--discover ch_events_last_7d \
--max-pages 200
# Sonuç: pattern grouping (eşleşen selector → tek event'e bağla)
# event:add_to_cart → matched 1.248 instances across 47 pagesScreenshot review
MinIO presigned + thumbnail
Crawl sonrası her sayfanın screenshot'ı MinIO'ya yazılır; 302 redirect ile presigned URL döner.
GET /v1/playground/crawl/{crawl_id}/screenshot
→ 302 redirect → MinIO presigned URL (15 dk TTL)
# Thumbnail (JPEG, dashboard list için)
GET /v1/playground/crawl/{crawl_id}/screenshot?variant=thumbErişim kontrolü
Presigned URL 15 dk TTL ile döner — workspace yetkisi kontrol edilir, sonra MinIO bucket'a yönlendirilir. Thumbnail dashboard list için JPEG.
Performance config
Browser pool 2, timeout 30s, shm 1gb
Chromium SHM segment 1 GB — Docker'da shm_size default 64 MB ile çalışmaz, override şart.
230 s1 GB1 job / workerKullanım örnekleri
Onboarding + discovery
İki tipik senaryo — yeni workspace setup'ı ve mevcut workspace'te yeni pattern bulma.
Onboarding playground'da
Yeni workspace setup: sessions list'ten 'scan multi-page' butonuyla tüm sayfalarda pattern detect edip toplu event tanımla.
Pattern discovery
Mevcut workspace'te yeni feature lansmanı sonrası — playground'dan multi-page crawl ile yeni element'leri bul, event registry'ye ekle.
İlgili dokümanlar
Devamında oku
Audience üretimi, AI özetinde keşfedilen pattern, mimari arka plan.