Devlet web siteleri formları, randevu rezervasyon sistemlerini ve kamu kayıt portallarını korumak için CAPTCHA'ları kullanır. Kalite güvence ekipleri, sivil teknoloji geliştiricileri ve hukuk profesyonelleri, bu iş akışlarını verimli bir şekilde test etmek ve çalıştırmak için otomatik erişime ihtiyaç duyar.
Kategoriye Göre Devlet CAPTCHA'ları
| Portal Kategorisi | Ortak CAPTCHA | Örnek Siteler | Kullanım Örneği |
|---|---|---|---|
| Vize / göçmenlik | BLS, reCAPTCHA v2 | BLS portalları, USCIS | Randevu rezervasyonu |
| DMV / motorlu taşıtlar | reCAPTCHA v2, resim | Eyalet DMV siteleri | Kayıt yenileme |
| Mahkeme kayıtları | reCAPTCHA v2 | PACER, eyalet mahkemeleri | Vaka arama |
| İzinler / lisanslar | Resim CAPTCHA'sı | Şehir izin portalları | Başvuru dosyalama |
| Vergi portalları | reCAPTCHA v2 | IRS, eyalet vergi siteleri | Dosyalama durumu kontrolleri |
| Kamu kayıtları | Resim CAPTCHA, reCAPTCHA | İlçe kayıtları | Özellik/deed araması |
BLS Vize Randevu Otomasyonu
BLS portalları kendi CAPTCHA sistemlerini kullanır. CaptchaAI, BLS CAPTCHA'leri %100 doğrulukla destekler:
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"),
}
Mahkeme Kayıtları Arama
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
İzin Portallarındaki Resim CAPTCHA
Birçok şehir ve ilçe portalı basit resim CAPTCHA'larını kullanır:
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")
Kamu Kayıtlarına Toplu Arama
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
Oturum Yönetimi İpuçları
Devlet portallarında genellikle kısa oturum zaman aşımları olur:
| Portal Türü | Oturum Zaman Aşımı | Tavsiye |
|---|---|---|
| Vize portalları | 5-10 dakika | Akışı hızla tamamlayın |
| DMV siteleri | 15 dakika | Oturum çerezini yarıda yenileyin |
| Mahkeme kayıtları | 20-30 dakika | Gruplarda toplu aramalar |
| Vergi portalları | 10-15 dakika | Kalıcı QA oturumu kullan, aynı IP |
| Uygulamalara izin ver | 30 dakika | Her adımda ilerlemeyi kaydedin |
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| CAPTCHA resmi yüklenmiyor | Oturum çerezinin süresi doldu | Yeni oturum başlat |
| Form sırasında "Oturumun süresi doldu" | Çözülmesi çok uzun sürdü | Ön QA testi yapın veya daha hızlı çözüm kullanın |
| Yanlış CAPTCHA yanıtı | Bozuk görüntü | Kötü görüntüyü API aracılığıyla bildirin |
| Portal otomasyonu engeller | IP/UA tespiti | Kendi sunucu altyapınız'sini + gerçek UA'yı kullanın |
| CAPTCHA'dan sonra form doğrulama hatası | Sunucu tarafı belirtecinin süresi doldu | CAPTCHA'yı göndermeden hemen önce çözün |
SSS
Devlet portallarının otomatikleştirilmesi yasal mı?
Kendi formlarınızı ve veri aramanızı otomatikleştirmeye genellikle izin verilir. Sivil teknoloji uygulamalarına yönelik QA testleri yaygın bir meşru kullanımdır. Her zaman belirli portalın hizmet şartlarını kontrol edin.
Devlet sitelerinde en yaygın olan CAPTCHA türü hangisidir?
Resim CAPTCHA'ları ve reCAPTCHA v2. Devlet siteleri genellikle CAPTCHA teknolojisinde geride kalıyor ve bu da bunların çözülmesini kolaylaştırıyor.
CaptchaAI, BLS CAPTCHA'leri çözebilir mi?
Evet - CaptchaAI, doğrudan çözümleme için method=bls parametresini veya görüntü tabanlı çözümleme için method=base64'yi kullanarak %100 doğruluk oranıyla BLS CAPTCHA'leri destekler.
Çok adımlı hükümet formlarını nasıl ele alacağım?
Form boyunca aynı IP'yi korumak için kalıcı QA oturumu oturumlarını kullanın. Devlet portalları genellikle form sayfaları arasındaki IP tutarlılığını doğrular.