حالات الاستخدام

أتمتة البوابة الحكومية مع حل اختبار CAPTCHA

تستخدم المواقع الحكومية اختبارات CAPTCHA لحماية النماذج وأنظمة حجز المواعيد وبوابات السجلات العامة. تحتاج فرق ضمان الجودة ومطورو التكنولوجيا المدنية والمهنيون القانونيون إلى الوصول الآلي لاختبار سير العمل وتشغيله بكفاءة.


اختبارات CAPTCHA الحكومية حسب الفئة

فئة البوابة اختبار CAPTCHA الشائع مواقع المثال حالة الاستخدام
التأشيرة / الهجرة بلس، reCAPTCHA v2 بوابات BLS، USCIS حجز موعد
DMV / المركبات الآلية reCAPTCHA v2، الصورة مواقع DMV الحكومية تجديد التسجيل
سجلات المحكمة reCAPTCHA v2 PACER، محاكم الدولة بحث القضية
التصاريح / التراخيص صورة التحقق بوابات تصريح المدينة تقديم الطلب
بوابات الضرائب reCAPTCHA v2 IRS، مواقع الضرائب الحكومية إيداع الشيكات الحالة
السجلات العامة صورة CAPTCHA، reCAPTCHA سجلات المقاطعة بحث Property/deed

أتمتة موعد تأشيرة BLS

تستخدم بوابات BLS نظام CAPTCHA الخاص بها. CaptchaAI يدعم BLS CAPTCHAs بدقة عالٍ:

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

بحث سجلات المحكمة

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

صورة CAPTCHA على بوابات التصريح

تستخدم العديد من بوابات المدن والمقاطعات اختبارات CAPTCHA للصور البسيطة:

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

بحث دفعة السجلات العامة

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

نصائح لإدارة الجلسة

غالبًا ما تحتوي البوابات الحكومية على فترات زمنية قصيرة للجلسة:

نوع البوابة مهلة الجلسة توصية
بوابات التأشيرة 5-10 دقائق التدفق الكامل بسرعة
مواقع DMV 15 دقيقة قم بتحديث ملف تعريف ارتباط الجلسة في منتصف الطريق
سجلات المحكمة 20-30 دقيقة عمليات البحث دفعة في مجموعات
بوابات الضرائب 10-15 دقيقة استخدم الوكيل اللزج، نفس IP
السماح بالتطبيقات 30 دقيقة حفظ التقدم في كل خطوة

استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
لا يتم تحميل صورة CAPTCHA انتهت صلاحية ملف تعريف ارتباط الجلسة ابدأ جلسة جديدة
"انتهت الجلسة" أثناء النموذج استغرق وقتا طويلا لحلها الحل المسبق أو استخدام حل أسرع
إجابة CAPTCHA خاطئة صورة مشوهة الإبلاغ عن صورة سيئة عبر واجهة برمجة التطبيقات
أتمتة كتل البوابة كشف IP/UA استخدم الوكيل السكني + UA الحقيقي
خطأ في التحقق من صحة النموذج بعد اختبار CAPTCHA انتهت صلاحية الرمز المميز من جانب الخادم قم بحل اختبار CAPTCHA مباشرة قبل الإرسال

الأسئلة الشائعة

هل أتمتة البوابات الحكومية أمر قانوني؟

يُسمح عمومًا بأتمتة النماذج الخاصة بك والبحث عن البيانات. يعد اختبار ضمان الجودة لتطبيقات التكنولوجيا المدنية استخدامًا مشروعًا شائعًا. تحقق دائمًا من شروط الخدمة الخاصة بالبوابة.

ما هو نوع CAPTCHA الأكثر شيوعًا في المواقع الحكومية؟

صورة CAPTCHA وreCAPTCHA v2. غالبًا ما تتخلف المواقع الحكومية في تقنية CAPTCHA، مما يجعلها أسهل في الحل.

هل يستطيع CaptchaAI حل BLS CAPTCHAs؟

نعم - يدعم CaptchaAI BLS CAPTCHAs بمعدل دقة عالٍ باستخدام معلمة method=bls للحل المباشر، أو method=base64 للحل القائم على الصور.

كيف أتعامل مع النماذج الحكومية متعددة الخطوات؟

استخدم جلسات الوكيل الثابتة للحفاظ على نفس عنوان IP في جميع أنحاء النموذج. غالبًا ما تتحقق البوابات الحكومية من تناسق IP بين صفحات النماذج.


أدلة ذات صلة



الخطوات التالية

التعليقات غير مفعّلة لهذا المقال.