Las plataformas de comparación de seguros y las páginas de cotizaciones de operadores protegen sus motores de tarifas con CAPTCHA para evitar la recopilación automatizada de cotizaciones. CaptchaAI maneja estos desafíos para los equipos de control de calidad que prueban flujos de trabajo de seguros y agregadores de comparación.
CAPTCHA en sitios de seguros
| Tipo de transportista | CAPTCHA | Punto de activación | Complejidad de cotización |
|---|---|---|---|
| Seguro de automóvil | reCAPTCHA v2 | Envío del formulario de cotización | Multipaso (vehículo + conductor) |
| Seguro médico | reCAPTCHA v2 | Comparación de planes | Varios pasos (demografía) |
| Seguro de hogar | CAPTCHA de imagen | búsqueda de direcciones | moderado |
| Seguro de vida | reCAPTCHA v2 | Calculadora de tarifas | forma sencilla |
| Seguro de viaje | reCAPTCHA v2 Invisible | Solicitud de cotización | forma sencilla |
| Seguro comercial | reCAPTCHA v3 | Formulario de contacto/quote | forma larga |
Recopilador de cotizaciones de múltiples operadores
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']}")
Comparación de planes de seguro médico
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 []
Requisitos de sesión
La cotización de seguros siempre consta de varios pasos; las sesiones fijas son obligatorias:
| paso | Datos enviados | Requisito de propiedad intelectual |
|---|---|---|
| 1. Información personal | Nombre, fecha de nacimiento, código postal | Misma IP |
| 2. Vehículo/property | Año, marca, modelo. | Misma IP |
| 3. Selección de cobertura | Límites, deducible | Misma IP |
| 4. Resolución de CAPTCHA | ficha | Misma IP |
| 5. Visualización de cotizaciones | N/A | Misma IP |
Utilice sesiones de proxy fijas con TTL de 10 a 15 minutos para flujos de seguros.
Solución de problemas
| Problema | causa | Solución |
|---|---|---|
| El formulario de cotización se restablece a mitad del flujo | IP cambiada entre pasos | Usar sesión de proxy fijo |
| "No se puede proporcionar cotización" | La validación de datos falló | Verifique los campos obligatorios |
| CAPTCHA aparece dos veces | El primer token expiró | Resolver de nuevo inmediatamente |
| Tarifas diferentes a las manuales | Cookie/session diferencias | Iniciar sesión limpia |
| El limitador de velocidad bloquea solicitudes | Demasiadas citas de IP | Reduzca la velocidad y rote la IP entre operadores |
Preguntas frecuentes
¿Cuántas cotizaciones puedo cobrar por día?
Normalmente entre 20 y 50 por transportista por día con los retrasos adecuados. Superar esto activa los limitadores de velocidad y los CAPTCHA de manera más agresiva.
¿Por qué necesito sesiones adhesivas para el seguro?
Los flujos de trabajo de cotizaciones de seguros constan de varios pasos. El servidor vincula cada paso a su sesión e IP. Cambiar la IP en mitad del flujo invalida la sesión.
¿Puedo automatizar múltiples sectores de seguros?
Sí. El mismo enfoque de manejo de CAPTCHA funciona para seguros de automóvil, salud, hogar y vida; solo difieren los campos del formulario.
Guías relacionadas
- Sesiones fijas vs rotativas
- Persistencia de la sesión del navegador
- Métodos de autenticación de proxy
Compare cotizaciones de seguros a escala:obtenga su clave CaptchaAIy automatizar el proceso de cotización.