Referans

Chrome DevTools Protocol + CaptchaAI ile CAPTCHA tanılama

Güvenli kapsam: Bu kılavuz yalnızca size ait veya yetkilendirilmiş QA, staging ve ön üretim ortamları için geçerlidir. İçerik kendi CAPTCHA entegrasyonlarınız için tanılama, test ve gözlemlenebilirlik kalıplarını ele alır — üçüncü taraf siteleri veya yetkisiz akışları kapsamaz.

Chrome DevTools Protocol (CDP), ağ istekleri, sayfa yaşam döngüsü ve JavaScript yürütmesi için derinlemesine inceleme sunar. Kendi QA ortamınız için CDP, staging'de CAPTCHA widget'ının neden görünmediğini veya backend'in geçerli bir token'ı neden reddettiğini tanılamada faydalıdır.

Güvenli kapsam

  • Yalnızca size ait veya yetkilendirilmiş test sayfaları.
  • Tarayıcı tanılaması, ağ inceleme ve istek yaşam döngüsü izleme.
  • Kendi sayfalarınızda sitekey tespiti.
  • Backend doğrulama tanılaması.

Ağ tanılaması için CDP kullanımı

import asyncio, json
from playwright.async_api import async_playwright

async def trace_qa():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        ctx = await browser.new_context()
        client = await ctx.new_cdp_session(await ctx.new_page())
        await client.send('Network.enable')
        client.on('Network.requestWillBeSent', lambda e: print(e['request']['url']))

Dahili test sayfasında sitekey tespiti

Kendi QA sayfanızı (örn. https://staging.example.com/captcha-demo) açın ve .g-recaptcha veya .cf-turnstile öğesinden data-sitekey değerini çıkarın. Backend'deki beklenen yapılandırmayla karşılaştırın.

QA'dan CaptchaAI görevi gönderme

Sitekey doğrulandıktan sonra, staging URL'niz ile birlikte in.php adresine bir görev gönderin. Durum tamamlanana kadar res.php sorgulayın. Çözüm süresini tanılama metriği olarak kaydedin.

Backend yanıtını doğrulama

Token'ı QA formuna ekleyin, gönderin ve backend'inizin başarılı bir kodla yanıt verip vermediğini CDP üzerinden kontrol edin. Reddederse action, sitekey ve secret değerlerini sunucu yapılandırmasıyla karşılaştırın.

Sorun giderme

Sorun Önerilen çözüm
Test widget'ı bulamıyor Staging ortamınızdaki seçici ve zamanlamayı kontrol edin
CaptchaAI ERROR_NO_SLOT_AVAILABLE döndürüyor Dahili pipeline'da geri çekilme ile yeniden deneyin
Backend QA token'ı reddediyor Action/sitekey değerlerini gerçek yapılandırma ile karşılaştırın

Gözlemlenebilirlik

Her QA çalıştırması için yapılandırılmış günlükler üretin. Toplam token süresi, HTTP yanıt kodu, görev kimliği ve kuyruk derinliği gibi ölçümler tablolarınızı ve uyarılarınızı besler. Ortamlarınızı (geliştirme, staging, ön üretim) ayrı kanallara yazın ve dağıtık izleme (örneğin OpenTelemetry) ile bağıntı kimliklerini eşleştirin. Tek bir kimlikten tüm senaryoyu yeniden oynatabilmek, olay sırasında tanılama süresini yarıya indirir.

Kontrol listesi

  • Kapsam kesinlikle kendi uygulamalarınız veya yetkilendirilmiş kaynaklarla sınırlıdır.
  • CaptchaAI anahtarı CI gizli deposunda veya kasada saklanır, kaynak kodda asla bulunmaz.
  • Her çalıştırma için çağrı süresi ve yanıt kodu kayıt altına alınır.
  • Geçici hatalar için idempotent yeniden deneme stratejisi kuruludur.
  • Testler sürekli entegrasyon ortamınızdan tekrarlanabilir biçimde yeniden oynatılır.

Örnek QA çağrısı

Aşağıdaki Python örneği, kendi staging ortamınızdaki bir CAPTCHA widget'ını CaptchaAI üzerinden test etmek için kullanılan minimal akışı gösterir.

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL']  # ör. https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']


def submit_qa_recaptcha() -> str:
    payload = {
        'clientKey': API_KEY,
        'task': {
            'type': 'NoCaptchaTaskProxyless',
            'websiteURL': QA_PAGE_URL,
            'websiteKey': QA_SITE_KEY,
        },
    }
    response = requests.post(
        'https://api.captchaai.com/createTask',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()['taskId']


def fetch_qa_result(task_id: str) -> dict:
    payload = {'clientKey': API_KEY, 'taskId': task_id}
    response = requests.post(
        'https://api.captchaai.com/getTaskResult',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()

Sık sorulan sorular

Bu akış üretim trafiğine dokunur mu?

Hayır. Tüm örnekler staging.example.com veya kendi QA alan adınız gibi yetkilendirilmiş ortamları varsayar. Üretim CAPTCHA korumasını kendi staging kopyanızda yeniden üretin.

API anahtarımı kodda saklayabilir miyim?

Hayır. Anahtarı CI gizli yöneticisi, ortam değişkeni veya kasa hizmeti üzerinden enjekte edin. Kod tabanına işlenen anahtarlar derhal döndürülmelidir.

Geçici hatalar için ne öneriyorsunuz?

İdempotent yeniden deneme: üstel geri çekilme (örneğin 1s, 2s, 4s) ve üst sınır ile birlikte. Ağ hataları, 5xx yanıtları ve ERROR_NO_SLOT_AVAILABLE için yeniden deneme uygundur; kalıcı kimlik doğrulama hataları için değildir.

Güvenli ilgili kılavuzlar

CAPTCHA entegrasyonunuzu kendi ortamınızda CaptchaAI ile doğrulayın.

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