Les portails d'archives publiques – systèmes judiciaires, évaluateurs de comté, dossiers du secrétaire d'État, bases de données d'état civil – s'appuient fortement sur les CAPTCHA d'images et d'OCR. Ces portails utilisent souvent des implémentations CAPTCHA plus anciennes avec du texte déformé, des problèmes mathématiques ou des défis d'image personnalisés. Voici comment les gérer dans différents types d'enregistrements.
Types CAPTCHA courants par portail
| Catégorie du portail | CAPTCHA typique | Exemples de défis |
|---|---|---|
| Recherche de dossiers judiciaires | CAPTCHA de texte personnalisé | Distorsion de 5 à 6 caractères alphanumériques |
| Registres de propriété du comté | CAPTCHA mathématique | "Combien font 4 + 7 ?" |
| Recherche d'entité commerciale | Texte de l'image CAPTCHA | Lettres déformées avec bruit de ligne |
| Actes d'état civil | reCAPTCHA v2 | Sélection de la grille d'images |
| Permis de construire | CAPTCHA de texte simple | Code numérique à 4 chiffres |
| Dépôts UCC | CAPTCHA OCR personnalisé | Lettres majuscules mixtes avec bruit de fond |
Recherche de documents publics avec la résolution de 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"
)
Gestion mathématique des CAPTCHA
Certains portails gouvernementaux utilisent de simples CAPTCHA mathématiques. CaptchaAI les gère comme une reconnaissance de texte :
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")
Recherche multi-portails (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' }
]);
Paramètres CAPTCHA pour les portails gouvernementaux
| Paramètre | Valeur | Quand utiliser |
|---|---|---|
method |
base64 |
Image téléchargée en octets |
method |
post |
Soumettre le fichier image directement |
language |
0 |
CAPTCHA de texte /Latin |
numeric |
1 |
CAPTCHA à chiffres uniquement |
min_len / max_len |
Varie | Quand le nombre de caractères est prévisible |
textinstructions |
Invite personnalisée | CAPTCHA mathématiques ou formats spécifiques |
Dépannage
| Problème | Parce que | Corriger |
|---|---|---|
| L'image CAPTCHA renvoie 403 | Cookie de session manquant | Chargez d'abord la page de recherche, puis récupérez l'image |
| Mauvaise réponse CAPTCHA | Faible qualité d'image | Prétraiter l'image (augmenter le contraste, supprimer le bruit) |
| CAPTCHA s'actualise lors de la soumission | Le jeton de formulaire a expiré | Extraire les champs de formulaire masqués avec CAPTCHA |
| La recherche revient vide après CAPTCHA | POST redirige les cookies perdus | Utilisez allow_redirects=True et persistez la session |
FAQ
Pourquoi les portails gouvernementaux utilisent-ils encore des CAPTCHA d’images ?
De nombreux systèmes gouvernementaux exécutent des logiciels existants antérieurs à reCAPTCHA et Cloudflare Turnstile. Les CAPTCHA d'images personnalisées étaient la norme lors de la création de ces systèmes, et les mises à jour sont lentes dans l'informatique gouvernementale.
Quelle est la précision de CaptchaAI pour les CAPTCHA de texte déformé ?
CaptchaAI prend en charge plus de 27 500 types de CAPTCHA d’image avec une grande précision. Pour le texte fortement déformé, utilisez le paramètre textinstructions pour guider la reconnaissance – par exemple, "lettres et chiffres, pas d'espaces".
Dois-je prétraiter les images CAPTCHA avant de les soumettre ?
Le prétraitement (niveaux de gris, augmentation du contraste, suppression du bruit) peut améliorer la précision des images de très mauvaise qualité. Voir leguide de prétraitement d'imagepour les techniques.
Prochaines étapes
Automatisez les recherches dans les documents publics –récupérez votre clé API CaptchaAIet gérer les CAPTCHA du portail gouvernemental.
Étapes suivantes
- Démarrage rapide CaptchaAI : votre première résolution de CAPTCHA en 5 minutes
- Comment résoudre reCAPTCHA v2 via l'API : guide pas à pas
- Comment résoudre Cloudflare Turnstile via l'API
- Comment résoudre GeeTest v3 à l'aide de l'API