Use Cases

CAPTCHA İşleme ile Reklam Doğrulama İş Akışları

Reklam doğrulama, reklam yerleşimini, marka güvenliğini ve uyumluluğunu kontrol etmek için binlerce web sayfasını ziyaret etmeyi gerektirir. Birçok yayıncı sitesi, otomatik kontrolleri engelleyen CAPTCHA'lar kullanır. CaptchaAI, doğrulama işlem hattınızın çalışır durumda kalmasını sağlar.

Reklam Doğrulama Hangi Kontrolleri Yapar?

Kontrol et Açıklama CAPTCHA'lar Neden Engelliyor?
Reklam yerleşimi Reklam ekranın üst kısmında mı gösteriliyor? Otomatik sayfa ziyaretleri bot tespitini tetikler
Marka güvenliği Zararlı içeriğin yanında reklam yok Toplu URL kontrolü kazımaya benzer
Görüntülenebilirlik Reklam gerçekten görünür müydü? Cloudflare tarafından işaretlenen headless tarayıcılar
Coğrafi hedefleme Doğru bölgede doğru reklam Proxy trafiği CAPTCHA'ları tetikler
Rakip izleme Rakipler hangi reklamları gösteriyor? Yüksek hacimli reklam aramaları

Uygulama

import requests
import time
import re
import json
import os
from datetime import datetime

API_KEY = os.environ["CAPTCHAAI_API_KEY"]


def solve_captcha(method, params):
    params["key"] = API_KEY
    params["method"] = method

    resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
    if not resp.text.startswith("OK|"):
        raise Exception(resp.text)

    task_id = resp.text.split("|")[1]
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id,
        })
        if result.text == "CAPCHA_NOT_READY":
            continue
        if result.text.startswith("OK|"):
            return result.text.split("|", 1)[1]
        raise Exception(result.text)
    raise TimeoutError()


def verify_ad_placement(url, session):
    """Verify ad placement on a publisher page."""
    resp = session.get(url)

    # Solve CAPTCHA if present
    match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', resp.text)
    if match:
        token = solve_captcha("userrecaptcha", {
            "googlekey": match.group(1),
            "pageurl": url,
        })
        resp = session.post(url, data={"g-recaptcha-response": token})

    html = resp.text

    # Check for ad elements
    result = {
        "url": url,
        "timestamp": datetime.utcnow().isoformat(),
        "ads_found": [],
        "brand_safety": True,
        "captcha_solved": match is not None,
    }

    # Detect ad tags
    ad_patterns = [
        (r'googletag\.pubads', "Google Ad Manager"),
        (r'doubleclick\.net', "DFP/DoubleClick"),
        (r'ad\.doubleclick', "DoubleClick"),
        (r'amazon-adsystem', "Amazon Ads"),
        (r'criteo\.com/.*\.js', "Criteo"),
    ]

    for pattern, name in ad_patterns:
        if re.search(pattern, html):
            result["ads_found"].append(name)

    # Brand safety check — flag problematic content
    safety_keywords = [
        "violence", "hate speech", "explicit",
        "gambling", "illegal",
    ]
    page_text = re.sub(r'<[^>]+>', '', html).lower()
    for keyword in safety_keywords:
        if keyword in page_text:
            result["brand_safety"] = False
            break

    return result


def run_verification(urls, output_file="verification_report.json"):
    """Run ad verification across multiple publisher URLs."""
    session = requests.Session()
    session.headers["User-Agent"] = (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 Chrome/120.0.0.0"
    )

    results = []
    for i, url in enumerate(urls):
        try:
            result = verify_ad_placement(url, session)
            results.append(result)
            ads = ", ".join(result["ads_found"]) or "None"
            safe = "SAFE" if result["brand_safety"] else "UNSAFE"
            print(f"  [{i+1}/{len(urls)}] {url}: {ads} [{safe}]")
        except Exception as e:
            results.append({
                "url": url,
                "error": str(e),
                "timestamp": datetime.utcnow().isoformat(),
            })
            print(f"  [{i+1}/{len(urls)}] {url}: ERROR - {e}")

        time.sleep(2)

    with open(output_file, "w") as f:
        json.dump(results, f, indent=2)

    # Summary
    total = len(results)
    safe = sum(1 for r in results if r.get("brand_safety"))
    captchas = sum(1 for r in results if r.get("captcha_solved"))
    errors = sum(1 for r in results if "error" in r)

    print(f"\n  Total: {total} | Safe: {safe} | CAPTCHAs solved: {captchas} | Errors: {errors}")

    return results


# Publisher URLs to verify
publisher_urls = [
    "https://publisher1.com/article/tech-news",
    "https://publisher2.com/sports/latest",
    "https://publisher3.com/finance/markets",
]

run_verification(publisher_urls)

Cloudflare Korumalı Yayıncılarla Ölçeklendirme

Birçok premium yayıncı Cloudflare kullanıyor. Hem Turnstile hem de tüm zorlukların üstesinden gelin:

def handle_cloudflare(url, session):
    """Handle Cloudflare-protected publisher pages."""
    resp = session.get(url)

    if "cf-turnstile" in resp.text:
        match = re.search(r'data-sitekey=["\']([^"\']+)', resp.text)
        if match:
            token = solve_captcha("turnstile", {
                "sitekey": match.group(1),
                "pageurl": url,
            })
            return session.post(url, data={
                "cf-turnstile-response": token,
            })

    if resp.status_code == 403 and "cf-browser-verification" in resp.text:
        data = solve_captcha("cloudflare_challenge", {
            "pageurl": url,
            "proxy": "user:pass@proxy:port",
            "proxytype": "HTTP",
        })
        # Parse qa_session_cookie and use same proxy
        return data

    return resp

SSS

Saatte kaç sayfayı doğrulayabilirim?

CaptchaAI ile CAPTCHA sıklığına ve çözüm sürelerine bağlı olarak saatte 200-500 sayfa doğrulayabilirsiniz.

Bu, video reklam doğrulaması için işe yarar mı?

Bu yaklaşım görüntülü reklamlar ve yerel reklamlar için işe yarar. Video reklam doğrulaması genellikle tarayıcının Selenium veya Playwright ile oluşturulmasını gerektirir.

Farklı bölgeleri nasıl halledebilirim?

Hedef coğrafyalardaki proxy'leri kullanın. CaptchaAI proxy parametrelerini destekler, böylece çözüm bağlamı coğrafi hedeflemenizle eşleşir.

İlgili Kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.

İlgili Yazılar

DevOps & Scaling CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtım
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren CAPTCHA Çözme Altyapısı için Mavi-Yeşil Dağıtı...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 27, 2026
DevOps & Scaling Azure İşlevleri + CaptchaAI: Bulut Entegrasyonu
Azure İşlevleri + Captcha AI: Bulut Entegrasyonu için Dev Ops kılavuzu, üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve oto...

Azure İşlevleri + Captcha AI: Bulut Entegrasyonu için Dev Ops kılavuzu, üretimdeki Captcha AI iş akışlarına yö...

Apr 23, 2026
DevOps & Scaling Otomatik Ölçeklendirme CAPTCHA Çözme Çalışanları
Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içeren Otomatik Ölçeklendirme CAPTCHA Çözme Çalışanla...

Üretimdeki Captcha AI iş akışlarına yönelik mimari kararları, işletim hususlarını ve otomasyon modellerini içe...

Apr 21, 2026