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

Tự động hóa cổng thông tin chính phủ với giải quyết CAPTCHA

Các trang web của chính phủ sử dụng CAPTCHA để bảo vệ biểu mẫu, hệ thống đặt lịch hẹn và cổng hồ sơ công khai. Nhóm QA, nhà phát triển công nghệ dân sự và chuyên gia pháp lý cần quyền truy cập tự động để kiểm tra và vận hành các quy trình công việc này một cách hiệu quả.


CAPTCHA của chính phủ theo danh mục

Danh mục cổng thông tin CAPTCHA phổ biến Trang web mẫu Trường hợp sử dụng
Thị thực/nhập cư BLS, reCAPTCHA v2 Cổng thông tin BLS, USCIS Đặt lịch hẹn
DMV/xe cơ giới reCAPTCHA v2, hình ảnh Các trang web DMV của tiểu bang Gia hạn đăng ký
Hồ sơ tòa án reCAPTCHA v2 PACER, tòa án tiểu bang Tra cứu trường hợp
Giấy phép/giấy phép CAPTCHA hình ảnh Cổng thông tin giấy phép thành phố Nộp hồ sơ
Cổng thông tin thuế reCAPTCHA v2 IRS, trang web thuế tiểu bang Kiểm tra tình trạng nộp hồ sơ
Hồ sơ công cộng CAPTCHA hình ảnh, reCAPTCHA Hồ sơ quận Tra cứu Property/deed

Tự động hóa cuộc hẹn Visa BLS

Cổng BLS sử dụng hệ thống CAPTCHA của riêng họ. CaptchaAI hỗ trợ BLS CAPTCHA với độ chính xác 100%:

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

Tra cứu hồ sơ tòa án

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

Hình ảnh CAPTCHA trên Cổng giấy phép

Nhiều cổng thông tin của thành phố và quận sử dụng CAPTCHA hình ảnh đơn giản:

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

Tra cứu hàng loạt hồ sơ công cộng

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

Mẹo quản lý phiên

Cổng thông tin chính phủ thường có thời gian chờ phiên ngắn:

Loại cổng thông tin Thời gian chờ của phiên Khuyến nghị
Cổng thông tin thị thực 5-10 phút Hoàn thành dòng chảy một cách nhanh chóng
Trang web DMV 15 phút Làm mới cookie phiên giữa chừng
Hồ sơ tòa án 20-30 phút Tìm kiếm hàng loạt theo nhóm
Cổng thông tin thuế 10-15 phút Sử dụng proxy dính, cùng IP
Cho phép ứng dụng 30 phút Lưu tiến độ ở mỗi bước

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Hình ảnh CAPTCHA không tải Cookie phiên đã hết hạn Bắt đầu phiên mới
"Phiên đã hết hạn" trong biểu mẫu Mất quá nhiều thời gian để giải quyết Giải quyết trước hoặc sử dụng giải pháp nhanh hơn
Câu trả lời CAPTCHA sai Hình ảnh bị biến dạng Báo cáo hình ảnh xấu qua API
Tự động hóa khối cổng thông tin Phát hiện IP/UA Sử dụng đa dạng nguồn yêu cầu + UA thực
Lỗi xác thực biểu mẫu sau CAPTCHA Mã thông báo phía máy chủ đã hết hạn Giải CAPTCHA ngay trước khi gửi

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

Tự động hóa cổng thông tin chính phủ có hợp pháp không?

Tự động hóa các biểu mẫu và tra cứu dữ liệu của riêng bạn thường được cho phép. Thử nghiệm QA cho các ứng dụng công nghệ dân sự là một cách sử dụng hợp pháp phổ biến. Luôn kiểm tra các điều khoản dịch vụ của cổng thông tin cụ thể.

Loại CAPTCHA nào phổ biến nhất trên các trang web của chính phủ?

Hình ảnh CAPTCHA và reCAPTCHA v2. Các trang web của chính phủ thường tụt hậu về công nghệ CAPTCHA, khiến việc giải quyết trở nên đơn giản hơn.

CaptchaAI có thể giải được BLS CAPTCHA không?

Có - CaptchaAI hỗ trợ BLS CAPTCHA với tỷ lệ chính xác 100% bằng cách sử dụng tham số method=bls để giải trực tiếp hoặc method=base64 để giải dựa trên hình ảnh.

Làm cách nào để xử lý các biểu mẫu chính phủ gồm nhiều bước?

Sử dụng các phiên phiên cố định nội bộ để duy trì cùng một IP trong toàn bộ biểu mẫu. Cổng thông tin chính phủ thường xác thực tính nhất quán IP giữa các trang biểu mẫu.


Hướng dẫn liên quan



Bước tiếp theo

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