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

Xử lý CAPTCHA để tự động hóa tìm kiếm hồ sơ công cộng

Cổng thông tin hồ sơ công cộng - hệ thống tòa án, thẩm định viên quận, thư ký lưu trữ hồ sơ tiểu bang, cơ sở dữ liệu hồ sơ quan trọng - phụ thuộc rất nhiều vào CAPTCHA Hình ảnh và OCR. Các cổng này thường sử dụng cách triển khai CAPTCHA cũ hơn với văn bản bị biến dạng, các bài toán hoặc các thử thách hình ảnh tùy chỉnh. Đây là cách xử lý chúng trên các loại bản ghi khác nhau.

Các loại CAPTCHA phổ biến theo cổng thông tin

danh mục cổng thông tin CAPTCHA điển hình Ví dụ về thử thách
Tìm kiếm vụ án tại tòa án CAPTCHA văn bản tùy chỉnh Bị bóp méo 5–6 ký tự chữ và số
Hồ sơ tài sản của quận CAPTCHA toán học "4 + 7 là bao nhiêu?"
Tìm kiếm thực thể doanh nghiệp Văn bản hình ảnh CAPTCHA Các chữ cái bị biến dạng với tiếng ồn dòng
Hồ sơ quan trọng reCAPTCHA v2 Lựa chọn lưới hình ảnh
Giấy phép xây dựng CAPTCHA văn bản đơn giản Mã số gồm 4 chữ số
Hồ sơ UCC CAPTCHA OCR tùy chỉnh Các chữ cái viết hoa hỗn hợp với tiếng ồn nền

Tìm kiếm hồ sơ công cộng bằng giải CAPTCHA

import requests
import base64
import time
from urllib.parse import urljoin

class PublicRecordsSearcher:
    def __init__(self, api_key):
        self.api_key = api_key
        self.session = requests.Session()
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        })

    def search_court_records(self, portal_url, case_number):
        """Search court records, solving image CAPTCHAs as needed."""
        # Load the search page
        page = self.session.get(f"{portal_url}/search")

        # Extract CAPTCHA image
        captcha_img_url = self._extract_captcha_url(page.text, portal_url)
        if not captcha_img_url:
            # No CAPTCHA on this page
            return self._submit_search(portal_url, case_number)

        # Download and solve CAPTCHA
        img_response = self.session.get(captcha_img_url)
        captcha_text = self._solve_image_captcha(img_response.content)

        # Submit search with solved CAPTCHA
        return self._submit_search(portal_url, case_number, captcha_text)

    def _extract_captcha_url(self, html, base_url):
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html, "html.parser")

        # Look for common CAPTCHA image patterns
        captcha_img = (
            soup.find("img", {"id": "captchaImage"}) or
            soup.find("img", {"class": "captcha"}) or
            soup.find("img", attrs={"src": lambda s: s and "captcha" in s.lower()})
        )

        if captcha_img and captcha_img.get("src"):
            return urljoin(base_url, captcha_img["src"])
        return None

    def _solve_image_captcha(self, image_bytes):
        img_base64 = base64.b64encode(image_bytes).decode("utf-8")

        resp = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": "base64",
            "body": img_base64,
            "json": 1
        })
        task_id = resp.json()["request"]

        for _ in range(30):
            time.sleep(3)
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key,
                "action": "get",
                "id": task_id,
                "json": 1
            })
            data = result.json()
            if data["status"] == 1:
                return data["request"]

        raise TimeoutError("CAPTCHA solve timed out")

    def _submit_search(self, portal_url, case_number, captcha_text=None):
        form_data = {"caseNumber": case_number}
        if captcha_text:
            form_data["captcha"] = captcha_text

        response = self.session.post(
            f"{portal_url}/search/results",
            data=form_data
        )
        return response.text

# Usage
searcher = PublicRecordsSearcher("YOUR_API_KEY")
results = searcher.search_court_records(
    "https://courts.example.gov",
    "2024-CV-12345"
)

Xử lý CAPTCHA toán học

Một số cổng thông tin chính phủ sử dụng CAPTCHA toán học đơn giản. CaptchaAI xử lý những điều này dưới dạng nhận dạng văn bản:

def solve_math_captcha(self, image_bytes):
    """Solve math CAPTCHAs like '4 + 7 = ?'"""
    img_base64 = base64.b64encode(image_bytes).decode("utf-8")

    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": self.api_key,
        "method": "base64",
        "body": img_base64,
        "textinstructions": "solve the math equation and return only the number",
        "json": 1
    })
    task_id = resp.json()["request"]

    # Poll for result
    for _ in range(30):
        time.sleep(3)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": self.api_key,
            "action": "get",
            "id": task_id,
            "json": 1
        })
        data = result.json()
        if data["status"] == 1:
            return data["request"]

    raise TimeoutError("Math CAPTCHA solve timed out")

Tìm kiếm đa cổng (JavaScript)

class RecordsAggregator {
  constructor(apiKey) {
    this.apiKey = apiKey;
  }

