API Tutorials

BLS CAPTCHA Adım Adım Nasıl Çözülür?

BLS CAPTCHA'yı çözmek için görselleri ve talimat metnini sayfadan çıkarır, CaptchaAI'nin bls yöntemine gönderir ve dönen görsel indeksleriyle doğru kareleri işaretleyip formu gönderirsiniz. Bütün akış üç adıma iner:

  • Çıkarın: talimat metnini ve tüm görselleri sayfadan Base64 olarak alın.
  • Gönderin: hepsini tek istekte CaptchaAI'nin bls yöntemine iletin.
  • İşaretleyin: dönen indeksleri ("1,3,5" gibi) sayfadaki doğru karelere uygulayın.

Bu rehber, çalışan Python ve Node.js kodlarıyla her adımı sırayla gösterir.

Kapsam notu: bu rehber yalnızca yetkili ve izinli iş akışları içinde CAPTCHA doğrulamasının programatik olarak çözülmesini ele alır.

BLS CAPTCHA nedir ve neden ayrı bir yöntem gerektirir?

BLS CAPTCHA, BLS International vize başvuru portallarında karşınıza çıkan, görüntü tabanlı özel bir doğrulamadır. Türkiye'de Schengen başvuru yoğunluğu nedeniyle bu portallar geliştiricilerin sık karşılaştığı bir yüzeydir. Standart bir reCAPTCHA çözümüyle karıştırılmamalıdır; ayırt edici noktalar şunlar:

  • Ekranda aynı anda 3–9 küçük görsel belirir.
  • "Araba içeren tüm görselleri seçin" gibi bir talimat metni hangi karelerin işaretleneceğini söyler.
  • Izgara mantığı reCAPTCHA'ya benzer, ancak görseller ve talimatlar BLS'e özgüdür — bu yüzden istek bls yöntemine gider, userrecaptcha değil.

Başlamadan önce: gereksinimler

Öğe Değer
CaptchaAI API anahtarı captchaai.com üzerinden alın
BLS CAPTCHA görselleri Sayfadan Base64 kodlu
Talimat metni Hangi görsellerin seçileceğini belirten metin
Dil Python 3.7+ veya Node.js 14+

CaptchaAI, BLS CAPTCHA'yı resmî olarak destekleyen (GA) türler arasında sunar ve API tarafında bls yöntemiyle çağırırsınız.

Adım 1: Görselleri ve talimat metnini sayfadan çıkarın

İlk iş, hem talimatı hem de her görseli sayfadan alıp Base64 biçimine çevirmektir. Görselin src değeri zaten data:image ile başlıyorsa doğrudan veriyi alırsınız; aksi hâlde görseli indirip kendiniz kodlarsınız. Aşağıda aynı işlemin Selenium ve Puppeteer karşılıkları var.

Selenium ile

from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
import requests as req

driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")

# Get instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
print(f"Instruction: {instruction}")

# Get all captcha images as base64
images = {}
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for i, img in enumerate(captcha_imgs, 1):
    src = img.get_attribute("src")
    if src.startswith("data:image"):
        # Already base64
        images[f"image_base64_{i}"] = src.split(",")[1]
    else:
        # Download and encode
        img_data = req.get(src).content
        images[f"image_base64_{i}"] = base64.b64encode(img_data).decode()

Puppeteer ile

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
await page.goto('https://blsitalypakistan.com/appointment');

// Get instruction
const instruction = await page.$eval('.captcha-instruction', el => el.textContent);

// Get images as base64
const images = await page.$$eval('.captcha-image img', imgs =>
  imgs.map((img, i) => ({
    key: `image_base64_${i + 1}`,
    value: img.src.startsWith('data:') ? img.src.split(',')[1] : null
  }))
);

Numaralandırmanın sayfadaki görüntü sırasıyla birebir aynı olması kritiktir — sıralama kayarsa dönen indeksler yanlış karelere denk gelir.


Adım 2: Görselleri CaptchaAI'ye gönderin

Talimat metnini ve tüm görselleri tek istekte bls yöntemine gönderin. Her görsel image_base64_1, image_base64_2 … biçiminde ayrı bir alan olarak eklenir (en fazla 9 görsel). Yanıttaki request alanı, sonucu sorgulayacağınız görev kimliğini (task ID) döndürür.

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

