Anwendungsfälle

Automatisierung des Vergleichs von Versicherungsangeboten mit CAPTCHA-Verwaltung

Versicherungsvergleichsplattformen und Anbieter-Angebotsseiten schützen ihre Tarif-Engines mit CAPTCHAs, um eine automatisierte Angebotserfassung zu verhindern. CaptchaAI bewältigt diese Herausforderungen für QA-Teams, die Versicherungs-Workflows und Vergleichsaggregatoren testen.


CAPTCHA auf Versicherungsseiten

Trägertyp CAPTCHA Triggerpunkt Zitatkomplexität
Autoversicherung reCAPTCHA v2 Einreichung des Angebotsformulars Mehrstufig (Fahrzeug + Fahrer)
Krankenversicherung reCAPTCHA v2 Planvergleich Mehrstufig (Demografie)
Hausratversicherung Bild-CAPTCHA Adresssuche Mäßig
Lebensversicherung reCAPTCHA v2 Tarifrechner Einfache Form
Reiseversicherung reCAPTCHA v2 Unsichtbar Angebotsanfrage Einfache Form
Unternehmensversicherung reCAPTCHA v3 Kontaktieren Sie das Formular /quote Lange Form

Multi-Carrier-Angebotssammler

import requests
import time
import re
import base64

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def solve_recaptcha(sitekey, pageurl):
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY, "method": "userrecaptcha",
        "googlekey": sitekey, "pageurl": pageurl, "json": 1,
    })
    task_id = resp.json()["request"]
    for _ in range(60):
        time.sleep(5)
        result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = result.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]
    raise TimeoutError("Timeout")


def solve_image_captcha(image_bytes):
    img_b64 = base64.b64encode(image_bytes).decode()
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY, "method": "base64",
        "body": img_b64, "json": 1,
    })
    task_id = resp.json()["request"]
    for _ in range(20):
        time.sleep(3)
        result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = result.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]
    raise TimeoutError("Timeout")


class InsuranceQuoteCollector:
    def __init__(self, proxy=None):
        self.session = requests.Session()
        if proxy:
            self.session.proxies = {"http": proxy, "https": proxy}
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
        })

    def get_auto_quote(self, carrier_url, vehicle_data, driver_data, sitekey):
        """Get auto insurance quote from a single carrier."""
        # Step 1: Load quote page
        self.session.get(carrier_url)

        # Step 2: Submit vehicle info
        resp = self.session.post(f"{carrier_url}/vehicle", data=vehicle_data)

        # Step 3: Submit driver info
        resp = self.session.post(f"{carrier_url}/driver", data=driver_data)

        # Step 4: Solve CAPTCHA on quote page
        token = solve_recaptcha(sitekey, f"{carrier_url}/quote")

        # Step 5: Get quote
        resp = self.session.post(f"{carrier_url}/quote", data={
            "g-recaptcha-response": token,
        })

        if resp.status_code == 200:
            return self._parse_quote(resp.text)
        return None

    def compare_carriers(self, carriers, vehicle_data, driver_data):
        """Compare quotes across multiple carriers."""
        quotes = []

        for carrier in carriers:
            try:
                quote = self.get_auto_quote(
                    carrier_url=carrier["url"],
                    vehicle_data=vehicle_data,
                    driver_data=driver_data,
                    sitekey=carrier["sitekey"],
                )
                quotes.append({
                    "carrier": carrier["name"],
                    "status": "success",
                    "quote": quote,
                })
            except Exception as e:
                quotes.append({
                    "carrier": carrier["name"],
                    "status": "failed",
                    "error": str(e),
                })
            time.sleep(5)  # Delay between carriers

        # Sort by price
        successful = [q for q in quotes if q["status"] == "success" and q["quote"]]
        successful.sort(key=lambda x: x["quote"].get("monthly_premium", float("inf")))

        return {
            "quotes": quotes,
            "best_rate": successful[0] if successful else None,
            "total_compared": len(carriers),
            "successful": len(successful),
        }

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

        premium_el = soup.select_one(".premium, .monthly-rate, .quote-amount")
        coverage_el = soup.select_one(".coverage-summary, .plan-details")

        return {
            "monthly_premium": premium_el.get_text(strip=True) if premium_el else "",
            "coverage": coverage_el.get_text(strip=True) if coverage_el else "",
        }


# Usage
collector = InsuranceQuoteCollector(
    proxy="http://user-session-abc:pass@residential.proxy.com:5000"
)

vehicle = {
    "year": "2022",
    "make": "Toyota",
    "model": "Camry",
    "vin": "",
    "mileage": "15000",
}

driver = {
    "age": "35",
    "gender": "M",
    "zip": "90210",
    "driving_record": "clean",
}

carriers = [
    {"name": "Carrier A", "url": "https://carrier-a.example.com/auto", "sitekey": "6Lc_xxx1"},
    {"name": "Carrier B", "url": "https://carrier-b.example.com/auto", "sitekey": "6Lc_xxx2"},
    {"name": "Carrier C", "url": "https://carrier-c.example.com/auto", "sitekey": "6Lc_xxx3"},
]

comparison = collector.compare_carriers(carriers, vehicle, driver)
print(f"Best rate: {comparison['best_rate']}")

Vergleich der Krankenversicherungen

def compare_health_plans(marketplace_url, demographics, sitekey):
    """Compare health insurance plans on marketplace sites."""
    collector = InsuranceQuoteCollector(
        proxy="http://user-session-xyz:pass@residential.proxy.com:5000"
    )

    # Load marketplace
    collector.session.get(marketplace_url)

    # Submit demographics
    collector.session.post(f"{marketplace_url}/demographics", data=demographics)

    # Solve CAPTCHA for plan results
    token = solve_recaptcha(sitekey, f"{marketplace_url}/plans")

    resp = collector.session.post(f"{marketplace_url}/plans", data={
        "g-recaptcha-response": token,
    })

    if resp.status_code == 200:
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(resp.text, "html.parser")
        plans = []
        for card in soup.select(".plan-card, .insurance-plan"):
            plans.append({
                "name": card.select_one(".plan-name").get_text(strip=True) if card.select_one(".plan-name") else "",
                "premium": card.select_one(".premium").get_text(strip=True) if card.select_one(".premium") else "",
                "deductible": card.select_one(".deductible").get_text(strip=True) if card.select_one(".deductible") else "",
            })
        return plans

    return []

Sitzungsanforderungen

Die Erstellung von Versicherungsangeboten erfolgt immer in mehreren Schritten – Sticky Sessions sind obligatorisch:

Schritt Daten übermittelt IP-Anforderung
1. Persönliche Daten Name, Geburtsdatum, Postleitzahl Gleiche IP
2. Fahrzeug/property Jahr, Marke, Modell Gleiche IP
3. Auswahl des Versicherungsschutzes Grenzen, Selbstbehalt Gleiche IP
4. CAPTCHA lösen Token Gleiche IP
5. Angebotsanzeige N/A Gleiche IP

Verwenden Sie Sitzungsproxy-Sitzungen mit einer TTL von 10–15 Minuten für Versicherungsflüsse.


Fehlerbehebung

Problem Ursache Lösung
Das Angebotsformular wird mitten im Fluss zurückgesetzt IP hat sich zwischen den Schritten geändert Verwenden Sie eine Sitzungsproxy-Sitzung
„Angebot kann nicht abgegeben werden“ Die Datenvalidierung ist fehlgeschlagen Überprüfen Sie die erforderlichen Felder
CAPTCHA erscheint zweimal Das erste Token ist abgelaufen Sofort noch einmal lösen
Andere Tarife als manuell Cookie/session Unterschiede Starten Sie eine saubere Sitzung
Der Ratenbegrenzer blockiert Anfragen Zu viele Zitate von IP Machen Sie es langsamer und rotieren Sie die IP zwischen den Anbietern

FAQ

Wie viele Angebote kann ich pro Tag einholen?

Normalerweise 20–50 pro Spediteur und Tag mit entsprechenden Verzögerungen. Bei Überschreitung werden Ratenbegrenzer und CAPTCHAs aggressiver ausgelöst.

Warum brauche ich Sticky Sessions für die Versicherung?

Arbeitsabläufe für Versicherungsangebote bestehen aus mehreren Schritten. Der Server verknüpft jeden Schritt mit Ihrer Sitzung und IP. Durch eine Änderung der IP-Adresse während des Datenflusses wird die Sitzung ungültig.

Kann ich über mehrere Versicherungsvertikale hinweg automatisieren?

Ja. Der gleiche CAPTCHA-Verarbeitungsansatz funktioniert für Auto-, Kranken-, Hausrat- und Lebensversicherungen – nur die Formularfelder unterscheiden sich.


Verwandte Leitfäden


Vergleichen Sie Versicherungsangebote in großem Maßstab –Holen Sie sich Ihren CaptchaAI-Schlüsselund automatisieren Sie den Angebotsprozess.

Kommentare sind für diesen Artikel deaktiviert.