Tek bir sigorta teklifi karşılaştırması genellikle beş ila on farklı taşıyıcının formuna dokunur; her form çok adımlıdır ve neredeyse hepsi son adımda bir CAPTCHA çıkarır. Bu zincirde tek bir çözüm bile başarısız olursa karşılaştırma yarım kalır ve tablo eksik fiyatla döner. Bu rehber, CaptchaAI ile o kırılgan zinciri tekrarlanabilir bir QA iş akışına çevirmenin yolunu gösterir: reCAPTCHA v2/v3 ve image CAPTCHA'larını API üzerinden çözer, kalıcı oturumu korur ve sonuçları tek bir karşılaştırma çıktısında toplar.
Anlatım, kendi karşılaştırma toplayıcısını ya da anlaşmalı taşıyıcı entegrasyonlarını test eden QA ekipleri içindir. reCAPTCHA'nın altı çeşidinin tamamı, image/OCR CAPTCHA'ları ve GeeTest v3 CaptchaAI'nin desteklediği türler arasında yer alır; buna karşılık hCaptcha ve FunCaptcha desteklenmez, dolayısıyla bir teklif sayfasında bu türlerden biriyle karşılaşırsanız akışı CaptchaAI ile otomatikleştiremezsiniz.
Sigorta teklif formlarında karşınıza çıkan CAPTCHA türleri
Sigorta siteleri ücret motorlarını otomatik teklif toplamaya karşı korur ve koruma çoğunlukla formun son adımında, fiyat hesaplanmadan hemen önce devreye girer. Aşağıdaki tablo, taşıyıcı türüne göre en sık rastlanan doğrulama biçimini ve akışın nerede karmaşıklaştığını özetler.
| 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ı | Image CAPTCHA (OCR) | Adres arama | Orta |
| Hayat sigortası | reCAPTCHA v2 | Oran hesaplayıcı | Basit form |
| Seyahat sigortası | görünmez reCAPTCHA | Teklif talebi | Basit form |
| İşletme sigortası | reCAPTCHA v3 | İletişim/teklif formu | Uzun form |
reCAPTCHA v3'ün skor tabanlı olması, teklif akışında ayrı bir onay kutusu görmeseniz bile arka planda bir doğrulama çalıştığı anlamına gelir; token yine aynı yöntemle alınır, tek fark tetiğin görünmez olmasıdır.
Çok taşıyıcılı sigorta teklifi toplayıcısı
Toplayıcının işi sade: her taşıyıcı için aynı araç ve sürücü verisini gönderir, teklif sayfasındaki CAPTCHA'yı çözer, dönen fiyatı ayrıştırır ve en düşük aylık primi bulur. Aşağıdaki sınıf, tek bir taşıyıcıdan otomobil teklifi alan get_auto_quote metodu ile birden çok taşıyıcıyı sırayla dolaşan compare_carriers metodunu bir araya getirir.
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']}")
İki yardımcı fonksiyon işin çekirdeğini oluşturur: solve_recaptcha görev kimliğini alıp token hazır olana kadar sonucu sorgular (en fazla 60 kez, 5 saniye arayla); solve_image_captcha ise base64 kodlanmış görseli gönderip aynı biçimde sonucu bekler. Taşıyıcılar arasındaki time.sleep(5) beklemesi süs değildir — istek sınırlarını erkenden tetiklememek için bilinçli konur.
Sağlık sigortası pazaryerlerinde plan karşılaştırma
Sağlık planları biraz farklı akar: önce demografik bilgi gönderilir, ardından plan sonuçlarını görebilmek için tek bir CAPTCHA çözülür. compare_health_plans fonksiyonu aynı toplayıcı altyapısını yeniden kullanır; değişen yalnızca gönderilen alanlar ve ayrıştırılan kartlardır.
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 []
Dönen her plan kartından ad, prim ve muafiyet (deductible) alınır. Aynı desen ev ve hayat sigortası akışları için de geçerlidir; değişen tek şey form alanları ile CSS seçicileridir. Yani bir kez sağlam kurduğunuz toplayıcıyı, sektör başına yalnızca alanları uyarlayarak yeniden kullanabilirsiniz.
Neden kalıcı oturum şart?
Sigorta teklifi verme her zaman çok adımlıdır ve sunucu her adımı aynı oturuma ve aynı IP'ye bağlar. Tipik bir akış şu sırayla ilerler ve her adım aynı IP'yi korumak zorundadır:
- Kişisel bilgiler — ad, doğum tarihi ve posta kodu gönderilir.
- Araç ya da mülk bilgisi — yıl, marka, model gibi alanlar eklenir.
- Kapsam seçimi — limitler ve muafiyet belirlenir.
- CAPTCHA çözümü — token alınır ve forma enjekte edilir.
- Teklif ekranı — hesaplanan fiyat geri döner.
Arada IP değişirse sunucu oturumu geçersiz sayar ve akış baştan başlar. Bu yüzden sigorta akışlarında 10–15 dakikalık TTL ile kalıcı bir QA oturumu kullanın; tüm adımlar tek bir IP üzerinden ilerlemelidir.
Kalıcılık burada CAPTCHA'nın kendisi kadar kritiktir: token doğru olsa bile IP değişmişse sunucu teklifi reddeder.
Oturum stratejisi seçenekleri için sabit ve dönüşümlü oturumlar rehberine, tarayıcı tarafındaki kalıcılık için tarayıcı oturumu kalıcılığı yazısına ve kimlik doğrulama ayrıntıları için proxy kimlik doğrulama yöntemlerine göz atın.
Yaygın sorunlar ve çözümleri
Teklif akışlarında en sık takılınan noktalar ve pratik çözümleri:
- Teklif formu akışın ortasında sıfırlanıyor. Genellikle adımlar arasında IP değişmiştir; kalıcı bir QA oturumu kullanın.
- "Teklif sağlanamıyor" mesajı. Veri doğrulaması başarısız olmuştur; zorunlu alanların dolu ve biçimli olduğunu kontrol edin.
- CAPTCHA iki kez görünüyor. İlk token'ın süresi dolmuştur; çözümü hemen yeniden alın ve gecikmeden gönderin.
- Manuel akıştan farklı oranlar. Çerez ya da oturum farkları vardır; temiz bir oturumla baştan başlayın.
- İstek sınırlayıcı istekleri engelliyor. Aynı IP'den çok fazla teklif gelmiştir; yavaşlayın ve istekleri taşıyıcılar arasında farklı QA oturumlarına yayın.
Türkiye pazarında sigorta teklifi otomasyonu
Türkiye'de sigorta karşılaştırma siteleri ve acente panelleri hızla dijitalleşiyor; bir QA ekibi kendi karşılaştırma toplayıcısını ya da anlaşmalı taşıyıcı entegrasyonlarını düzenli olarak sınamak zorunda. Burada iki nokta öne çıkar.
Birincisi KVKK. Sigorta teklif akışları ad, doğum tarihi ve adres gibi kişisel veriler içerir; bu verileri yalnızca yetkili olduğunuz, size ya da müşterinize ait teklif akışlarında ve KVKK'ya uygun bir QA sürecinde işleyin. Otomasyonu üçüncü tarafların verisini izinsiz toplamak için değil, kendi akışlarınızın doğruluğunu test etmek için kurun.
İkincisi maliyet öngörülebilirliği. CaptchaAI thread tabanlı ve aylık sabit USD fiyatlarla faturalandırır; çözüm başına ücret yoktur ve her thread ay boyunca sınırsız çözüm yapar. TL'nin oynaklığı düşünüldüğünde BASIC ($15/ay, 5 thread) gibi bir planın aylık maliyeti baştan bellidir. Teklif hacminiz büyüdükçe daha yüksek thread'li planlara — örneğin STANDARD ($30/ay, 15 thread) — geçerek eşzamanlı çözüm kapasitenizi artırabilirsiniz.
Sık sorulan sorular
Sigorta teklif formlarında hangi CAPTCHA türleri çıkar ve CaptchaAI hepsini çözer mi?
En sık reCAPTCHA v2, görünmez reCAPTCHA, reCAPTCHA v3 ve image/OCR CAPTCHA'sı görürsünüz — bunların tamamını CaptchaAI çözer. Bir formda hCaptcha veya FunCaptcha çıkarsa CaptchaAI bu türleri desteklemediği için o akışı otomatikleştiremezsiniz.
reCAPTCHA v3, teklif akışını nasıl değiştirir?
v3 görünür bir onay kutusu göstermez; arka planda bir skor üretir. Token yine userrecaptcha yöntemiyle alınır ve g-recaptcha-response alanında gönderilir, yani entegrasyon mantığınız v2'dekiyle aynı kalır.
Teklif toplama iş yükü için hangi CaptchaAI planı yeterli?
Eşzamanlı çözüm sayısına, yani kaç taşıyıcıyı paralel işlediğinize bağlıdır. Birkaç taşıyıcıyı sırayla dolaşan bir toplayıcı için BASIC ($15/ay, 5 thread) çoğu zaman yeter; onlarca akışı paralel çalıştıran ekipler için STANDARD ($30/ay, 15 thread) veya üzeri daha rahattır.
Sigorta verisi toplarken KVKK açısından nelere dikkat etmeliyim?
Teklif formları kişisel veri içerir; bu nedenle otomasyonu yalnızca yetkili olduğunuz kendi ya da müşterinize ait akışlarda çalıştırın, topladığınız veriyi amaçla sınırlı tutun ve KVKK uyumlu bir saklama/silme politikası uygulayın.
İlgili kılavuzlar
- Sabit ve dönüşümlü oturumlar
- Tarayıcı oturumu kalıcılığı
- Proxy kimlik doğrulama yöntemleri
Sigorta tekliflerini geniş ölçekte karşılaştırın — CaptchaAI anahtarınızı alın ve teklif toplamayı kırılgan bir zincir olmaktan çıkarın.