Kullanım Senaryoları

CAPTCHA Çözme ile Devlet Portalı Otomasyonu

Devlet web siteleri formları, randevu rezervasyon sistemlerini ve kamu kayıt portallarını korumak için CAPTCHA'ları kullanır. Kalite güvence ekipleri, sivil teknoloji geliştiricileri ve hukuk profesyonelleri, bu iş akışlarını verimli bir şekilde test etmek ve çalıştırmak için otomatik erişime ihtiyaç duyar.


Kategoriye Göre Devlet CAPTCHA'ları

Portal Kategorisi Ortak CAPTCHA Örnek Siteler Kullanım Örneği
Vize / göçmenlik BLS, reCAPTCHA v2 BLS portalları, USCIS Randevu rezervasyonu
DMV / motorlu taşıtlar reCAPTCHA v2, resim Eyalet DMV siteleri Kayıt yenileme
Mahkeme kayıtları reCAPTCHA v2 PACER, eyalet mahkemeleri Vaka arama
İzinler / lisanslar Resim CAPTCHA'sı Şehir izin portalları Başvuru dosyalama
Vergi portalları reCAPTCHA v2 IRS, eyalet vergi siteleri Dosyalama durumu kontrolleri
Kamu kayıtları Resim CAPTCHA, reCAPTCHA İlçe kayıtları Özellik/deed araması

BLS Vize Randevu Otomasyonu

BLS portalları kendi CAPTCHA sistemlerini kullanır. CaptchaAI, BLS CAPTCHA'leri %100 doğrulukla destekler:

import requests
import time
import base64

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


def solve_bls_captcha(captcha_image_url, session):
    """Solve BLS-specific CAPTCHA."""
    # Download CAPTCHA image
    img_resp = session.get(captcha_image_url)
    img_b64 = base64.b64encode(img_resp.content).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(30):
        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("BLS CAPTCHA timeout")


class BLSAppointmentBooker:
    def __init__(self):
        self.session = requests.Session()
        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 login(self, portal_url, email, password):
        """Login to BLS portal with CAPTCHA."""
        resp = self.session.get(portal_url)

        # Extract CAPTCHA image URL from page
        import re
        match = re.search(r'src="(/captcha[^"]+)"', resp.text)
        if match:
            captcha_url = portal_url.rstrip("/") + match.group(1)
            captcha_text = solve_bls_captcha(captcha_url, self.session)
        else:
            captcha_text = ""

        login_resp = self.session.post(portal_url, data={
            "email": email,
            "password": password,
            "captcha": captcha_text,
        })
        return login_resp.status_code == 200

    def check_appointment_slots(self, slots_url):
        """Check available appointment slots."""
        resp = self.session.get(slots_url)
        if resp.status_code == 200:
            return resp.json().get("available_slots", [])
        return []

    def book_slot(self, booking_url, slot_id, applicant_data):
        """Book an appointment slot, handling any CAPTCHA."""
        resp = self.session.get(booking_url)

        # Check for CAPTCHA on booking page
        import re
        match = re.search(r'src="(/captcha[^"]+)"', resp.text)
        if match:
            captcha_url = booking_url.rstrip("/") + match.group(1)
            captcha_text = solve_bls_captcha(captcha_url, self.session)
        else:
            captcha_text = ""

        resp = self.session.post(booking_url, data={
            "slot_id": slot_id,
            "captcha": captcha_text,
            **applicant_data,
        })

        return {
            "success": resp.status_code == 200,
            "confirmation": resp.json().get("confirmation_number"),
        }

Mahkeme Kayıtları Arama

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")


class CourtRecordSearcher:
    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 search_cases(self, court_url, search_params, sitekey):
        """Search court records with reCAPTCHA handling."""
        # Load search page
        self.session.get(court_url)

        # Solve CAPTCHA
        token = solve_recaptcha(sitekey, court_url)

        # Submit search with token
        resp = self.session.post(court_url, data={
            **search_params,
            "g-recaptcha-response": token,
        })

        if resp.status_code == 200:
            return self._parse_results(resp.text)
        return []

    def _parse_results(self, html):
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html, "html.parser")
        cases = []
        for row in soup.select("table.results tr")[1:]:
            cols = row.select("td")
            if len(cols) >= 4:
                cases.append({
                    "case_number": cols[0].get_text(strip=True),
                    "parties": cols[1].get_text(strip=True),
                    "date": cols[2].get_text(strip=True),
                    "status": cols[3].get_text(strip=True),
                })
        return cases

