Anwendungsfälle

CAPTCHA-Verarbeitung für die Automatisierung der Suche nach öffentlichen Aufzeichnungen

Portale für öffentliche Aufzeichnungen – Gerichtssysteme, Bezirksgutachter, Archivierungsunterlagen des Staatssekretärs, Datenbanken mit wichtigen Aufzeichnungen – verlassen sich stark auf Bild- und OCR-CAPTCHAs. Diese Portale verwenden häufig ältere CAPTCHA-Implementierungen mit verzerrtem Text, mathematischen Problemen oder benutzerdefinierten Bildproblemen. Hier erfahren Sie, wie Sie mit ihnen über verschiedene Datensatztypen hinweg umgehen.

Gängige CAPTCHA-Typen nach Portal

Portalkategorie Typisches CAPTCHA Herausforderungsbeispiele
Suche nach Gerichtsfällen Benutzerdefiniertes Text-CAPTCHA Verzerrte 5–6 Zeichen lange alphanumerische Zeichenfolge
Grundbucheinträge des Landkreises Mathe-CAPTCHA „Was ist 4 + 7?“
Suche nach Geschäftseinheiten Bildtext CAPTCHA Verzogene Buchstaben mit Linienrauschen
Lebenswichtige Aufzeichnungen reCAPTCHA v2 Auswahl des Bildrasters
Baugenehmigungen Einfaches Text-CAPTCHA 4-stelliger Zahlencode
UCC-Einreichungen Benutzerdefiniertes OCR-CAPTCHA Groß- und Kleinschreibung mit Hintergrundgeräuschen

Suche nach öffentlichen Aufzeichnungen mit CAPTCHA-Lösung

import requests
import base64
import time
from urllib.parse import urljoin

class PublicRecordsSearcher:
    def __init__(self, api_key):
        self.api_key = api_key
        self.session = requests.Session()
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        })

    def search_court_records(self, portal_url, case_number):
        """Search court records, solving image CAPTCHAs as needed."""
        # Load the search page
        page = self.session.get(f"{portal_url}/search")

        # Extract CAPTCHA image
        captcha_img_url = self._extract_captcha_url(page.text, portal_url)
        if not captcha_img_url:
            # No CAPTCHA on this page
            return self._submit_search(portal_url, case_number)

        # Download and solve CAPTCHA
        img_response = self.session.get(captcha_img_url)
        captcha_text = self._solve_image_captcha(img_response.content)

        # Submit search with solved CAPTCHA
        return self._submit_search(portal_url, case_number, captcha_text)

    def _extract_captcha_url(self, html, base_url):
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html, "html.parser")

        # Look for common CAPTCHA image patterns
        captcha_img = (
            soup.find("img", {"id": "captchaImage"}) or
            soup.find("img", {"class": "captcha"}) or
            soup.find("img", attrs={"src": lambda s: s and "captcha" in s.lower()})
        )

        if captcha_img and captcha_img.get("src"):
            return urljoin(base_url, captcha_img["src"])
        return None

    def _solve_image_captcha(self, image_bytes):
        img_base64 = base64.b64encode(image_bytes).decode("utf-8")

        resp = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": "base64",
            "body": img_base64,
            "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": self.api_key,
                "action": "get",
                "id": task_id,
                "json": 1
            })
            data = result.json()
            if data["status"] == 1:
                return data["request"]

        raise TimeoutError("CAPTCHA solve timed out")

    def _submit_search(self, portal_url, case_number, captcha_text=None):
        form_data = {"caseNumber": case_number}
        if captcha_text:
            form_data["captcha"] = captcha_text

        response = self.session.post(
            f"{portal_url}/search/results",
            data=form_data
        )
        return response.text

# Usage
searcher = PublicRecordsSearcher("YOUR_API_KEY")
results = searcher.search_court_records(
    "https://courts.example.gov",
    "2024-CV-12345"
)

Umgang mit mathematischen CAPTCHAs

Einige Regierungsportale verwenden einfache mathematische CAPTCHAs. CaptchaAI behandelt diese als Texterkennung:

def solve_math_captcha(self, image_bytes):
    """Solve math CAPTCHAs like '4 + 7 = ?'"""
    img_base64 = base64.b64encode(image_bytes).decode("utf-8")

    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": self.api_key,
        "method": "base64",
        "body": img_base64,
        "textinstructions": "solve the math equation and return only the number",
        "json": 1
    })
    task_id = resp.json()["request"]

    # Poll for result
    for _ in range(30):
        time.sleep(3)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": self.api_key,
            "action": "get",
            "id": task_id,
            "json": 1
        })
        data = result.json()
        if data["status"] == 1:
            return data["request"]

    raise TimeoutError("Math CAPTCHA solve timed out")

Multi-Portal-Suche (JavaScript)

class RecordsAggregator {
  constructor(apiKey) {
    this.apiKey = apiKey;
  }

