تستخدم المواقع الحكومية اختبارات CAPTCHA لحماية النماذج وأنظمة حجز المواعيد وبوابات السجلات العامة. تحتاج فرق ضمان الجودة ومطورو التكنولوجيا المدنية والمهنيون القانونيون إلى الوصول الآلي لاختبار سير العمل وتشغيله بكفاءة.
اختبارات CAPTCHA الحكومية حسب الفئة
| فئة البوابة | اختبار CAPTCHA الشائع | مواقع المثال | حالة الاستخدام |
|---|---|---|---|
| التأشيرة / الهجرة | بلس، reCAPTCHA v2 | بوابات BLS، USCIS | حجز موعد |
| DMV / المركبات الآلية | reCAPTCHA v2، الصورة | مواقع DMV الحكومية | تجديد التسجيل |
| سجلات المحكمة | reCAPTCHA v2 | PACER، محاكم الدولة | بحث القضية |
| التصاريح / التراخيص | صورة التحقق | بوابات تصريح المدينة | تقديم الطلب |
| بوابات الضرائب | reCAPTCHA v2 | IRS، مواقع الضرائب الحكومية | إيداع الشيكات الحالة |
| السجلات العامة | صورة CAPTCHA، reCAPTCHA | سجلات المقاطعة | بحث Property/deed |
أتمتة موعد تأشيرة BLS
تستخدم بوابات BLS نظام CAPTCHA الخاص بها. CaptchaAI يدعم BLS CAPTCHAs بدقة عالٍ:
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"),
}
بحث سجلات المحكمة
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
صورة CAPTCHA على بوابات التصريح
تستخدم العديد من بوابات المدن والمقاطعات اختبارات CAPTCHA للصور البسيطة:
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")
بحث دفعة السجلات العامة
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
نصائح لإدارة الجلسة
غالبًا ما تحتوي البوابات الحكومية على فترات زمنية قصيرة للجلسة:
| نوع البوابة | مهلة الجلسة | توصية |
|---|---|---|
| بوابات التأشيرة | 5-10 دقائق | التدفق الكامل بسرعة |
| مواقع DMV | 15 دقيقة | قم بتحديث ملف تعريف ارتباط الجلسة في منتصف الطريق |
| سجلات المحكمة | 20-30 دقيقة | عمليات البحث دفعة في مجموعات |
| بوابات الضرائب | 10-15 دقيقة | استخدم الوكيل اللزج، نفس IP |
| السماح بالتطبيقات | 30 دقيقة | حفظ التقدم في كل خطوة |
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| لا يتم تحميل صورة CAPTCHA | انتهت صلاحية ملف تعريف ارتباط الجلسة | ابدأ جلسة جديدة |
| "انتهت الجلسة" أثناء النموذج | استغرق وقتا طويلا لحلها | الحل المسبق أو استخدام حل أسرع |
| إجابة CAPTCHA خاطئة | صورة مشوهة | الإبلاغ عن صورة سيئة عبر واجهة برمجة التطبيقات |
| أتمتة كتل البوابة | كشف IP/UA | استخدم الوكيل السكني + UA الحقيقي |
| خطأ في التحقق من صحة النموذج بعد اختبار CAPTCHA | انتهت صلاحية الرمز المميز من جانب الخادم | قم بحل اختبار CAPTCHA مباشرة قبل الإرسال |
الأسئلة الشائعة
هل أتمتة البوابات الحكومية أمر قانوني؟
يُسمح عمومًا بأتمتة النماذج الخاصة بك والبحث عن البيانات. يعد اختبار ضمان الجودة لتطبيقات التكنولوجيا المدنية استخدامًا مشروعًا شائعًا. تحقق دائمًا من شروط الخدمة الخاصة بالبوابة.
ما هو نوع CAPTCHA الأكثر شيوعًا في المواقع الحكومية؟
صورة CAPTCHA وreCAPTCHA v2. غالبًا ما تتخلف المواقع الحكومية في تقنية CAPTCHA، مما يجعلها أسهل في الحل.
هل يستطيع CaptchaAI حل BLS CAPTCHAs؟
نعم - يدعم CaptchaAI BLS CAPTCHAs بمعدل دقة عالٍ باستخدام معلمة method=bls للحل المباشر، أو method=base64 للحل القائم على الصور.
كيف أتعامل مع النماذج الحكومية متعددة الخطوات؟
استخدم جلسات الوكيل الثابتة للحفاظ على نفس عنوان IP في جميع أنحاء النموذج. غالبًا ما تتحقق البوابات الحكومية من تناسق IP بين صفحات النماذج.