payload = {
    "key": API_KEY,
    "method": "bls",
    "instructions": instruction,
    "json": 1
}

# Add each image (up to 9)
for key, value in images.items():
    payload[key] = value

response = requests.post("https://ocr.captchaai.com/in.php", data=payload)
data = response.json()

if data.get("status") != 1:
    raise Exception(f"Submit error: {data.get('request')}")

task_id = data["request"]
print(f"Task submitted: {task_id}")

Node.js

const axios = require('axios');
const FormData = require('form-data');

async function submitBLS(instruction, images) {
  const params = {
    key: 'YOUR_API_KEY',
    method: 'bls',
    instructions: instruction,
    json: 1,
    ...Object.fromEntries(images.map(img => [img.key, img.value]))
  };

  const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, { params });
  if (data.status !== 1) throw new Error(data.request);
  return data.request;
}

status alanı 1 değilse istek reddedilmiştir. Bu durumda:

  • request alanındaki hata kodunu okuyun.
  • Talimatın ve en az bir görselin eksiksiz gönderildiğini doğrulayın.
  • Görsellerin data:image/...;base64, önekinden arındırıldığından emin olun.

Adım 3: Sonucu sorgulayın

Gönderim anında çözüm hazır olmaz; res.php uç noktasını periyodik olarak sorgularsınız. Çözüm hazır olana kadar API CAPCHA_NOT_READY döndürür; hazır olduğunda request alanı doğru görsellerin indekslerini ("1,3,5" gibi) verir. Aşağıdaki döngü 5 saniyede bir, en fazla 30 kez sorgular.

Python

def get_bls_solution(task_id):
    for _ in range(30):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id,
            "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]  # e.g., "1,3,5" (image indices)
        if result.get("request") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {result.get('request')}")

    raise Exception("Timeout")

solution = get_bls_solution(task_id)
print(f"Select images: {solution}")  # e.g., "1,3,5"

Sorgulama aralığını çok kısa tutmak gereksiz istek üretir; 5 saniyelik aralık BLS için makul bir başlangıçtır. Üretimde üstel geri çekilme (exponential backoff) ile toplam bekleme süresini sınırlandırabilirsiniz.


Adım 4: Doğru görsellere tıklayın ve formu gönderin

Dönen indeksler 1 tabanlıdır; sayfadaki görsel listesi ise 0 tabanlıdır, bu yüzden her indeksten 1 çıkararak tıklarsınız.

# Parse the solution indices
selected = [int(i) for i in solution.split(",")]

# Click each correct image
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for idx in selected:
    captcha_imgs[idx - 1].click()  # Convert 1-based to 0-based
    time.sleep(0.3)  # Small delay between clicks

# Submit the form
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()

Son iki uyarı:

  • Tıklamalar arasına küçük bir gecikme koymak, arayüzün seçim durumunu güncellemesine izin verir.
  • Görseller çıkarıldıktan sonra sayfa yeni bir set yüklerse çözüm geçersiz olur; çıkarma ile tıklama arasındaki süreyi kısa tutun.

Uçtan uca çalışan Python örneği

Aşağıdaki tek dosya, dört adımı tek akışta birleştirir:

  • Talimat ve görsellerin çıkarılması,
  • bls yöntemine gönderim,
  • sonucun sorgulanması,
  • doğru karelerin işaretlenip formun gönderilmesi.
import requests
import time
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By

API_KEY = "YOUR_API_KEY"
driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")

# 1. Extract instruction and images
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")

payload = {"key": API_KEY, "method": "bls", "instructions": instruction, "json": 1}
for i, img in enumerate(captcha_imgs, 1):
    src = img.get_attribute("src")
    if src.startswith("data:image"):
        payload[f"image_base64_{i}"] = src.split(",")[1]

# 2. Submit to CaptchaAI
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload).json()
task_id = resp["request"]

# 3. Poll for solution
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        selected = [int(i) for i in result["request"].split(",")]
        break