İzin Portallarındaki Resim CAPTCHA

Birçok şehir ve ilçe portalı basit resim CAPTCHA'larını kullanır:

def solve_image_captcha(image_url, session):
    """Solve image-based CAPTCHA common on local government sites."""
    img = session.get(image_url)
    img_b64 = base64.b64encode(img.content).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("Image CAPTCHA timeout")

Kamu Kayıtlarına Toplu Arama

import csv


def batch_property_lookup(addresses, portal_url, sitekey, output_file):
    """Look up multiple property records, solving CAPTCHA per batch."""
    session = requests.Session()
    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",
    })

    results = []
    for i, address in enumerate(addresses):
        try:
            # Solve CAPTCHA every 5th request (or when required)
            if i % 5 == 0:
                token = solve_recaptcha(sitekey, portal_url)

            resp = session.post(portal_url, data={
                "address": address,
                "g-recaptcha-response": token,
            })

            if resp.status_code == 200:
                results.append({
                    "address": address,
                    "data": resp.json(),
                })

            time.sleep(3)  # Be respectful

        except Exception as e:
            results.append({"address": address, "error": str(e)})

    # Save results
    with open(output_file, "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["address", "data", "error"])
        writer.writeheader()
        writer.writerows(results)

    return results

Oturum Yönetimi İpuçları

Devlet portallarında genellikle kısa oturum zaman aşımları olur:

Portal Türü Oturum Zaman Aşımı Tavsiye
Vize portalları 5-10 dakika Akışı hızla tamamlayın
DMV siteleri 15 dakika Oturum çerezini yarıda yenileyin
Mahkeme kayıtları 20-30 dakika Gruplarda toplu aramalar
Vergi portalları 10-15 dakika Kalıcı QA oturumu kullan, aynı IP
Uygulamalara izin ver 30 dakika Her adımda ilerlemeyi kaydedin

Sorun giderme

Sorun Sebep Düzeltme
CAPTCHA resmi yüklenmiyor Oturum çerezinin süresi doldu Yeni oturum başlat
Form sırasında "Oturumun süresi doldu" Çözülmesi çok uzun sürdü Ön QA testi yapın veya daha hızlı çözüm kullanın
Yanlış CAPTCHA yanıtı Bozuk görüntü Kötü görüntüyü API aracılığıyla bildirin
Portal otomasyonu engeller IP/UA tespiti Kendi sunucu altyapınız'sini + gerçek UA'yı kullanın
CAPTCHA'dan sonra form doğrulama hatası Sunucu tarafı belirtecinin süresi doldu CAPTCHA'yı göndermeden hemen önce çözün

SSS

Devlet portallarının otomatikleştirilmesi yasal mı?

Kendi formlarınızı ve veri aramanızı otomatikleştirmeye genellikle izin verilir. Sivil teknoloji uygulamalarına yönelik QA testleri yaygın bir meşru kullanımdır. Her zaman belirli portalın hizmet şartlarını kontrol edin.

Devlet sitelerinde en yaygın olan CAPTCHA türü hangisidir?

Resim CAPTCHA'ları ve reCAPTCHA v2. Devlet siteleri genellikle CAPTCHA teknolojisinde geride kalıyor ve bu da bunların çözülmesini kolaylaştırıyor.

CaptchaAI, BLS CAPTCHA'leri çözebilir mi?

Evet - CaptchaAI, doğrudan çözümleme için method=bls parametresini veya görüntü tabanlı çözümleme için method=base64'yi kullanarak %100 doğruluk oranıyla BLS CAPTCHA'leri destekler.

Çok adımlı hükümet formlarını nasıl ele alacağım?

Form boyunca aynı IP'yi korumak için kalıcı QA oturumu oturumlarını kullanın. Devlet portalları genellikle form sayfaları arasındaki IP tutarlılığını doğrular.


İlgili Kılavuzlar



Sonraki adımlar

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