So Sánh

Giải CAPTCHA dựa trên mã thông báo và dựa trên cookie

Giải pháp CAPTCHA có hai dạng: mã thông báo mà bạn đưa vào khi gửi biểu mẫu và cookie cấp quyền truy cập cấp phiên. Việc chọn phương pháp phù hợp tùy thuộc vào loại CAPTCHA mà bạn đang gặp phải và cách trang web mục tiêu xác thực nó.


Trong nháy mắt

Khía cạnh Dựa trên mã thông báo Dựa trên cookie
đầu ra Mã thông báo chuỗi (hơn 500 ký tự) Cookie trình duyệt (<staging-session-cookie>, v.v.)
Dùng cho reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile trang Cloudflare Challenge
Nó được sử dụng như thế nào Đã đưa vào trường biểu mẫu hoặc nội dung POST Được gửi cùng với các yêu cầu HTTP tiếp theo
Trọn đời 60-120 giây 30 phút đến 24 giờ
Tái sử dụng Không (sử dụng một lần) Có (trong suốt thời gian phiên)
Cần có trình duyệt Chỉ để khai thác Để giải quyết (cần có trình duyệt đầy đủ)

Giải quyết dựa trên mã thông báo

Nó hoạt động như thế nào

  1. Trích xuất khóa trang web từ trang
  2. Gửi khóa trang + URL trang tới CaptchaAI
  3. Nhận chuỗi mã thông báo
  4. Đưa mã thông báo vào trường biểu mẫu ẩn
  5. Gửi biểu mẫu

CAPTCHA nào sử dụng mã thông báo

  • reCAPTCHA v2: Mã thông báo đi vào vùng văn bản g-recaptcha-response
  • reCAPTCHA v3: Cùng một trường nhưng cũng cần action (và enterprise=1 cho sitekey Enterprise)
  • hCaptcha: Mã thông báo đi vào h-captcha-response
  • Cloudflare Turnstile: Token đi vào cf-turnstile-response

Thực hiện

import requests
import time

API_KEY = "YOUR_API_KEY"

# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMR...",
    "pageurl": "https://staging.example.com/qa-login",
    "json": "1",
}).json()
task_id = resp["request"]

# 2. Poll
token = None
for _ in range(24):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": "1"
    }).json()
    if result["status"] == 1:
        token = result["request"]
        break

# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
    "email": "user@example.com",
    "password": "password",
    "g-recaptcha-response": token,
})

Đặc điểm chính

  • Không cần trình duyệt để gửi: Bạn có thể đưa mã thông báo trực tiếp vào yêu cầu HTTP POST
  • Tồn tại trong thời gian ngắn: Token hết hạn sau 60-120 giây — giải quyết và sử dụng ngay lập tức
  • Sử dụng một lần: Mỗi mã thông báo hoạt động một lần; giải quyết lại cho mỗi lần gửi biểu mẫu
  • Xác thực phía máy chủ: Trang đích gửi mã thông báo tới Google/Cloudflare/hCaptcha để xác minh

Nó hoạt động như thế nào

  1. Một trang thử thách được phục vụ (Cloudflare Challenge, JS Challenge)
  2. Một trình duyệt giải quyết được thách thức (có thể liên quan đến Turnstile trong nội bộ)
  3. Máy chủ đặt cookie phiên (<staging-session-cookie>)
  4. Tất cả các yêu cầu tiếp theo với cookie đó đều bỏ qua thử thách
  • Trang Cloudflare Challenge: cookie <staging-session-cookie>
  • Thử thách JS: Thử thách chỉ dành cho Cloudflare JavaScript
  • Một số thách thức của WAF: Tường lửa ứng dụng web khác nhau

Thực hiện

from selenium import webdriver
import requests
import time

# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")

# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10)  # Or use CaptchaAI token injection

# 2. Extract cookies from browser
cookies = driver.get_cookies()
<staging-session-cookie> = next(
    (c for c in cookies if c["name"] == "<staging-session-cookie>"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()

# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})

for cookie in cookies:
    session.cookies.set(cookie["name"], cookie["value"])

# All requests now pass the challenge
for page in range(1, 50):
    resp = session.get(f"https://example.com/api/data?page={page}")
    print(f"Page {page}: {resp.status_code}")

Đặc điểm chính

  • Cần có trình duyệt để giải quyết: Thử thách cần có môi trường trình duyệt hoàn chỉnh
  • Tồn tại lâu: Cookie tồn tại từ 30 phút đến 24 giờ
  • Có thể tái sử dụng: Một giải pháp cấp quyền truy cập vào nhiều yêu cầu
  • Giới hạn IP: Cookie được gắn với IP đã giải quyết được thử thách
  • Giới hạn UA: Tác nhân người dùng phải khớp với tác nhân được sử dụng trong quá trình giải

Khi nào nên sử dụng cái nào

Kịch bản Cách tiếp cận tại sao
Biểu mẫu đăng nhập bằng reCAPTCHA Mã thông báo Gửi mã thông báo với dữ liệu biểu mẫu
Quét một trang web được bảo vệ bởi Cloudflare bánh quy Một giải quyết, nhiều yêu cầu trang
Gửi biểu mẫu với Turnstile Mã thông báo Tiêm vào cf-turnstile-response
Truy cập API đằng sau Cloudflare bánh quy Tái sử dụng cookie cho tất cả lệnh gọi API
Gửi nhiều biểu mẫu Mã thông báo (mỗi lần) Mỗi biểu mẫu cần một mã thông báo mới
Quét hàng loạt cùng một tên miền bánh quy Giải quyết một lần, cạo cho đến khi cookie hết hạn

Phương pháp lai

Một số trang web sử dụng cả hai: trang Cloudflare Challenge (cookie) bảo vệ biểu mẫu có reCAPTCHA (mã thông báo).

# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")

# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)

# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")

# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
    "data": "value",
    "g-recaptcha-response": token,
})

Tóm tắt so sánh

tính năng Mã thông báo bánh quy
Giải quyết chi phí Mỗi lần gửi biểu mẫu Mỗi phiên (khấu hao)
Giải quyết thời gian 10-30 giây mỗi mã thông báo 10-30 giây một lần
Yêu cầu mỗi lần giải quyết 1 Nhiều (đến khi hết hạn)
tính linh hoạt của IP Mã thông báo hoạt động từ bất kỳ IP nào Cookie gắn liền với việc giải quyết IP
Trình duyệt để sử dụng Không cần thiết Không cần thiết (chỉ cần cookie)
Rủi ro hết hạn 60-120s 30 phút - 24 giờ

Câu hỏi thường gặp

Không. Cách tiếp cận phụ thuộc vào cách trang web xác thực. reCAPTCHA luôn sử dụng mã thông báo; Cloudflare Challenge luôn sử dụng cookie.

Cái nào rẻ hơn cho việc cạo khối lượng lớn?

Dựa trên cookie rẻ hơn nhiều khi có sẵn. Một giải pháp bao gồm hàng ngàn yêu cầu. Dựa trên mã thông báo yêu cầu giải quyết mỗi lần gửi biểu mẫu.

CaptchaAI có xử lý được cả hai không?

Vâng. CAPTCHA dựa trên mã thông báo trả về chuỗi mã thông báo. Đối với các trang Cloudflare Challenge, bạn có thể sử dụng bộ giải Turnstile để nhận mã thông báo cần thiết để hoàn thành thử thách, sau đó trích xuất cookie kết quả.


Giải CAPTCHA bằng CaptchaAI

Nhận khóa API của bạn tạicaptchaai.com.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.