Lingkup aman: Panduan ini berlaku hanya untuk lingkungan QA, staging, dan praproduksi milik sendiri atau yang Anda miliki otorisasinya. Materi membahas pola diagnostik, pengujian, dan observabilitas untuk integrasi CAPTCHA Anda sendiri — bukan untuk situs pihak ketiga atau alur tanpa otorisasi.
Chrome DevTools Protocol (CDP) memberikan inspeksi mendalam untuk request jaringan, siklus hidup halaman, dan eksekusi JavaScript. Untuk QA milik sendiri, CDP berguna mendiagnosis mengapa widget CAPTCHA tidak muncul di staging atau mengapa backend menolak token yang sah.
Lingkup aman
- Hanya halaman pengujian milik sendiri atau yang diberi otorisasi.
- Diagnostik browser, inspeksi jaringan, dan pelacakan siklus request.
- Deteksi sitekey pada halaman milik sendiri.
- Diagnostik verifikasi backend.
Menggunakan CDP untuk diagnostik jaringan
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']))
Mendeteksi sitekey di halaman pengujian internal
Buka halaman QA Anda (misal https://staging.example.com/captcha-demo) dan ekstrak data-sitekey dari elemen .g-recaptcha atau .cf-turnstile. Bandingkan dengan konfigurasi yang diharapkan pada backend.
Mengirim tugas CaptchaAI dari QA
Setelah sitekey dikonfirmasi, kirim tugas ke in.php dengan URL staging Anda. Polling res.php sampai status selesai. Catat waktu solve sebagai metrik diagnostik.
Memverifikasi respons backend
Inject token ke formulir QA, submit, dan periksa via CDP apakah backend Anda merespons dengan kode sukses. Jika menolak, bandingkan action, sitekey, dan secret dengan konfigurasi server.
Pemecahan masalah
| Gejala | Tindakan yang disarankan |
|---|---|
| Tes tidak menemukan widget | Periksa selector dan timing pada staging Anda |
CaptchaAI mengembalikan ERROR_NO_SLOT_AVAILABLE |
Coba ulang dengan backoff pada pipeline internal |
| Backend QA menolak token | Bandingkan action/sitekey dengan konfigurasi sebenarnya |
Observabilitas
Catat log terstruktur untuk setiap eksekusi QA. Metrik yang dianjurkan: durasi total token, kode respons HTTP, ID tugas, dan kedalaman antrean. Pisahkan saluran log per lingkungan (development, staging, pra-produksi) dan korelasikan dengan distributed tracing (mis. OpenTelemetry) lewat correlation id. Kemampuan memutar ulang skenario penuh dari satu id biasanya memangkas waktu diagnosis insiden setidaknya separuh.
Checklist
- Cakupan pengujian dibatasi pada aplikasi sendiri atau sumber daya yang Anda miliki otorisasinya.
- Kunci CaptchaAI disimpan di secret manager CI atau vault, bukan di source code.
- Setiap eksekusi mencatat latensi dan kode status respons.
- Strategi retry idempoten dengan batas atas untuk error sementara.
- Pengujian dapat direproduksi di pipeline CI.
Contoh pemanggilan QA
Contoh Python berikut menunjukkan alur minimum untuk memvalidasi widget CAPTCHA pada lingkungan staging milik Anda sendiri lewat CaptchaAI.
import os
import time
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # contoh: https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'key': API_KEY,
'method': 'userrecaptcha',
'googlekey': QA_SITE_KEY,
'pageurl': QA_PAGE_URL,
'json': 1,
}
response = requests.post(
'https://ocr.captchaai.com/in.php',
data=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['request']
def fetch_qa_result(task_id: str) -> dict:
params = {
'key': API_KEY,
'action': 'get',
'id': task_id,
'json': 1,
}
while True:
response = requests.get(
'https://ocr.captchaai.com/res.php',
params=params,
timeout=30,
)
response.raise_for_status()
data = response.json()
if data.get('request') != 'CAPCHA_NOT_READY':
return data
time.sleep(5)
FAQ
Apakah alur ini menyentuh trafik produksi?
Tidak. Semua contoh mengasumsikan domain QA milik sendiri seperti staging.example.com. Replikasi konfigurasi CAPTCHA produksi di salinan staging Anda untuk validasi.
Boleh menulis API key di source code?
Tidak boleh. Suntikkan lewat secret manager CI, environment variable, atau vault. Key yang sudah ter-commit harus dirotasi segera.
Strategi apa yang disarankan untuk error sementara?
Retry idempoten dengan exponential backoff (mis. 1s, 2s, 4s) dan batas atas. Error jaringan, respons 5xx, dan ERROR_NO_SLOT_AVAILABLE layak di-retry; error otorisasi yang persisten tidak boleh di-retry.
Panduan terkait yang aman
- Mulai cepat CaptchaAI
- QA CAPTCHA terotorisasi
- Pengujian endpoint CAPTCHA pada formulir sendiri
- Debug saat tes browser gagal padahal API berfungsi
- Menyelesaikan reCAPTCHA v2 dengan API
- Menyelesaikan Cloudflare Turnstile dengan API
- Menyelesaikan GeeTest v3 dengan API
Validasi integrasi CAPTCHA Anda di lingkungan sendiri dengan CaptchaAI.