Troubleshooting

Tarayıcı Otomasyonu CAPTCHA Başarısız Oluyor Ancak API Çalışıyor: Hata Ayıklama Kılavuzu

CAPTCHA'yı CaptchaAI aracılığıyla çözdünüz ve geçerli bir jeton aldınız, ancak bunu tarayıcıya enjekte etmek işe yaramıyor. Bu kılavuz, her birinin nedenlerini ve nasıl düzeltileceğini kapsar.


Yaygın Arıza Noktaları

Sorun Belirti Kök Neden
Jeton doğru öğeye enjekte edilmedi Form jeton olmadan gönderilir Yanlış metin alanı seçici
Tokenın süresi gönderilmeden önce doldu Site yeniden CAPTCHA'yı gösteriyor Çözme ve gönderme arasında çok yavaş
Geri arama tetiklenmedi Form düğmesi devre dışı kalıyor Grecaptcha geri araması eksik
API'ye yanlış sayfa URL'si gönderildi Bu alan adı için jeton geçersiz URL uyuşmazlığı
CAPTCHA'nın ötesinde bot tespiti Belirteç kabul edildikten sonra engellendi Tarayıcı test profil yapılandırması

Düzeltme 1: reCAPTCHA v2 için Doğru Token Enjeksiyonu

Belirtecin g-recaptcha-response metin alanına gitmesi VE geri aramanın tetiklenmesi gerekir:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time


def inject_recaptcha_token(driver, token):
    """Properly inject reCAPTCHA v2 token in browser."""

    # Step 1: Make the response textarea visible and set the value
    driver.execute_script("""
        // Find all response textareas (may be multiple on page)
        var textareas = document.querySelectorAll('[name="g-recaptcha-response"]');
        textareas.forEach(function(ta) {
            ta.style.display = 'block';
            ta.value = arguments[0];
        });

        // Also set via ID if present
        var byId = document.getElementById('g-recaptcha-response');
        if (byId) {
            byId.style.display = 'block';
            byId.value = arguments[0];
        }
    """, token)

    # Step 2: Trigger the callback
    driver.execute_script("""
        // Try standard callback
        if (typeof ___grecaptcha_cfg !== 'undefined') {
            var clients = ___grecaptcha_cfg.clients;
            for (var key in clients) {
                var client = clients[key];
                // Navigate nested structure to find callback
                for (var prop in client) {
                    var val = client[prop];
                    if (val && typeof val === 'object') {
                        for (var subprop in val) {
                            var subval = val[subprop];
                            if (subval && typeof subval === 'object' && subval.callback) {
                                subval.callback(arguments[0]);
                                return;
                            }
                        }
                    }
                }
            }
        }
        // Fallback: try common callback names
        if (typeof onCaptchaSuccess === 'function') onCaptchaSuccess(arguments[0]);
        else if (typeof captchaCallback === 'function') captchaCallback(arguments[0]);
    """, token)


# Usage
driver = webdriver.Chrome()
driver.get("https://example.com/form")
# ... solve CAPTCHA via CaptchaAI ...
inject_recaptcha_token(driver, token)
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

Düzeltme 2: Geri Aramaya Bağlı Formları Yönetme

CAPTCHA geri çağrısı başlatılana kadar bazı formlar devre dışı kalır:

def find_and_trigger_callback(driver, token):
    """Find the reCAPTCHA callback and trigger it."""

    # Method 1: Extract callback from data attribute
    callback_name = driver.execute_script("""
        var widget = document.querySelector('.g-recaptcha');
        if (widget) {
            return widget.getAttribute('data-callback');
        }
        return null;
    """)

    if callback_name:
        driver.execute_script(f"window['{callback_name}'](arguments[0]);", token)
        return True

    # Method 2: Extract from grecaptcha config
    triggered = driver.execute_script("""
        try {
            var widgetId = 0;
            var callback = ___grecaptcha_cfg.clients[widgetId].aa.l.callback;
            if (typeof callback === 'function') {
                callback(arguments[0]);
                return true;
            }
        } catch(e) {}
        return false;
    """, token)

    return triggered

Düzeltme 3: Zamanlama – Hemen Çözün ve Kullanın

import requests
import time


def solve_and_inject_fast(driver, api_key, sitekey, page_url):
    """Solve CAPTCHA and inject token with minimal delay."""
    # Submit solve request
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "json": 1,
    }, timeout=30)
    task_id = resp.json()["request"]

    # Poll for result
    time.sleep(15)
    for _ in range(24):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = resp.json()

        if data.get("status") == 1:
            token = data["request"]

            # IMMEDIATELY inject — don't wait
            inject_recaptcha_token(driver, token)

            # Submit form within 5 seconds
            time.sleep(0.5)
            return True

        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("Solve timeout")

Düzeltme 4: SPA'lar ve Iframe'ler için doğru sayfa URL'si

def get_correct_pageurl(driver):
    """Get the URL that reCAPTCHA actually sees."""

    # Check if CAPTCHA is in an iframe
    iframes = driver.find_elements(By.TAG_NAME, "iframe")

    for iframe in iframes:
        src = iframe.get_attribute("src") or ""
        if "recaptcha" in src or "anchor" in src:
            # CAPTCHA is in iframe — use parent page URL
            return driver.current_url

    # For SPAs, use current URL (may differ from initial load)
    return driver.current_url


# WRONG — using the URL you navigated to
pageurl = "https://example.com/form"  # May have redirected

# CORRECT — using the URL the browser is actually on
pageurl = get_correct_pageurl(driver)

Düzeltme 5: CAPTCHA'nın Ötesinde Anti-Bot Tespiti

