Situs web pemerintah menggunakan CAPTCHA untuk melindungi form, sistem booking janji temu, dan portal catatan publik. Tim QA, developer civic tech, dan profesional hukum memerlukan akses otomatis untuk menguji dan mengoperasikan alur kerja ini secara efisien.
CAPTCHA Pemerintah berdasarkan Kategori
| Kategori Portal | CAPTCHA Umum | Contoh Situs | Kasus Penggunaan |
|---|---|---|---|
| Visa/imigrasi | BLS, reCAPTCHA v2 | Portal BLS, USCIS | Booking janji temu |
| DMV / kendaraan bermotor | reCAPTCHA v2, image | Situs DMV negara bagian | Perpanjangan registrasi |
| Catatan pengadilan | reCAPTCHA v2 | PACER, pengadilan negara bagian | Pencarian kasus |
| Izin/lisensi | Image CAPTCHA | Portal izin kota | Submit aplikasi |
| Portal pajak | reCAPTCHA v2 | IRS, situs pajak negara bagian | Cek status filing |
| Catatan publik | Image CAPTCHA, reCAPTCHA | Catatan county | Pencarian properti/deed |
Otomatisasi Pengangkatan Visa BLS
Portal BLS menggunakan sistem CAPTCHA mereka sendiri. CaptchaAI mendukung BLS CAPTCHA dengan akurasi 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"),
}
Pencarian Catatan Pengadilan
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
Gambar CAPTCHA di Portal Izin
Banyak portal kota dan kabupaten menggunakan CAPTCHA gambar sederhana:
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")
Pencarian Kumpulan Catatan Publik
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
Tip Manajemen Sesi
Portal pemerintah sering memiliki session timeout yang singkat:
| Tipe Portal | Timeout Sesi | Rekomendasi |
|---|---|---|
| Portal visa | 5–10 menit | Selesaikan alur dengan cepat |
| Situs DMV | 15 menit | Refresh cookie sesi di tengah jalan |
| Catatan pengadilan | 20–30 menit | Batch pencarian dalam kelompok kecil |
| Portal pajak | 10–15 menit | Gunakan egress jaringan persisten yang diotorisasi, IP yang sama |
| Aplikasi izin | 30 menit | Simpan progress di setiap langkah |
Pemecahan Masalah
| Masalah | Penyebab | Solusi |
|---|---|---|
| Image CAPTCHA tidak dimuat | Cookie sesi sudah expired | Mulai sesi baru |
| "Session expired" di form | Terlalu lama untuk solve | validasi awal di staging atau gunakan solve yang lebih cepat |
| Jawaban CAPTCHA salah | Gambar terdistorsi | Laporkan gambar buruk via API |
| Portal memblokir otomasi | Deteksi IP/UA | Gunakan egress jaringan yang diotorisasi + UA asli |
| Error validasi form setelah CAPTCHA | Token server-side sudah expired | Solve CAPTCHA tepat sebelum submit |
Pertanyaan Umum
Apakah mengotomatiskan portal pemerintah legal?
Mengotomatiskan form dan pencarian data Anda sendiri umumnya diizinkan. Pengujian QA untuk aplikasi civic tech adalah penggunaan sah yang umum. Selalu periksa syarat layanan portal yang bersangkutan.
Tipe CAPTCHA apa yang paling umum di situs pemerintah?
Image CAPTCHA dan reCAPTCHA v2. Situs pemerintah sering tertinggal dalam teknologi CAPTCHA, sehingga lebih mudah di-solve.
Bisakah CaptchaAI solve BLS CAPTCHA?
Ya — CaptchaAI mendukung BLS CAPTCHA dengan akurasi 100% menggunakan parameter method=bls untuk solve langsung, atau method=base64 untuk solve berbasis gambar.
Bagaimana cara menangani form pemerintah multi-step?
Gunakan egress jaringan persisten yang diotorisasi session untuk mempertahankan IP yang sama di seluruh form. Portal pemerintah sering memvalidasi konsistensi IP antar halaman form.
Panduan Terkait
- Persistensi Sesi Browser dalam Alur Kerja CAPTCHA
- CaptchaAI Quickstart
- Cara Solve reCAPTCHA v2 via API
- Cara Solve Cloudflare Turnstile via API
- Cara Solve GeeTest v3 via API