Kasus Penggunaan

Penanganan CAPTCHA Login Otomatis dengan CaptchaAI

Halaman login adalah tempat paling umum untuk menemukan CAPTCHA. Baik itu reCAPTCHA v2, v3, Turnstile, atau CAPTCHA gambar, CaptchaAI memecahkan tantangan sementara otomatisasi Anda menangani pengisian dan pengiriman formulir.

Jenis CAPTCHA Login Umum

CAPTCHA Bagaimana Kelihatannya Metode CaptchaAI
reCAPTCHA v2 Kotak centang atau tantangan sebelum dikirimkan method=userrecaptcha
reCAPTCHA v3 Penilaian tak terlihat, memblokir pengguna dengan skor rendah method=userrecaptcha&version=v3
Cloudflare Turnstile Widget sebelum formulir login method=turnstile
Gambar CAPTCHA Gambar teks untuk diketik method=base64

Metode 1: Permintaan HTTP (Tanpa Browser)

Untuk formulir login yang menerima permintaan POST standar:

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://staging.example.com/qa-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

Metode 2: Selenium (Python)

Untuk halaman login yang memerlukan eksekusi 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()
driver = webdriver.Chrome(options=options)

# Navigate to login page
driver.get("https://staging.example.com/qa-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}")

Metode 3: Dalang (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://staging.example.com/qa-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();
})();

Menangani Multi-Faktor + CAPTCHA

Beberapa situs menggabungkan CAPTCHA dengan autentikasi multifaktor:

# 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

Pemecahan Masalah

Masalah Penyebab Solusi
Login kembali ke halaman CAPTCHA Token sudah habis masa berlakunya Selesaikan dan kirimkan dalam waktu 60 detik
"Kredensial tidak valid" dengan kata sandi yang benar Token CSRF hilang Ekstrak dan sertakan token CSRF dari halaman login
Sesi hilang setelah login Cookie tidak bertahan Gunakan requests.Session() atau cookie browser
reCAPTCHA v3 memblokir meskipun ada token Skor terlalu rendah CaptchaAI mengoptimalkan skor tinggi; verifikasi parameter action

Pertanyaan Umum

Bisakah saya mengotomatiskan login ke situs web mana pun?

CaptchaAI menangani komponen CAPTCHA. Otomatisasi Anda perlu menangani formulir login itu sendiri (mengisi kolom, mengirimkan, mengelola cookie). Legalitasnya tergantung pada otorisasi Anda untuk mengakses akun.

Apakah saya memerlukan browser untuk otomatisasi login?

Tidak selalu. Banyak halaman login menerima permintaan HTTP POST standar. Gunakan browser hanya ketika login memerlukan eksekusi JavaScript atau interaksi kompleks.

Bagaimana cara menangani pemeliharaan sesi setelah login?

Gunakan requests.Session() dengan Python atau pertahankan cookie di browser Anda. Cookie sesi dari login diperlukan untuk semua permintaan terotentikasi berikutnya.

Panduan Terkait

  • Penanganan CAPTCHA Selenium dengan Python
  • Pemecahan CAPTCHA Puppeteer dengan Node.js
  • Penanganan CAPTCHA Playwright
Komentar dinonaktifkan untuk artikel ini.