Les sites Web gouvernementaux utilisent des CAPTCHA pour protéger les formulaires, les systèmes de prise de rendez-vous et les portails d'archives publiques. Les équipes d'assurance qualité, les développeurs de technologies civiques et les professionnels du droit ont besoin d'un accès automatisé pour tester et exploiter efficacement ces flux de travail.
CAPTCHA gouvernementaux par catégorie
| Catégorie de portail | CAPTCHA commun | Exemples de sites | Cas d'utilisation |
|---|---|---|---|
| Visas/immigration | BLS, reCAPTCHA v2 | Portails BLS, USCIS | Prise de rendez-vous |
| DMV / véhicules à moteur | reCAPTCHA v2, image | Sites DMV d'État | Renouvellement d'inscription |
| Dossiers judiciaires | reCAPTCHA v2 | PACER, tribunaux d'État | Recherche de cas |
| Permis/licences | Image CAPTCHA | Portails de permis de ville | Dépôt de candidature |
| Portails fiscaux | reCAPTCHA v2 | IRS, sites fiscaux d'État | Vérifications de l'état du dépôt |
| Archives publiques | Image CAPTCHA, reCAPTCHA | Registres du comté | Propriété/deed recherche |
Automatisation des rendez-vous pour les visas BLS
Les portails BLS utilisent leur propre système CAPTCHA. CaptchaAI prend en charge les BLS CAPTCHA avec une précision de 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"),
}
Recherche de dossiers judiciaires
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
Image CAPTCHA sur les portails de permis
De nombreux portails de villes et de comtés utilisent de simples CAPTCHA d’images :
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")
Recherche par lots de documents publics
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
Conseils de gestion de session
Les portails gouvernementaux ont souvent des délais d'attente de session courts :
| Type de portail | Expiration de la session | Recommandation |
|---|---|---|
| Portails de visa | 5-10 minutes | Terminer le flux rapidement |
| Sites DMV | 15 minutes | Actualiser le cookie de session à mi-chemin |
| Dossiers judiciaires | 20-30 minutes | Recherches par lots dans des groupes |
| Portails fiscaux | 10-15 minutes | Utiliser un proxy collant, même IP |
| Autoriser les applications | 30 minutes | Enregistrez la progression à chaque étape |
Dépannage
| Problème | Parce que | Corriger |
|---|---|---|
| L'image CAPTCHA ne se charge pas | Le cookie de session a expiré | Commencer une nouvelle session |
| "Session expirée" pendant le formulaire | Cela a pris trop de temps à résoudre | Pré-résoudre ou utiliser une résolution plus rapide |
| Mauvaise réponse CAPTCHA | Image déformée | Signaler une mauvaise image via l'API |
| Automatisation des blocs de portail | Détection IP/UA | Utiliser un proxy résidentiel + un UA réel |
| Erreur de validation du formulaire après CAPTCHA | Le jeton côté serveur a expiré | Résolvez CAPTCHA immédiatement avant de soumettre |
FAQ
L’automatisation des portails gouvernementaux est-elle légale ?
L'automatisation de vos propres formulaires et recherches de données est généralement autorisée. Les tests d’assurance qualité pour les applications de technologie civique sont une utilisation légitime courante. Vérifiez toujours les conditions de service du portail spécifique.
Quel type de CAPTCHA est le plus courant sur les sites gouvernementaux ?
Image CAPTCHA et reCAPTCHA v2. Les sites gouvernementaux sont souvent à la traîne en matière de technologie CAPTCHA, ce qui les rend plus simples à résoudre.
CaptchaAI peut-il résoudre les BLS CAPTCHA ?
Oui : CaptchaAI prend en charge les BLS CAPTCHA avec un taux de précision de 100 % en utilisant le paramètre method=bls pour la résolution directe, ou method=base64 pour la résolution basée sur l'image.
Comment gérer les formulaires gouvernementaux en plusieurs étapes ?
Utilisez des sessions proxy persistantes pour conserver la même adresse IP tout au long du formulaire. Les portails gouvernementaux valident souvent la cohérence IP entre les pages de formulaire.
Guides connexes
- Guide du solveur BLS CAPTCHA
- Guide du solveur CAPTCHA d’image
- Persistance de la session du navigateur
É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