تعد صفحات تسجيل الدخول هي المكان الأكثر شيوعًا لمواجهة اختبارات CAPTCHA. سواء كان reCAPTCHA v2، أو v3، أو Turnstile، أو صورة CAPTCHA، فإن CaptchaAI يحل التحدي بينما تتعامل الأتمتة مع تعبئة النموذج وإرساله.
أنواع CAPTCHA الشائعة لتسجيل الدخول
| اختبار CAPTCHA | كيف يظهر | طريقة CaptchaAI |
|---|---|---|
| reCAPTCHA v2 | خانة الاختيار أو التحدي قبل الإرسال | method=userrecaptcha |
| reCAPTCHA v3 | تسجيل غير مرئي، يمنع المستخدمين ذوي الدرجات المنخفضة | method=userrecaptcha&version=v3 |
| Cloudflare Turnstile | القطعة قبل نموذج تسجيل الدخول | method=turnstile |
| صورة التحقق | صورة نصية للكتابة | method=base64 |
الطريقة الأولى: طلبات HTTP (بدون متصفح)
بالنسبة لنماذج تسجيل الدخول التي تقبل طلبات POST القياسية:
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
# Login flow
session = requests.Session()
login_url = "https://example.com/login"
# Load login page to get cookies and site key
page = session.get(login_url)
# Extract site_key from the page HTML...
site_key = "6Le-wvkS..."
# Solve CAPTCHA
token = solve_recaptcha(site_key, login_url)
# Submit login form
resp = session.post(login_url, data={
"username": "user@example.com",
"password": "your_password",
"g-recaptcha-response": token
})
if resp.url != login_url:
print("Login successful!")
# session now has auth cookies for subsequent requests
الطريقة الثانية: السيلينيوم (بايثون)
بالنسبة لصفحات تسجيل الدخول التي تتطلب تنفيذ JavaScript:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time
API_KEY = "YOUR_API_KEY"
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
# Navigate to login page
driver.get("https://example.com/login")
wait = WebDriverWait(driver, 10)
# Fill in credentials
username_field = wait.until(EC.presence_of_element_located((By.NAME, "username")))
username_field.send_keys("user@example.com")
driver.find_element(By.NAME, "password").send_keys("your_password")
# Extract site key and solve
recaptcha = driver.find_element(By.CLASS_NAME, "g-recaptcha")
site_key = recaptcha.get_attribute("data-sitekey")
token = solve_recaptcha(site_key, driver.current_url)
# Inject token
driver.execute_script(
f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)
# Submit
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
wait.until(EC.url_changes(driver.current_url))
print(f"Logged in! Now at: {driver.current_url}")
الطريقة الثالثة: Puppeteer (Node.js)
const puppeteer = require("puppeteer");
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
async function solveRecaptcha(siteKey, pageUrl) {
const submit = await axios.get("https://ocr.captchaai.com/in.php", {
params: {
key: API_KEY,
method: "userrecaptcha",
googlekey: siteKey,
pageurl: pageUrl,
},
});
const taskId = submit.data.split("|")[1];
while (true) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: API_KEY, action: "get", id: taskId },
});
if (result.data === "CAPCHA_NOT_READY") continue;
if (result.data.startsWith("OK|")) return result.data.split("|")[1];
throw new Error(result.data);
}
}
(async () => {
const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://example.com/login");
// Fill credentials
await page.type("#username", "user@example.com");
await page.type("#password", "your_password");
// Get site key and solve
const siteKey = await page.$eval(".g-recaptcha", (el) =>
el.getAttribute("data-sitekey")
);
const token = await solveRecaptcha(siteKey, page.url());
// Inject and submit
await page.evaluate(
(t) => (document.getElementById("g-recaptcha-response").innerHTML = t),
token
);
await page.click('button[type="submit"]');
await page.waitForNavigation();
console.log("Logged in:", page.url());
await browser.close();
})();
التعامل مع العوامل المتعددة + CAPTCHA
تجمع بعض المواقع بين اختبارات CAPTCHA والمصادقة متعددة العوامل:
# Step 1: Solve CAPTCHA and submit login
token = solve_recaptcha(site_key, login_url)
resp = session.post(login_url, data={
"username": "user@example.com",
"password": "your_password",
"g-recaptcha-response": token
})
# Step 2: Handle MFA page (if redirected)
if "verify" in resp.url or "mfa" in resp.url:
# Your MFA code logic here
mfa_code = get_mfa_code()
resp = session.post(resp.url, data={"code": mfa_code})
# Step 3: Verify logged in
assert "dashboard" in resp.url
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| يعود تسجيل الدخول إلى صفحة CAPTCHA | انتهت صلاحية الرمز المميز | حل وتقديم في غضون 60 ثانية |
| "بيانات اعتماد غير صالحة" بكلمة المرور الصحيحة | رمز CSRF مفقود | استخراج وتضمين رمز CSRF من صفحة تسجيل الدخول |
| فقدت الجلسة بعد تسجيل الدخول | ملفات تعريف الارتباط لم تستمر | استخدم requests.Session() أو ملفات تعريف الارتباط للمتصفح |
| كتل reCAPTCHA v3 على الرغم من الرمز المميز | النتيجة منخفضة جدًا | يعمل CaptchaAI على تحسين النتائج العالية؛ التحقق من معلمة الإجراء |
الأسئلة الشائعة
هل يمكنني أتمتة عمليات تسجيل الدخول إلى أي موقع ويب؟
يعالج CaptchaAI مكون CAPTCHA. تحتاج الأتمتة الخاصة بك إلى التعامل مع نموذج تسجيل الدخول نفسه (ملء الحقول، الإرسال، إدارة ملفات تعريف الارتباط). تعتمد الشرعية على إذنك للوصول إلى الحساب.
هل أحتاج إلى متصفح لأتمتة تسجيل الدخول؟
ليس دائما. تقبل العديد من صفحات تسجيل الدخول طلبات HTTP POST القياسية. استخدم المتصفح فقط عندما يتطلب تسجيل الدخول تنفيذ JavaScript أو تفاعلات معقدة.
كيف أتعامل مع صيانة الجلسة بعد تسجيل الدخول؟
استخدم requests.Session() في Python أو احتفظ بملفات تعريف الارتباط في مثيل المتصفح الخاص بك. ملفات تعريف الارتباط للجلسة من تسجيل الدخول مطلوبة لجميع الطلبات المصادقة اللاحقة.
النقاشات (0)
شارك في النقاش
سجّل الدخول لمشاركة رأيك.
تسجيل الدخوللا توجد تعليقات بعد.