Порталы публичных записей — судебные системы, окружные заседатели, документы государственного секретаря, базы данных записей актов гражданского состояния — в значительной степени полагаются на изображения и OCR CAPTCHA. На этих порталах часто используются старые реализации CAPTCHA с искаженным текстом, математическими задачами или пользовательскими изображениями. Вот как их обрабатывать в разных типах записей.
Распространенные типы CAPTCHA на портале
| Категория портала | Типичная капча | Примеры задач |
|---|---|---|
| Поиск судебного дела | Пользовательский текстовый CAPTCHA | Искаженные буквы и цифры длиной 5–6 символов. |
| Записи об имуществе округа | Математическая капча | «Сколько будет 4 + 7?» |
| Поиск субъекта хозяйствования | Текст изображения CAPTCHA | Искаженные буквы с линейным шумом |
| Записи актов гражданского состояния | reCAPTCHA v2 | Выбор сетки изображений |
| Разрешения на строительство | Простая текстовая капча | 4-значный цифровой код |
| Документы UCC | Пользовательская OCR CAPTCHA | Буквы смешанного регистра с фоновым шумом |
Поиск в публичных записях с решением 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"
)
Обработка математической капчи
Некоторые правительственные порталы используют простые математические CAPTCHA. CaptchaAI обрабатывает их как распознавание текста:
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")
Многопортальный поиск (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' }
]);
Параметры CAPTCHA для государственных порталов
| Параметр | Ценить | Когда использовать |
|---|---|---|
method |
base64 |
Изображение загружено в байтах |
method |
post |
Отправьте файл изображения напрямую |
language |
0 |
Russian/Latin текст CAPTCHA |
numeric |
1 |
CAPTCHA, состоящая только из цифр |
min_len / max_len |
Варьируется | Когда количество символов предсказуемо |
textinstructions |
Пользовательское приглашение | Математические CAPTCHA или определенные форматы |
Поиск неисправностей
| Проблема | Причина | Исправить |
|---|---|---|
| Изображение CAPTCHA возвращает 403 | Файл cookie сеанса отсутствует | Сначала загрузите страницу поиска, затем получите изображение |
| Неправильный ответ на CAPTCHA | Низкое качество изображения | Предварительная обработка изображения (увеличение контрастности, удаление шума) |
| CAPTCHA обновляется при отправке | Срок действия токена формы истек | Извлекайте скрытые поля формы с помощью CAPTCHA |
| Поиск возвращается пустым после CAPTCHA | POST-перенаправление потерянных файлов cookie | Используйте allow_redirects=True и сохраните сеанс. |
Часто задаваемые вопросы
Почему правительственные порталы до сих пор используют графические CAPTCHA?
Многие правительственные системы используют устаревшее программное обеспечение, созданное до reCAPTCHA и Cloudflare Turnstile. На момент создания этих систем пользовательские изображения CAPTCHA были стандартом, а обновления в государственных ИТ-отделах происходят медленно.
Насколько точен CaptchaAI для искаженных текстовых CAPTCHA?
CaptchaAI поддерживает более 27 500 типов изображений CAPTCHA с высокой точностью. Для сильно искаженного текста используйте параметр textinstructions для распознавания — например, «буквы и цифры, без пробелов».
Должен ли я предварительно обрабатывать изображения CAPTCHA перед отправкой?
Предварительная обработка (оттенки серого, усиление контрастности, удаление шума) может повысить точность изображений очень низкого качества. См.руководство по предварительной обработке изображенийдля техник.
Следующие шаги
Автоматизируйте поиск в публичных записях —получите свой API-ключ CaptchaAIи обрабатывать CAPTCHA правительственного портала.
Следующие шаги
- CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
- Как решить reCAPTCHA v2 через API: пошаговое руководство
- Как решить Cloudflare Turnstile через API
- Как решить GeeTest v3 с помощью API