  async searchAcrossPortals(query, portals) {
    const results = [];

    for (const portal of portals) {
      try {
        const data = await this.searchPortal(portal, query);
        results.push({ portal: portal.name, records: data });
      } catch (error) {
        results.push({ portal: portal.name, error: error.message });
      }
    }

    return results;
  }

  async searchPortal(portal, query) {
    const pageResponse = await fetch(portal.searchUrl);
    const html = await pageResponse.text();

    // Check for image CAPTCHA
    const captchaMatch = html.match(/captcha[^"]*\.(?:png|jpg|gif)/i);
    let captchaAnswer = null;

    if (captchaMatch) {
      const imgUrl = new URL(captchaMatch[0], portal.searchUrl).href;
      const imgData = await fetch(imgUrl);
      const buffer = await imgData.arrayBuffer();
      const base64 = Buffer.from(buffer).toString('base64');

      captchaAnswer = await this.solveImageCaptcha(base64);
    }

    // Submit search
    const formData = new URLSearchParams({ q: query });
    if (captchaAnswer) formData.append('captcha', captchaAnswer);

    const response = await fetch(portal.searchUrl, {
      method: 'POST',
      body: formData
    });

    return response.text();
  }

  async solveImageCaptcha(base64Image) {
    const submitResp = await fetch('https://ocr.captchaai.com/in.php', {
      method: 'POST',
      body: new URLSearchParams({
        key: this.apiKey,
        method: 'base64',
        body: base64Image,
        json: '1'
      })
    });

    const { request: taskId } = await submitResp.json();

    for (let i = 0; i < 30; i++) {
      await new Promise(r => setTimeout(r, 3000));
      const result = await fetch(
        `https://ocr.captchaai.com/res.php?key=${this.apiKey}&action=get&id=${taskId}&json=1`
      );
      const data = await result.json();
      if (data.status === 1) return data.request;
    }

    throw new Error('CAPTCHA solve timed out');
  }
}

// Usage
const aggregator = new RecordsAggregator('YOUR_API_KEY');
const results = await aggregator.searchAcrossPortals('Smith LLC', [
  { name: 'State Business Registry', searchUrl: 'https://sos.example.gov/search' },
  { name: 'County Court Records', searchUrl: 'https://courts.example.gov/search' }
]);

CAPTCHA-Parameter für Regierungsportale

Parameter Wert Wann zu verwenden
method base64 Bild als Bytes heruntergeladen
method post Bilddatei direkt einreichen
language 0 German/Latin Text-CAPTCHAs
numeric 1 CAPTCHAs nur für Ziffern
min_len / max_len Variiert Wenn die Anzahl der Zeichen vorhersehbar ist
textinstructions Benutzerdefinierte Eingabeaufforderung Mathematische CAPTCHAs oder bestimmte Formate

Fehlerbehebung

Problem Ursache Lösung
CAPTCHA-Bild gibt 403 zurück Sitzungscookie fehlt Laden Sie zuerst die Suchseite und rufen Sie dann das Bild ab
Falsche CAPTCHA-Antwort Geringe Bildqualität Bild vorverarbeiten (Kontrast erhöhen, Rauschen entfernen)
CAPTCHA wird beim Absenden aktualisiert Formular-Token abgelaufen Extrahieren Sie versteckte Formularfelder mit CAPTCHA
Die Suche gibt nach CAPTCHA leer zurück POST-Weiterleitung verlorene Cookies Verwenden Sie allow_redirects=True und behalten Sie die Sitzung bei

FAQ

Warum verwenden Regierungsportale immer noch Bild-CAPTCHAs?

Viele Regierungssysteme verwenden veraltete Software, die älter als reCAPTCHA und Cloudflare Turnstile ist. Benutzerdefinierte Bild-CAPTCHAs waren der Standard, als diese Systeme entwickelt wurden, und Aktualisierungen in der Regierungs-IT sind langsam.

Wie genau ist CaptchaAI für CAPTCHAs mit verzerrtem Text?

CaptchaAI unterstützt über 27.500 Bild-CAPTCHA-Typen mit hoher Genauigkeit. Verwenden Sie bei stark verzerrtem Text den Parameter textinstructions, um die Erkennung zu steuern – zum Beispiel „Buchstaben und Zahlen, keine Leerzeichen“.

Sollte ich CAPTCHA-Bilder vor dem Absenden vorverarbeiten?

Durch Vorverarbeitung (Graustufen, Kontrastverstärkung, Rauschentfernung) kann die Genauigkeit bei Bildern mit sehr geringer Qualität verbessert werden. Siehe dieAnleitung zur Bildvorverarbeitungfür Techniken.

Nächste Schritte

Automatisieren Sie die Suche nach öffentlichen Aufzeichnungen –Holen Sie sich Ihren CaptchaAI-API-Schlüsselund verwalten Sie CAPTCHAs von Regierungsportalen.


Verwandte Leitfäden

  • Rechtliche Recherche mit CAPTCHA-Verwaltung
  • Akademisches Forschungs-Scraping
  • Scraping geschützter Websites

Diskussionen (0)

Noch keine Kommentare.