Use Cases

Devlet portallarında BLS CAPTCHA çözme: pratik stratejiler

Devlet portallarındaki BLS CAPTCHA'ları CaptchaAI API'si ile çözebilir; vize randevusu, belge yükleme ve başvuru formu akışlarınızı oturum süresi dolmadan tamamlayabilirsiniz. Türkiye'den Schengen vize randevusu işleyen ekiplerin çoğu için asıl zorluk CAPTCHA'nın kendisi değil, onu doğru anda çözüp doğru form alanına yerleştirmektir. BLS, CaptchaAI'nin genel kullanıma açık (GA) çözdüğü tiplerden biridir; görsel türünü doğru tanımladığınız sürece çözüm katmanı güvenilir çalışır ve geriye kalan iş, portalın oturum ile form davranışını yönetmektir.

Bu otomasyonları yalnızca işlemeye yetkili olduğunuz başvurular ve kendi QA test akışlarınız için kullanın; topladığınız kişisel veriler KVKK kapsamına girer ve buna göre saklanmalıdır.

BLS CAPTCHA nerede karşınıza çıkar

BLS CAPTCHA'lar ağırlıklı olarak devlet hizmet portallarında, neredeyse her zaman kritik adımın hemen önünde belirir. Nerede çıkacağını önceden bilmek, çözüm mantığını iş akışının doğru yerine — genellikle gönderimden hemen önceye — koymanızı sağlar.

Portal türü CAPTCHA'nın konumu Amacı
Vize randevu rezervasyonu Slot seçiminden önce Otomatik randevu kapmayı engellemek
Belge yükleme formları Gönderimden önce İnsan etkileşimini doğrulamak
Randevu durumu sorgulama Durum görüntülenmeden önce Otomatik sorguları hız sınırına tabi tutmak
Başvuru formları Form gönderiminden önce Otomatik gönderimleri engellemek

Karşınıza çıkan zorluk türleri

Portala göre farklı biçimler görürsünüz ve her biri, CaptchaAI'ye görseli nasıl işleyeceğini bildiren ayrı bir instructions kodu bekler. Doğru talimatı vermek çözüm oranını ve çözüm süresini doğrudan etkiler:

  • Bozulmuş metin içeren görsel tabanlı zorluklar
  • Matematiksel ifade soruları
  • Özel görsel seçme görevleri
  • Metin tabanlı bulmacalar

Oturum ve zamanlama kuralları

Deneyimli ekiplerin darboğazı çözüm hızı değil, oturum disiplinidir. Devlet portalları oturum durumu konusunda katıdır; kodu yazmadan önce şu kuralları netleştirin:

  • Çerezleri olduğu gibi koruyun — requests.Session() veya tarayıcının kalıcı içeriğini kullanın.
  • Hız sınırlarına takılmamak için sayfa yüklemeleri arasına 2–5 saniyelik gecikme koyun.
  • Her POST için CSRF token'ını çıkarıp isteğe ekleyin ve formdaki gizli input alanlarını koruyun.
  • İş akışını oturum zaman aşımı penceresi içinde tamamlayın; otomatik yönlendirmelere izin verin.

En kritik kural zamanlamadır: CAPTCHA'yı gönderimden hemen önce çözün. Erken çözüp geç göndermek, bu portallarda gördüğünüz "oturum süresi doldu" hatasının en yaygın nedenidir.

Maliyet planlaması: neden USD ve thread tabanlı

BLS iş akışları Türkiye'de en çok Schengen vize randevusu bağlamında konuşulur ve genelde düşük ama düzenli hacimli çalışır. CaptchaAI thread tabanlı fiyatlandırır: her planda thread başına sınırsız çözüm alırsınız ve günlük bir üst sınır yoktur. TL kurundaki oynaklığa rağmen aylık maliyetiniz sabit USD olarak kalır; düşük hacimli bir BLS akışı için BASIC ($15/ay, 5 thread) başlangıç noktası olarak yeterlidir, eşzamanlı iş arttıkça thread sayısını yükseltirsiniz. Fiyatlar USD üzerindendir.

Kod yazmadan önce bilinmesi gereken tuzaklar

Bu başarısızlık senaryolarını önceden tanımak, akışınızı baştan sağlam kurmanızı sağlar:

