Trường Hợp Sử Dụng

Tự động so sánh báo giá bảo hiểm với xử lý CAPTCHA

Nền tảng so sánh bảo hiểm và trang báo giá của nhà cung cấp dịch vụ bảo vệ công cụ tính giá của họ bằng CAPTCHA để ngăn chặn việc thu thập báo giá tự động. CaptchaAI giải quyết những thách thức này cho các nhóm QA đang thử nghiệm quy trình làm việc bảo hiểm và các công cụ tổng hợp so sánh.


CAPTCHA trên các trang web bảo hiểm

Loại nhà cung cấp dịch vụ CAPTCHA Điểm kích hoạt Trích dẫn phức tạp
Bảo hiểm ô tô reCAPTCHA v2 Gửi mẫu báo giá Nhiều bước (xe + tài xế)
Bảo hiểm y tế reCAPTCHA v2 So sánh kế hoạch Nhiều bước (nhân khẩu học)
Bảo hiểm nhà CAPTCHA hình ảnh Tra cứu địa chỉ Trung bình
Bảo hiểm nhân thọ reCAPTCHA v2 Máy tính tỷ lệ Hình thức đơn giản
Bảo hiểm du lịch reCAPTCHA v2 Vô hình Yêu cầu báo giá Hình thức đơn giản
Bảo hiểm kinh doanh reCAPTCHA v3 Liên hệ với mẫu/quote dạng dài

Bộ sưu tập báo giá đa nhà cung cấp dịch vụ

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

So sánh chương trình bảo hiểm y tế

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

Yêu cầu phiên

Báo giá bảo hiểm luôn gồm nhiều bước - các phiên cố định là bắt buộc:

Bước Dữ liệu đã gửi Yêu cầu IP
1. Thông tin cá nhân Tên, ngày sinh, mã zip Cùng IP
2. Xe/property Năm, nhãn hiệu, mẫu mã Cùng IP
3. Lựa chọn phạm vi bảo hiểm Giới hạn, được khấu trừ Cùng IP
4. Giải CAPTCHA Mã thông báo Cùng IP
5. Hiển thị báo giá N/A Cùng IP

Sử dụng các phiên phiên cố định nội bộ với TTL 10-15 phút cho các luồng bảo hiểm.


Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Biểu mẫu báo giá đặt lại giữa dòng IP đã thay đổi giữa các bước Sử dụng phiên phiên cố định nội bộ
"Không thể cung cấp báo giá" Xác thực dữ liệu không thành công Kiểm tra các trường bắt buộc
CAPTCHA xuất hiện hai lần Mã thông báo đầu tiên đã hết hạn Giải quyết lại ngay
Tỷ lệ khác với thủ công Sự khác biệt của Cookie/session Bắt đầu phiên sạch
Yêu cầu chặn giới hạn tốc độ Quá nhiều trích dẫn từ IP Chậm lại, luân chuyển IP giữa các nhà mạng

Câu hỏi thường gặp

Tôi có thể thu thập bao nhiêu báo giá mỗi ngày?

Thông thường là 20-50 mỗi nhà cung cấp dịch vụ mỗi ngày với độ trễ thích hợp. Vượt quá giới hạn này sẽ kích hoạt giới hạn tốc độ và CAPTCHA mạnh mẽ hơn.

Tại sao tôi cần các phiên cố định cho bảo hiểm?

Quy trình báo giá bảo hiểm gồm nhiều bước. Máy chủ liên kết từng bước với phiên và IP của bạn. Thay đổi IP giữa luồng sẽ làm mất hiệu lực phiên.

Tôi có thể tự động hóa trên nhiều ngành bảo hiểm không?

Vâng. Cách tiếp cận xử lý CAPTCHA tương tự cũng áp dụng cho bảo hiểm ô tô, sức khỏe, nhà ở và nhân thọ - chỉ có các trường biểu mẫu là khác nhau.


Hướng dẫn liên quan


So sánh báo giá bảo hiểm trên quy mô lớn —lấy khóa CaptchaAI của bạnvà tự động hóa quá trình trích dẫn.

Os comentários estão desativados para este artigo.