Geçerli bir belirteç olsa bile site, otomatik tarayıcıları engelleyebilir:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service


def create_stealth_driver():
    """Create a browser that avoids basic bot detection."""
    options = Options()

    # Remove automation indicators
    options.add_argument("--no-sandbox")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option("useAutomationExtension", False)

    # Set realistic window size
    options.add_argument("--window-size=1920,1080")

    driver = webdriver.Chrome(options=options)

    # Override navigator.userAgent
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    })

    return driver


driver = create_stealth_driver()

Düzeltme 6: Turnstile Jeton Enjeksiyonu

Cloudflare Turnstile farklı bir enjeksiyon yaklaşımı kullanıyor:

def inject_turnstile_token(driver, token):
    """Inject Turnstile token into the page."""
    driver.execute_script("""
        // Find Turnstile response input
        var inputs = document.querySelectorAll(
            'input[name="cf-turnstile-response"], ' +
            'input[name="g-recaptcha-response"]'
        );

        inputs.forEach(function(input) {
            input.value = arguments[0];
        });

        // Trigger change event
        inputs.forEach(function(input) {
            input.dispatchEvent(new Event('change', { bubbles: true }));
            input.dispatchEvent(new Event('input', { bubbles: true }));
        });

        // Try Turnstile callback
        if (window.turnstile) {
            var widgets = document.querySelectorAll('[data-callback]');
            widgets.forEach(function(w) {
                var cb = w.getAttribute('data-callback');
                if (typeof window[cb] === 'function') {
                    window[cb](arguments[0]);
                }
            });
        }
    """, token)

Hata Ayıklama Kontrol Listesi

def debug_captcha_injection(driver, token):
    """Print debug info to diagnose injection failures."""
    info = driver.execute_script("""
        var result = {};

        // Check textarea exists
        var ta = document.querySelector('[name="g-recaptcha-response"]');
        result.textarea_found = !!ta;
        result.textarea_value_set = ta ? ta.value.length > 0 : false;

        // Check reCAPTCHA loaded
        result.grecaptcha_loaded = typeof grecaptcha !== 'undefined';

        // Check for callback
        var widget = document.querySelector('.g-recaptcha');
        result.has_data_callback = widget ? !!widget.getAttribute('data-callback') : false;
        result.callback_name = widget ? widget.getAttribute('data-callback') : null;

        // Current URL
        result.current_url = window.location.href;

        // Check for errors in console (basic)
        result.has_submit_button = !!document.querySelector('button[type=submit], input[type=submit]');

        return result;
    """)

    for key, value in info.items():
        print(f"  {key}: {value}")

    return info

Sorun giderme

Belirti Sebep Düzeltme
Belirteç ayarlandı ancak form reddediliyor Geri arama tetiklenmedi Geri arama işlevini bulun ve arayın
Gönder düğmesi devre dışı kalıyor Geri arama bunu sağlar Jeton enjeksiyonundan sonra geri aramayı tetikle
Gönderimden sonra "Geçersiz CAPTCHA" Jetonun süresi doldu Çözme ve gönderme arasındaki süreyi azaltın
Form gönderiminden sonra 403 Bot algılama (CAPTCHA değil) Gizli tarayıcı seçeneklerini kullanın
İsteklerde çalışıyor, tarayıcıda başarısız oluyor Farklı sayfa URL'si Driver.current_url'yi pageurl olarak kullanın

SSS

Belirteç neden isteklerde çalışıyor ancak tarayıcıda çalışmıyor?

Genellikle geri arama işlevi tetiklenmediğinden. Tarayıcı formları, gönderimi etkinleştirmek veya gizli alanları ayarlamak için genellikle geri aramayı kullanır.

Belirli bir tarayıcı kullanmam gerekiyor mu?

Chrome/Chromium en uyumlu olanıdır. Firefox çalışıyor ancak CDP komutları için farklı yaklaşımlara ihtiyaç duyabilir. Güçlü bot tespitine sahip siteler için algılanmayan chromedriver'ı kullanın.

Headless modunu kullanmalı mıyım?

Bazı siteler headless tarayıcıları algılar ve belirteçleri reddeder. Önce headful modunu deneyin, ardından işe yararsa uygun bayraklarla headless moduna geçin.


İlgili Kılavuzlar



Sonraki adımlar

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

İlgili Yazılar

Integrations CaptchaAI ile QA için tarayıcı profili izolasyonu
Staging QA testlerini temiz ve tekrarlanabilir tutmak için çerezleri, storage verilerini, test hesaplarını ve CAPTCHA yapılandırmalarını tarayıcı profiline göre...

Staging QA testlerini temiz ve tekrarlanabilir tutmak için çerezleri, storage verilerini, test hesaplarını ve...

Apr 29, 2026
Tutorials CaptchaAI ile Otomatik Test Hattı Oluşturun
Doğrudan yeniden kullanılabilir örnekler ve net bir Captcha AI iş akışı ile Captcha AI ile Otomatik Test Hattı Oluşturun için adım adım eğitim.

Doğrudan yeniden kullanılabilir örnekler ve net bir Captcha AI iş akışı ile Captcha AI ile Otomatik Test Hattı...

Apr 30, 2026
Tutorials Yeniden Kullanım için CAPTCHA Jetonlarını Önbelleğe Alma
Doğrudan yeniden kullanılabilir örnekler ve net bir Captcha AI iş akışıyla yeniden kullanım için CAPTCHA Jetonlarını Önbelleğe Alma için adım adım eğitim.

Doğrudan yeniden kullanılabilir örnekler ve net bir Captcha AI iş akışıyla yeniden kullanım için CAPTCHA Jeton...

May 02, 2026