Sorun Sebep Çözüm
Çözümden sonra "oturum süresi doldu" Çözme ve gönderme çok uzun sürdü CAPTCHA'yı gönderimden hemen önce çözün
CAPTCHA görseli yüklenmiyor Belirli bir Referer başlığı gerekiyor Referer başlığını portal sayfasının URL'sine ayarlayın
Yanıt doğru ama form reddediliyor Eksik CSRF token'ı veya gizli alanlar Formdaki tüm hidden input alanlarını çıkarın
Birkaç denemeden sonra portal engelliyor Hız sınırlaması Denemeler arasına gecikme ekleyin ve istek hacmini düşürün
Her seferinde farklı CAPTCHA Portal her istekte yeni CAPTCHA üretiyor Her denemede taze görsel alıp yeniden çözün

CaptchaAI ile adım adım çözme

Aşağıdaki üç adım, HTTP tabanlı en yalın akışı gösterir: görseli al, çöz, formu gönder.

Adım 1: CAPTCHA görselini ve talimatları alın

import requests
from bs4 import BeautifulSoup
import base64

session = requests.Session()

# Load the portal page
page = session.get("https://portal.example.gov/appointment")
soup = BeautifulSoup(page.text, "html.parser")

# Find the CAPTCHA image
captcha_img = soup.select_one("img#captcha-image, img.captcha")
captcha_url = captcha_img["src"]

# Download the CAPTCHA image
if captcha_url.startswith("data:"):
    # Base64 encoded inline image
    img_data = captcha_url.split(",")[1]
else:
    # URL-referenced image
    img_response = session.get(captcha_url)
    img_data = base64.b64encode(img_response.content).decode()

Görsel sayfaya data: URI'si olarak gömülü de gelebilir, ayrı bir URL üzerinden de. İkisini de tek oturum içinde ele almak çerezleri korur.

Adım 2: CaptchaAI'ye gönderin

import time

def solve_bls_captcha(image_base64, instructions=""):
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": "YOUR_API_KEY",
        "method": "base64",
        "body": image_base64,
        "instructions": instructions,
        "json": 1
    })
    task_id = resp.json()["request"]

    for _ in range(30):
        time.sleep(3)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": "YOUR_API_KEY",
            "action": "get",
            "id": task_id,
            "json": 1
        })
        data = result.json()
        if data["status"] == 1:
            return data["request"]
    raise TimeoutError("BLS solve timed out")

# Solve
captcha_answer = solve_bls_captcha(img_data)

Görevi in.php'ye gönderdikten sonra sonucu res.php üzerinden 3 saniye aralıklarla sorgularsınız; çözüm hazır olduğunda kullanacağınız metin yanıtı döner.

Adım 3: Formu gönderin

# Find form fields
form_data = {
    "captcha_response": captcha_answer,
    "appointment_type": "visa",
    "location": "embassy-city",
    # ... other form fields
}

# Submit with the same session (cookies preserved)
result = session.post(
    "https://portal.example.gov/appointment/submit",
    data=form_data
)

if "success" in result.text.lower():
    print("Form submitted successfully")

Çözülen yanıtı, portalın beklediği alan adıyla aynı oturumdan gönderin. Çerezleri koruyan bu son POST, çözümü gerçek bir gönderime dönüştüren adımdır.

Devlet portallarında sık görülen desenler

Desen 1: Çok adımlı formlar

Devlet portalları çoğu zaman CAPTCHA'nın yalnızca son adımda göründüğü çok adımlı formlar kullanır:

# Step 1: Select service type
session.post(url, data={"service": "passport"})

# Step 2: Fill personal details
session.post(url, data={"name": "...", "dob": "..."})

# Step 3: Select appointment slot
session.post(url, data={"slot": "2026-04-10-09:00"})

# Step 4: Solve CAPTCHA and confirm
captcha_answer = solve_bls_captcha(get_captcha_image(session))
session.post(url, data={"captcha": captcha_answer, "confirm": "true"})

Desen 2: Hatada CAPTCHA'nın yenilenmesi

Yanıt yanlışsa portal yeni bir CAPTCHA üretir; bu yüzden her denemede taze görsel almanız gerekir:

max_attempts = 3
for attempt in range(max_attempts):
    # Get fresh CAPTCHA for each attempt
    captcha_image = get_captcha_image(session)
    answer = solve_bls_captcha(captcha_image)

    result = session.post(submit_url, data={"captcha": answer})
    if "incorrect" not in result.text.lower():
        break
    print(f"Attempt {attempt + 1} — CAPTCHA refreshed, retrying")

