API-Tutorials

So lösen Sie BLS CAPTCHA Schritt für Schritt

BLS CAPTCHA lösen Sie in vier Schritten: die Bilder und den Anweisungstext aus der Seite auslesen, beides an die CaptchaAI-API übermitteln, die zurückgegebenen Bild-Indizes abfragen und die passenden Kacheln anklicken. Genau diesen Ablauf zeigt dieser Leitfaden – mit lauffähigem Code für Python und Node.js.

BLS CAPTCHA ist die bildbasierte Abfrage in den Visa-Terminportalen von BLS International – für viele Antragsteller im DACH-Raum die letzte technische Hürde vor einem freien Termin. Sie ähnelt dem reCAPTCHA-Raster: mehrere Bilder, dazu eine Anweisung wie „Wählen Sie alle Bilder mit einem Auto aus“. Anders als bei reCAPTCHA stammt der Bildersatz von BLS selbst. Setzen Sie die Automatisierung nur für eigene, legitime Anträge ein.

Der Ablauf in Kürze

  1. Bilder und Anweisungstext aus der Seite auslesen (Selenium oder Puppeteer).
  2. Beides in einer Anfrage an CaptchaAI übermitteln (Methode bls).
  3. Das Ergebnis per Polling abholen – zurück kommen die Indizes der richtigen Bilder.
  4. Die genannten Kacheln anklicken und das Formular absenden.

Was Sie brauchen

  • CaptchaAI API-Schlüssel – aus Ihrem Konto auf captchaai.com.
  • BLS CAPTCHA-Bilder – Base64-kodiert von der Seite.
  • Anweisungstext – der Satz, der angibt, welche Bilder auszuwählen sind.
  • Laufzeit – Python 3.7+ oder Node.js 14+.

CaptchaAI rechnet Thread-basiert ab statt pro Lösung: Jeder Tarif enthält unbegrenzte Lösungen pro Thread, der Einstieg BASIC kostet 15 $/Monat mit 5 Threads. Für die BLS-Abfrage nutzen Sie die Methode bls; übermittelt wird an in.php, das Ergebnis holen Sie über res.php. Beide Endpunkte liegen unter ocr.captchaai.com.

Schritt 1: Bilder und Anweisungstext aus der Seite auslesen

Ein BLS CAPTCHA zeigt in der Regel 3–9 Bilder und darüber eine Textanweisung, etwa „Wählen Sie alle Bilder mit einem Auto aus“. Lesen Sie beides – die Anweisung und jedes Bild als Base64 – direkt aus dem DOM aus.

Mit Selenium

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()

Mit Puppeteer

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
  }))
);

Liegen die Bilder bereits als data:image-URL vor, genügt der Teil nach dem Komma; externe Bild-URLs laden Sie herunter und kodieren sie selbst nach Base64.

Schritt 2: Bilder an CaptchaAI übermitteln

Schicken Sie Anweisungstext und alle Bilder in derselben Anfrage an den BLS-Solver – ohne Anweisung kann der Solver nicht wissen, welche Kacheln gemeint sind.

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;
}

Die API antwortet mit einer task_id für die Ergebnisabfrage.

Schritt 3: Lösung per Polling abfragen

Fragen Sie den Status mit der task_id in kurzen Abständen ab. Die fertige Lösung enthält die Indizes der richtigen Bilder, zum Beispiel 1,3,5.

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"

Solange die Antwort CAPCHA_NOT_READY lautet, ist die Lösung noch in Arbeit – jede andere Meldung ist ein Fehler und sollte die Schleife abbrechen. Mit 30 Versuchen im 5-Sekunden-Takt deckt die Schleife ein Zeitfenster von bis zu 150 Sekunden ab; das reicht für BLS-Abfragen komfortabel. Fragen Sie nicht enger als alle 5 Sekunden ab, um unnötige Last auf dem res.php-Endpunkt zu vermeiden.

Schritt 4: Richtige Bilder anklicken und Formular absenden

Wandeln Sie die zurückgegebenen Indizes in Klicks um. Die API zählt ab 1, Listen in Python ab 0 – deshalb der Versatz um eine Position. Die kurze Pause zwischen den Klicks hält das Verhalten nah an einer realen Bedienung; erst nach allen Auswahlklicks senden Sie das Formular ab.

# 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()

Häufige Fehler und ihre Behebung

Bevor Sie das komplette Skript zusammensetzen, lohnt ein Blick auf die vier Meldungen, die in der Praxis am häufigsten auftreten:

Fehler Ursache Lösung
ERROR_BAD_PARAMETERS Anweisung oder Bilder fehlen Legen Sie den Anweisungstext und mindestens ein Bild derselben Anfrage bei
ERROR_CAPTCHA_UNSOLVABLE Bilder zu unscharf oder nicht auswertbar Bilder in höherer Qualität erfassen; Base64-Kodierung prüfen
Falsche Kacheln ausgewählt Bildreihenfolge stimmt nicht Bilder in der tatsächlichen Anzeigereihenfolge durchnummerieren
Lösung abgelehnt Bilder haben sich nach dem Auslesen geändert Bilder auslesen und sofort übermitteln, bevor die Seite neu lädt

Vollständiges Python-Beispiel

Die vier Schritte in einem durchgehenden Skript – vom Auslesen der Seite bis zum Absenden des Formulars:

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()

Möchten Sie stattdessen ein fertiges Projekt mit Umgebungseinrichtung, Polling, Wiederholungslogik und sauberer Fehlerbehandlung? Das vollständige, ausführbare Beispiel liegt auf GitHub:

Das vollständige ausführbare Beispiel finden Sie auf GitHub →

Häufige Fragen

Ist das automatische Lösen von BLS CAPTCHA rechtlich zulässig?

Für eigene, legitime Anträge im Rahmen der Nutzungsbedingungen in aller Regel ja – die Technik ersetzt nur das manuelle Anklicken der Kacheln. Prüfen Sie vorab die AGB des Portals und, falls personenbezogene Daten anfallen, Ihre DSGVO-Grundlagen.

Was kostet das Lösen von BLS CAPTCHA mit CaptchaAI?

CaptchaAI rechnet Thread-basiert ab, nicht pro Lösung. Jeder Tarif enthält unbegrenzte Lösungen pro Thread; der Einstieg BASIC kostet 15 $/Monat mit 5 Threads. Für gelegentliche BLS-Termine reicht der kleinste Tarif meist aus.

Wie lange dauert das Lösen eines BLS CAPTCHA?

Meist 15–30 Sekunden. Bilderkennung braucht länger als textbasierte CAPTCHAs, deshalb ist die Polling-Schleife auf mehrere Versuche im 5-Sekunden-Takt ausgelegt.

Warum wird eine korrekte Lösung manchmal abgelehnt?

Häufigste Ursache ist ein Zeitproblem: Der Bildersatz auf der Seite hat sich zwischen Auslesen und Absenden geändert. Lesen Sie die Bilder unmittelbar vor der Übermittlung aus und klicken Sie die Kacheln direkt nach Erhalt der Indizes an, ohne die Seite zwischendurch neu zu laden.

Kann ich BLS CAPTCHA ohne Selenium lösen?

Ja. Sobald Sie Bilder und Anweisungstext per HTTP-Anfrage gewinnen, benötigt die CaptchaAI-API nur die Base64-Bilder und den Text. Selenium oder Puppeteer sind nur bei JavaScript-gerenderten Seiten nötig.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.