Regierungsportale, die Visumstermine, Genehmigungsanträge und Dokumenteneinreichungen verarbeiten, verwenden häufig BLS CAPTCHAs. Diese CAPTCHAs schützen stark nachgefragte Terminplätze und Formularübermittlungen. CaptchaAI löst BLS CAPTCHAs mit einer Erfolgsquote von 100 % und ermöglicht so die Automatisierung von Interaktionen mit diesen Portalen.
Wo BLS CAPTCHAs erscheinen
BLS CAPTCHAs sind auf Regierungsdienstportalen zu finden, insbesondere:
| Portaltyp | CAPTCHA-Platzierung | Zweck |
|---|---|---|
| Visa-Terminbuchung | Vor der Slot-Auswahl | Verhindern Sie die automatische Übernahme von Terminen |
| Formulare zum Hochladen von Dokumenten | Vor der Einreichung | Überprüfen Sie die menschliche Interaktion |
| Überprüfung des Terminstatus | Vor der Statusanzeige | Automatisierte Überprüfungen mit Ratenbegrenzung |
| Antragsformulare | Vor dem Absenden des Formulars | Verhindern Sie automatisierte Übermittlungen |
BLS CAPTCHA-Eigenschaften
BLS CAPTCHAs werden normalerweise wie folgt dargestellt:
- Bildbasierte Herausforderungen mit verzerrtem Text
- Herausforderungen beim mathematischen Ausdruck
- Benutzerdefinierte Bildauswahlaufgaben
- Textbasierte Rätsel
Für jede Herausforderung ist ein spezifischer instructions-Code erforderlich, der CaptchaAI mitteilt, wie das CAPTCHA verarbeitet werden soll.
Lösung mit CaptchaAI
Schritt 1: Holen Sie sich das CAPTCHA-Bild und die Anweisungen
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()
Schritt 2: An CaptchaAI senden
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)
Schritt 3: Senden Sie das Formular
# 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")
Muster für Regierungsportale
Muster 1: Mehrstufige Formulare
Regierungsportale verwenden häufig mehrstufige Formulare, bei denen das CAPTCHA im letzten Schritt erscheint:
# 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"})
Muster 2: CAPTCHA-Aktualisierung bei Fehler
Wenn die CAPTCHA-Antwort falsch ist, generiert das Portal ein neues CAPTCHA:
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")
Muster 3: Zeitlich begrenzte Sitzungen
Bei Regierungsportalen laufen Sitzungen häufig nach einem festgelegten Zeitraum ab:
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()
Browser-Automatisierungsansatz (JavaScript)
Für Portale, die die Ausführung von JavaScript erfordern:
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];
});
// Mit CaptchaAI lösen
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();
}
Tipps zur Sitzungsverwaltung
Regierungsportale legen strengen Wert auf den Sitzungsstatus:
| Anforderung | Umsetzung |
|---|---|
| Pflegen Sie Cookies genau | Verwenden Sie requests.Session() oder einen browserbeständigen Kontext |
| Überschreiten Sie nicht die Tarifgrenzen | Verzögerungen zwischen Seitenladevorgängen hinzufügen (2–5 Sekunden) |
| Behandeln Sie CSRF-Token | Extrahieren Sie CSRF-Tokens und fügen Sie sie in jeden POST ein |
| Beachten Sie Sitzungszeitüberschreitungen | Schließen Sie Workflows innerhalb des Timeout-Fensters ab |
| Folgen Sie Weiterleitungsketten | Erlauben Sie automatische Weiterleitungen in Ihrem HTTP-Client |
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Zu viele CAPTCHAs in kurzer Zeit | Abrufrate oder Parallelität ist für die Quelle zu aggressiv | Drossele Intervalle, halte Sessions stabil und prüfe die Qualität deiner Proxys |
| Daten fehlen trotz gelöster CAPTCHA | Der Parser liest eine alte oder unvollständige Ansicht aus | Extrahiere Daten erst nach erfolgreicher Token-Anwendung in derselben Sitzung |
| Kosten steigen stärker als erwartet | Zu viele Wiederholungen oder unnötige Seitenaufrufe lösen zusätzliche Challenges aus | Löse nur kritische Schritte und protokolliere Wiederholungen pro Quelle |
Verwandte Leitfäden
- CaptchaAI Schnellstart
- API-Antwortformate und Fehlercodes
- reCAPTCHA v2 per API lösen