Desen 3: Süre sınırlı oturumlar

Devlet portallarının oturumları genellikle belirli bir sürenin sonunda kapanır. Zaman aşımına yaklaşınca oturumu tazelemek, akışın ortasında kesintiye uğramanızı önler:

import time

session_start = time.time()
SESSION_TIMEOUT = 600  # 10 minutes typical

def check_session_valid():
    elapsed = time.time() - session_start
    if elapsed > SESSION_TIMEOUT - 60:  # 1 min safety margin
        print("Session expiring — refresh needed")
        return False
    return True

# Before CAPTCHA submission
if not check_session_valid():
    # Start a fresh session
    session = requests.Session()
    session.get(portal_url)
    session_start = time.time()

JavaScript ile tarayıcı otomasyonu

Bazı portallar sayfayı yalnızca JavaScript çalıştıktan sonra oluşturur. Bu durumda HTTP istekleri yerine Puppeteer ile bir headless tarayıcı (gerektiğinde görünür pencere) kullanmak gerekir:

const puppeteer = require('puppeteer');

async function handleBLSPortal() {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  await page.goto('https://portal.example.gov/appointment');

  // Wait for CAPTCHA to load
  await page.waitForSelector('img#captcha-image');

  // Get CAPTCHA image as base64
  const imgBase64 = await page.evaluate(() => {
    const img = document.querySelector('img#captcha-image');
    const canvas = document.createElement('canvas');
    canvas.width = img.naturalWidth;
    canvas.height = img.naturalHeight;
    const ctx = canvas.getContext('2d');
    ctx.drawImage(img, 0, 0);
    return canvas.toDataURL('image/png').split(',')[1];
  });

  // Solve with CaptchaAI
  const answer = await solveBLSCaptcha(imgBase64);

  // Type the answer
  await page.type('#captcha-input', answer);

  // Submit
  await page.click('#submit-button');

  // Wait for result
  await page.waitForNavigation();
}

Tarayıcı yaklaşımı daha ağırdır; yalnızca sayfa JavaScript oluşturma gerektiriyorsa veya karmaşık istemci tarafı doğrulama varsa tercih edin.

Sık sorulan sorular

BLS CAPTCHA çözümü ne kadar sürer?

BLS CAPTCHA'lar genellikle 5–15 saniye içinde çözülür. Bu süreyi oturum zaman aşımı hesabınıza dahil edin: portal oturumu kapanmadan önce hem çözme hem gönderme için yeterli payınız olduğundan emin olun.

instructions kodu ne işe yarar?

instructions, CaptchaAI'ye görseldeki zorluk tipini (bozulmuş metin, matematik işlemi, görsel seçme vb.) bildirir. Portalın gösterdiği tipe göre doğru talimatı vermek çözüm oranını doğrudan etkiler; bu yüzden akışa başlamadan önce tipi belirleyip talimatı sabitleyin.

HTTP istekleri mi yoksa tarayıcı otomasyonu mu kullanmalıyım?

requests.Session() ile HTTP istekleri daha hızlı ve daha hafiftir; çoğu BLS portalı bu şekilde çalışır. Tarayıcı otomasyonunu yalnızca sayfa JavaScript oluşturma gerektiriyorsa veya karmaşık istemci tarafı doğrulama varsa devreye alın.

Oturum, çözümden hemen sonra kapanırsa ne yapmalıyım?

Çözme adımını mümkün olduğunca gönderime yaklaştırın ve zaman aşımına yaklaşınca oturumu tazeleyin (Desen 3). Çözümü erken alıp formu geç göndermek, "oturum süresi doldu" hatasının en yaygın sebebidir.

İlgili makaleler

Daha derine inmek için şu rehberlere bakabilirsiniz: adım adım BLS CAPTCHA çözme rehberi, BLS CAPTCHA'yı Node.js ile çözme ve BLS CAPTCHA'nın ızgara mantığı nasıl çalışır.

Sonraki adımlar

BLS CAPTCHA'ları devlet portallarında çözmeye bugün başlayın — CaptchaAI API anahtarınızı alın ve ilk oturumunuzu yüksek başarı oranıyla tamamlayın.

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