Web Scraping

Playwright ve AI Vision ile Dinamik Web Kazıma ve Anti-Bot Korumalarını Aşma

Geleneksel CSS seçicilerinin kırıldığı dinamik sitelerde Playwright, LLM'ler ve Vision modelleriyle kendi kendine adapte olan akıllı scraping sistemleri.

Güncellendi: 9 Eylül 20265 dk
Paylaş:XLinkedIn

Özet & Doğrudan Çözüm (TL;DR)

Playwright ve AI entegrasyonu, web sitelerinin sürekli değişen dinamik DOM yapılarına, kırılan CSS seçicilerine ve Cloudflare/Datadome gibi gelişmiş anti-bot kalkanlarına karşı kendi kendine adapte olan akıllı scraping sistemleri kurmayı sağlar. Ekran görüntüsü vision analizi, erişilebilirlik ağacı (AOM) çıkarımı ve otonom hata yakalama ile sıfır bakım maliyetli veri hatları inşa edilir.

Önemli Çıkarımlar:

  • Kırılmaz Seçiciler: CSS class'ları değişse bile AI Vision ve semantik ARIA rolleri üzerinden hedef elementi bulma.
  • Cloudflare & Anti-Bot Kalkanlarını Aşma: TLS parmak izi, canvas/webgl spoofing, fare hareketleri ve residential proxy rotasyonu.
  • Pre-Hydration Protocol Interception: Sayfanın HTML render'ını beklemek yerine arka plandaki dahili GraphQL ve JSON API çağrılarını dinleme.
  • Maliyet Optimizasyonu: Tüm sayfayı LLM'e göndermek yerine sadece ilgili DOM alt ağacını (subtree) tokenize etme.

1. Geleneksel Scraping Neden Kırılır?

Geleneksel web scraping araçları statik CSS seçicilerine (`.product-price-v2 > span`) güvenir. Ancak modern e-ticaret ve veri siteleri class isimlerini her derlemede rastgele hash'lerle karıştırır (CSS modules obfuscation) veya Shadow DOM arkasına gizler.

Buna ek olarak Cloudflare Turnstile, DataDome ve Akamai gibi bot savunma kalkanları; TLS parmak izi (JA3/JA4), navigator özellikleri ve fare ivmelenmesini denetleyerek klasik scraper'ları saniyeler içinde engeller.

2. Playwright ve AI ile Otonom Element Tespiti

AI destekli scraping mimarisinde kod sınıf adlarına bakmaz; sayfanın erişilebilirlik ağacını (Accessibility Object Model) ve ekran görüntüsünü Vision modeline göndererek insan gibi algılar:

ai_playwright_scraper.py
import asyncio
from playwright.async_api import async_playwright

async def scrape_dynamic_catalog():
    async with async_playwright() as p:
        # Gerçek tarayıcı parmak iziyle başlatma
        browser = await p.chromium.launch(
            headless=True,
            args=[
                "--disable-blink-features=AutomationControlled",
                "--no-sandbox"
            ]
        )
        context = await browser.new_context(
            viewport={"width": 1920, "height": 1080},
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
        )
        page = await context.new_page()

        # Network dinleme: HTML parse etmek yerine doğrudan API cevabını yakalama
        captured_data = []
        async def handle_response(response):
            if "api/v1/products" in response.url and response.status == 200:
                try:
                    payload = await response.json()
                    captured_data.extend(payload.get("items", []))
                except Exception:
                    pass

        page.on("response", handle_response)
        await page.goto("https://target-catalog.com/electronics", wait_until="networkidle")
        
        print(f"Başarıyla yakalanan ürün adedi: {len(captured_data)}")
        await browser.close()

asyncio.run(scrape_dynamic_catalog())

3. Pre-Hydration Interception: 10 Kat Daha Hızlı Veri Çekme

Büyük veri projelerinde DOM elemanlarını teker teker taramak hem CPU yükü getirir hem de tarayıcıyı yavaşlatır. En modern teknik; Next.js veya React uygulamalarının ilk yükleme anında arka planda tetiklediği dahili veri çağrılarını `page.on('response')` ile yakalamaktır. Bu sayede sıfır DOM parse maliyetiyle saf JSON verisine ulaşılır.

Sıkça Sorulan Sorular

Playwright anti-bot kalkanlarına takılır mı?

Ham Playwright kurulumu `navigator.webdriver` bayrağı nedeniyle tespit edilebilir. Ancak `playwright-stealth` eklentileri, doğru user-agent profili ve kaliteli konut tipi (residential) proxy havuzu ile tespit edilebilirlik sıfırlanır.

Büyük ölçekli scraping'de proxy rotasyonu nasıl yapılmalıdır?

Her istekte IP değiştiren döngüsel (rotating) residential proxy ağları ve oturum sürekliliği gerektiren durumlarda yapışkan (sticky session) proxy'ler kullanılmalıdır.

Doğrulanmış Kaynaklar ve Dokümantasyon

İlgili Teknik Rehberler

Bu mimariyle bağlantılı diğer üretim odaklı rehber ve vaka analizlerini inceleyin: