Kullanım Senaryoları

CAPTCHA İşleme ile Sigorta Teklifi Karşılaştırma Otomasyonu

Sigorta karşılaştırma platformları ve taşıyıcı fiyat teklifi sayfaları, otomatik fiyat teklifi toplamayı önlemek için ücret motorlarını CAPTCHA'larla korur. CaptchaAI, sigorta iş akışlarını ve karşılaştırma toplayıcılarını test eden QA ekipleri için bu zorlukların üstesinden gelir.


Sigorta Sitelerinde CAPTCHA

Taşıyıcı Türü CAPTCHA Tetik Noktası Teklif Karmaşıklığı
Araba sigortası reCAPTCHA v2 Teklif formu gönderimi Çok adımlı (araç + sürücü)
Sağlık sigortası reCAPTCHA v2 Plan karşılaştırması Çok adımlı (demografik)
Ev sigortası Resim CAPTCHA'sı Adres arama Orta
Hayat sigortası reCAPTCHA v2 Oran hesaplayıcı Basit biçim
Seyahat sigortası reCAPTCHA v2 Görünmez Teklif talebi Basit biçim
İşletme sigortası reCAPTCHA v3 İletişim/quote formu Uzun biçim

Çoklu Taşıyıcılı Teklif Toplayıcı

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']}")

Sağlık Sigortası Planı Karşılaştırması

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 []

Oturum Gereksinimleri

Sigorta teklifi verme her zaman çok adımlıdır; kalıcı oturumlar zorunludur:

Adım Veriler Gönderildi IP Gereksinimi
1. Kişisel bilgiler Ad, DOB, zip Aynı IP
2. Araç/property Yıl, marka, model Aynı IP
3. Kapsam seçimi Limitler, düşülebilir Aynı IP
4. CAPTCHA çözümü Jeton Aynı IP
5. Teklif ekranı N/A Aynı IP

Sigorta akışları için 10-15 dakikalık TTL ile kalıcı QA oturumu oturumları kullanın.


Sorun giderme

Sorun Sebep Düzeltme
Teklif formu akışın ortasında sıfırlanıyor Adımlar arasında IP değişti Kalıcı QA oturumu oturumu kullan
"Teklif sağlanamıyor" Veri doğrulama başarısız oldu Gerekli alanları kontrol edin
CAPTCHA iki kez görünüyor İlk jetonun süresi doldu Hemen tekrar çözün
Manuelden farklı oranlar Çerez/session farkları Temiz oturum başlat
Hız sınırlayıcı istekleri engeller IP'den çok fazla alıntı var Yavaşlayın, operatörler arasında IP'yi döndürün

SSS

Günde kaç teklif toplayabilirim?

Genellikle uygun gecikmelerle taşıyıcı başına günde 20-50. Bunun aşılması hız sınırlayıcıları ve CAPTCHA'ları daha agresif bir şekilde tetikler.

Sigorta için neden kalıcı oturumlara ihtiyacım var?

Sigorta teklifi iş akışları çok adımlıdır. Sunucu her adımı oturumunuza ve IP'nize bağlar. IP akışının ortasında değişiklik yapılması oturumu geçersiz kılar.

Birden fazla sigorta sektöründe otomatikleştirme yapabilir miyim?

Evet. Aynı CAPTCHA işleme yaklaşımı otomobil, sağlık, ev ve hayat sigortaları için de geçerlidir; yalnızca form alanları farklılık gösterir.


İlgili Kılavuzlar


Sigorta tekliflerini geniş ölçekte karşılaştırın —CaptchaAI anahtarınızı alınve teklif verme sürecini otomatikleştirin.

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