  async searchAcrossPortals(query, portals) {
    const results = [];

    for (const portal of portals) {
      try {
        const data = await this.searchPortal(portal, query);
        results.push({ portal: portal.name, records: data });
      } catch (error) {
        results.push({ portal: portal.name, error: error.message });
      }
    }

    return results;
  }

  async searchPortal(portal, query) {
    const pageResponse = await fetch(portal.searchUrl);
    const html = await pageResponse.text();

    // Check for image CAPTCHA
    const captchaMatch = html.match(/captcha[^"]*\.(?:png|jpg|gif)/i);
    let captchaAnswer = null;

    if (captchaMatch) {
      const imgUrl = new URL(captchaMatch[0], portal.searchUrl).href;
      const imgData = await fetch(imgUrl);
      const buffer = await imgData.arrayBuffer();
      const base64 = Buffer.from(buffer).toString('base64');

      captchaAnswer = await this.solveImageCaptcha(base64);
    }

    // Submit search
    const formData = new URLSearchParams({ q: query });
    if (captchaAnswer) formData.append('captcha', captchaAnswer);

    const response = await fetch(portal.searchUrl, {
      method: 'POST',
      body: formData
    });

    return response.text();
  }

  async solveImageCaptcha(base64Image) {
    const submitResp = await fetch('https://ocr.captchaai.com/in.php', {
      method: 'POST',
      body: new URLSearchParams({
        key: this.apiKey,
        method: 'base64',
        body: base64Image,
        json: '1'
      })
    });

    const { request: taskId } = await submitResp.json();

    for (let i = 0; i < 30; i++) {
      await new Promise(r => setTimeout(r, 3000));
      const result = await fetch(
        `https://ocr.captchaai.com/res.php?key=${this.apiKey}&action=get&id=${taskId}&json=1`
      );
      const data = await result.json();
      if (data.status === 1) return data.request;
    }

    throw new Error('CAPTCHA solve timed out');
  }
}

// Usage
const aggregator = new RecordsAggregator('YOUR_API_KEY');
const results = await aggregator.searchAcrossPortals('Smith LLC', [
  { name: 'State Business Registry', searchUrl: 'https://sos.example.gov/search' },
  { name: 'County Court Records', searchUrl: 'https://courts.example.gov/search' }
]);

Tham số CAPTCHA cho Cổng thông tin chính phủ

tham số Giá trị Khi nào nên sử dụng
method base64 Hình ảnh được tải xuống dưới dạng byte
method post Gửi file ảnh trực tiếp
language 0 Tiếng Anh/Latin văn bản CAPTCHA
numeric 1 CAPTCHA chỉ có chữ số
min_len / max_len Khác nhau Khi số lượng ký tự có thể dự đoán được
textinstructions Lời nhắc tùy chỉnh CAPTCHA toán học hoặc các định dạng cụ thể

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Hình ảnh CAPTCHA trả về 403 Thiếu cookie phiên Tải trang tìm kiếm trước, sau đó tìm nạp hình ảnh
Câu trả lời CAPTCHA sai Chất lượng hình ảnh thấp Tiền xử lý ảnh (tăng độ tương phản, loại bỏ nhiễu)
CAPTCHA làm mới khi gửi Mã thông báo biểu mẫu đã hết hạn Trích xuất các trường biểu mẫu ẩn bằng CAPTCHA
Tìm kiếm trả về trống sau CAPTCHA POST chuyển hướng cookie bị mất Sử dụng allow_redirects=True và duy trì phiên

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

Tại sao các cổng thông tin chính phủ vẫn sử dụng CAPTCHA hình ảnh?

Nhiều hệ thống của chính phủ chạy phần mềm cũ có trước reCAPTCHA và Cloudflare Turnstile. CAPTCHA hình ảnh tùy chỉnh là tiêu chuẩn khi các hệ thống này được xây dựng và việc cập nhật trong bộ phận CNTT của chính phủ diễn ra chậm.

CaptchaAI đối với CAPTCHA văn bản bị biến dạng có độ chính xác như thế nào?

CaptchaAI hỗ trợ hơn 27.500 loại CAPTCHA hình ảnh với độ chính xác cao. Đối với văn bản bị biến dạng nhiều, hãy sử dụng tham số textinstructions để hướng dẫn nhận dạng — ví dụ: "chữ cái và số, không có dấu cách".

Tôi có nên xử lý trước hình ảnh CAPTCHA trước khi gửi không?

Quá trình xử lý trước (thang độ xám, tăng độ tương phản, loại bỏ nhiễu) có thể cải thiện độ chính xác cho hình ảnh có chất lượng rất thấp. Xemhướng dẫn tiền xử lý ảnhcho các kỹ thuật.

Các bước tiếp theo

Tự động tìm kiếm hồ sơ công khai –lấy khóa API CaptchaAI của bạnvà xử lý CAPTCHA của cổng thông tin chính phủ.


Bước tiếp theo

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