# 4. Click correct images and submit
for idx in selected:
    captcha_imgs[idx - 1].click()
    time.sleep(0.3)
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()

print("CAPTCHA solved!")
driver.quit()

Sık karşılaşılan hatalar ve çözümleri

BLS görsel tanımaya dayandığı için çözüm süresi metin tabanlı CAPTCHA'lardan daha uzundur; sorgulama zaman aşımınızı buna göre planlayın.

Aşağıdaki tablo, BLS entegrasyonlarında en sık görülen hataları ve pratik çözümlerini özetler.

Hata Sebep Düzeltme
ERROR_BAD_PARAMETERS Eksik talimat veya görsel Hem metin talimatını hem de en az bir görseli ekleyin
ERROR_CAPTCHA_UNSOLVABLE Görseller çok bulanık veya tanınmıyor Daha yüksek kalitede görsel yakalayın; Base64 kodlamasının doğru olduğundan emin olun
Yanlış görseller seçildi Hatalı görsel sırası Görsellerin doğru görüntüleme sırasına göre numaralandırıldığından emin olun
Çözüm reddedildi Görseller çıkarıldıktan sonra değişti Görselleri çıkarın ve hemen gönderin

Çözümün kabul edilmemesinin en yaygın nedeni, görsellerin çıkarıldıktan sonra sayfada değişmesidir. Görselleri çıkarın, hemen gönderin ve dönen indeksleri gecikmeden uygulayın.


Fiyatlandırma ve hangi planla başlamalısınız

CaptchaAI çözüm başına değil, eşzamanlı thread başına ücretlendirir; her plan o ay için sınırsız çözüm içerir. Türk geliştiriciler için bu, TL kurundaki oynaklıktan bağımsız, öngörülebilir aylık USD maliyet demektir. Başlangıç için iki mantıklı seçenek:

  • BASIC ($15/ay, 5 thread) — tek geliştiricili bir BLS entegrasyonu ve düşük eşzamanlılık için yeterli.
  • STANDARD ($30/ay, 15 thread) — birden fazla iş akışını aynı anda çalıştıran ekipler için.

Eşzamanlı çözüm ihtiyacınız arttıkça ADVANCE ($90/ay, 50 thread) ve üzerine geçebilirsiniz; güncel tüm kademeler için captchaai.com üzerindeki fiyat sayfasına bakın.


Tam çalıştırılabilir örnek

Ortam kurulumu, sorgulama, yeniden denemeler ve hata işleme içeren eksiksiz bir proje mi istiyorsunuz?

Çalıştırılabilir örneğin tamamını GitHub'da görün →


Sık sorulan sorular

CaptchaAI BLS CAPTCHA'yı destekliyor mu?

Evet. BLS, CaptchaAI'nin genel kullanıma açık (GA) türlerinden biridir ve API'de bls yöntemiyle çağrılır. Göndermeniz gereken tek şey Base64 görseller ve talimat metnidir.

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

Tipik olarak 15–30 saniye. Görsel tanıma, metin tabanlı CAPTCHA'lardan daha uzun sürdüğü için sorgulama zaman aşımınızı buna göre ayarlayın.

Hangi CaptchaAI planıyla başlamalıyım?

Faturalama çözüm başına değil, eşzamanlı thread başınadır:

  • BASIC ($15/ay, 5 thread): tek geliştiricili bir BLS entegrasyonu için yeterli.
  • STANDARD ($30/ay, 15 thread): paralel iş akışları çalıştıran ekipler için.

Çözüm neden reddedildi, ne yapmalıyım?

En sık iki neden var:

  • Görseller çıkarıldıktan sonra değişmiş olabilir — çıkarır çıkarmaz gönderin.
  • Numaralandırma sayfadaki görüntü sırasıyla uyuşmuyor olabilir — sırayı birebir koruyun.

BLS CAPTCHA otomasyonu KVKK açısından uygun mu?

CAPTCHA doğrulamasını çözmek tek başına kişisel veri işlemez; ancak topladığınız veriler kişisel veri içeriyorsa süreç KVKK kapsamına girer. Otomasyonu yalnızca yetkiniz olan, izinli iş akışlarında kullanın.


İlgili kılavuzlar

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