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
- Trích xuất khóa trang web từ trang
- Gửi khóa trang + URL trang tới CaptchaAI
- Nhận chuỗi mã thông báo
- Đưa mã thông báo vào trường biểu mẫu ẩn
- 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=1cho 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
Giải quyết dựa trên cookie
Nó hoạt động như thế nào
- Một trang thử thách được phục vụ (Cloudflare Challenge, JS Challenge)
- 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ộ)
- Máy chủ đặt cookie phiên (
<staging-session-cookie>) - Tất cả các yêu cầu tiếp theo với cookie đó đều bỏ qua thử thách
CAPTCHA nào sử dụng cookie
- 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
Tôi có thể chuyển đổi CAPTCHA dựa trên mã thông báo sang dựa trên cookie không?
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
- Hướng dẫn sử dụng cookie Cloudflare Challenge
- Trích xuất thông số reCAPTCHA
- Cloudflare Turnstile so với hCaptcha và reCAPTCHA