
Anh Tuan
Data Science Expert

Khi tôi bắt đầu làm việc với reCAPTCHA, tôi nhận thấy nó là một con dao hai lưỡi. Một mặt, nó rất hiệu quả trong việc lọc bỏ các bot, nhưng mặt khác, nó có thể là một trở ngại đối với các dự án tự động hợp pháp. Vì vậy, trong bài viết này, tôi sẽ hướng dẫn bạn cách giải quyết reCAPTCHA bằng cách sử dụng ba ngôn ngữ lập trình mạnh mẽ: Python, Java và C++. Mỗi ngôn ngữ mang lại lợi thế riêng trong việc xử lý các thách thức reCAPTCHA, mang đến sự linh hoạt tùy thuộc vào nhu cầu của dự án của bạn. Chúng ta sẽ bắt đầu bằng cách hiểu CAPTCHA và reCAPTCHA là gì, cũng như tầm quan trọng của chúng trong bảo mật web
Hãy bắt đầu với khái niệm cơ bản nhất: CAPTCHA là gì, hay "Kiểm tra Turing công khai tự động hoàn toàn để phân biệt Máy tính và Con người", là một phương pháp phổ biến để phân biệt người dùng là người với bot. Nó giúp các trang web tránh các cuộc tấn công tự động, spam hoặc khai thác bằng cách yêu cầu người dùng giải quyết các nhiệm vụ dễ dàng đối với con người nhưng khó đối với máy móc. Điều này có thể là nhận dạng văn bản bị bóp méo, chọn hình ảnh có các đối tượng cụ thể hoặc giải quyết các câu đố logic.
reCAPTCHA là một dịch vụ do Google phát triển giúp bảo vệ các trang web khỏi spam và lạm dụng bằng cách phân biệt người dùng là người với bot. Nó đã phát triển theo thời gian thành các phiên bản khác nhau, mỗi phiên bản cung cấp các khả năng cụ thể.
reCAPTCHA v2: Đây là hình thức phổ biến nhất, nơi người dùng giải quyết các nhiệm vụ như nhấp vào hộp kiểm ("Tôi không phải là robot") hoặc chọn hình ảnh. Nó thân thiện với người dùng hơn nhưng vẫn có thể hiển thị một thử thách dựa trên các yếu tố rủi ro.
reCAPTCHA v3: Phiên bản này chạy ẩn danh trong nền mà không làm gián đoạn người dùng. Nó gán điểm rủi ro (0,0 đến 1,0) dựa trên hành vi của người dùng. Người dùng có nguy cơ thấp sẽ vượt qua mà không cần xem thử thách, trong khi hoạt động đáng ngờ có thể kích hoạt các bước xác minh.
reCAPTCHA Enterprise: Được thiết kế để bảo vệ ở cấp độ doanh nghiệp, phiên bản này cung cấp các tính năng bảo mật nâng cao cho các doanh nghiệp lớn. Nó cung cấp phân tích nâng cao, mô hình học máy và đánh giá dựa trên rủi ro được điều chỉnh cho các giao dịch có nguy cơ cao, với khả năng tùy chỉnh cao hơn để đáp ứng nhu cầu bảo mật của doanh nghiệp.
Mỗi phiên bản đều nhằm mục đích cung cấp bảo mật tối ưu đồng thời giảm thiểu ma sát cho người dùng hợp pháp, thích ứng với sự tinh vi ngày càng tăng của bot và các cuộc tấn công.
- reCAPTCHA v2 Demo
Xem demo reCAPTCHA v2- reCAPTCHA v3 Demo
Xem demo reCAPTCHA v3- reCAPTCHA Enterprise Demo
Tìm hiểu thêm về reCAPTCHA Enterprise
Mỗi ngôn ngữ đều cung cấp điểm mạnh độc đáo khi xử lý các thách thức reCAPTCHA:
Python được biết đến với sự đơn giản và bộ thư viện lớn giúp tự động hóa web và thu thập dữ liệu. Sử dụng các thư viện như Selenium và Playwright, bạn có thể dễ dàng tự động hóa các tác vụ trình duyệt và bỏ qua CAPTCHA với các công cụ phù hợp.
Java rất phù hợp cho các ứng dụng ở cấp độ doanh nghiệp và các dự án đa nền tảng. Khả năng đa luồng và các khung như Selenium WebDriver cho phép xử lý reCAPTCHA một cách mượt mà trong các hệ thống có khả năng mở rộng.
C++ mang lại lợi thế về hiệu suất, làm cho nó lý tưởng cho các hệ thống yêu cầu tốc độ và độ trễ thấp. Mặc dù ít được sử dụng cho tự động hóa, nhưng nó có thể được tích hợp với các công cụ khác để giải quyết các thách thức reCAPTCHA trong môi trường hiệu suất cao.
Khi bạn tiến xa hơn, bạn sẽ nhận thấy rằng việc giải quyết các thách thức reCAPTCHA có thể trở nên khó khăn do các thuật toán và sự phức tạp đang phát triển. Đó là lúc CapSolver xuất hiện. Đó là một dịch vụ chuyên biệt tự động hóa quy trình giải quyết reCAPTCHA với độ chính xác cao, xử lý nhiều loại CAPTCHA, bao gồm reCAPTCHA v2, reCAPTCHA v3 và nhiều hơn nữa. Bằng cách tích hợp CapSolver vào dự án Python, Java hoặc C++ của bạn, bạn có thể chuyển giao sự phức tạp của việc giải quyết CAPTCHA cho một dịch vụ chuyên dụng, cho phép các tập lệnh của bạn chạy trơn tru và hiệu quả.
Tiếp theo, chúng ta sẽ đi qua mã mẫu cho mỗi ngôn ngữ và cách bạn có thể nhanh chóng tích hợp CapSolver vào dự án của mình ...
Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu; CapSolver: WEBS. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, Không giới hạn
Bước 1. Nhận khóa trang
Đối với cả V2 và V3, bạn có thể tìm kiếm yêu cầu /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf trong nhật ký yêu cầu trình duyệt, trong đó k= là giá trị khóa chúng ta cần
Bước 2. Phân biệt V2 và V3
V2 và V3 có phương thức xử lý khác nhau. V2 yêu cầu nhận dạng hình ảnh để chọn câu trả lời, trong khi V3 tương đối không gây phiền nhiễu; Tuy nhiên, V3 yêu cầu cung cấp một Hành động trong quá trình xác minh. Dựa trên giá trị khóa đã nhận được trước đó, hãy tìm kiếm trang phản hồi, và bạn sẽ tìm thấy giá trị Hành động trên trang

Bước 3. Gọi dịch vụ CapSolver
/recaptcha/api2/reload, thường cần một yêu cầu /recaptcha/api2/userverify để nhận được mã thông hành;/recaptcha/api2/reload có thể nhận được mã thông hành trực tiếp# pip install requests
import requests
import time
# TODO: đặt cấu hình của bạn
api_key = "YOUR_API_KEY" # khóa api của bạn của capsolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # khóa trang của trang web mục tiêu của bạn
site_url = "https://www.google.com/recaptcha/api2/demo" # url trang của trang web mục tiêu của bạn
# site_key = "6LelzS8UAAAAAGSL60ADV5rcEtK0x0lRsHmrtm62"
# site_url = "https://mybaragar.com/index.cfm?event=page.SchoolLocatorPublic&DistrictCode=BC45"
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Tạo nhiệm vụ thất bại:", res.text)
return
print(f"Nhận được taskId: {task_id} / Nhận kết quả...")
while True:
time.sleep(3) # trì hoãn
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Giải quyết thất bại! phản hồi:", res.text)
return
token = capsolver()
print(token)
# pip install requests
import requests
import time
# TODO: đặt cấu hình của bạn
api_key = "YOUR_API_KEY" # khóa api của bạn của capsolver
site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf" # khóa trang của trang web mục tiêu của bạn
site_url = "https://antcpt.com/score_detector/" # url trang của trang web mục tiêu của bạn
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV3TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url,
"pageAction": "homepage",
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Tạo nhiệm vụ thất bại:", res.text)
return
print(f"Nhận được taskId: {task_id} / Nhận kết quả...")
while True:
time.sleep(1) # trì hoãn
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Giải quyết thất bại! phản hồi:", res.text)
return
# xác minh điểm số
def score_detector(token):
headers = {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "fr-CH,fr;q=0.9",
"content-type": "application/json",
"origin": "https://antcpt.com",
"priority": "u=1, i",
"referer": "https://antcpt.com/score_detector/",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"x-requested-with": "XMLHttpRequest"
}
url = "https://antcpt.com/score_detector/verify.php"
data = {
"g-recaptcha-response": token
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
print(response.json())
print(response)
token = capsolver()
print(token)
...
...
{
'success': True,
'challenge_ts': '2024-07-19T10:50:56Z',
'hostname': 'antcpt.com',
'score': 0.7,
'action': 'homepage'
}
Trước khi chúng ta đi sâu vào mã, hãy đảm bảo rằng bạn đã cài đặt các điều kiện tiên quyết sau để theo dõi thành công hướng dẫn này:
Sau khi bạn đã đáp ứng các điều kiện tiên quyết này, bạn đã sẵn sàng thiết lập môi trường của mình và bắt đầu giải quyết các thách thức reCAPTCHA bằng JavaScript và CapSolver.
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-, trong đó giá trị sau k= là Khóa trang chúng ta cần. Hoặc bạn có thể tìm thấy tất cả các tham số để giải quyết recapctha thông qua phần mở rộng CapSolverpip install requests
import requests
import time
from DrissionPage import ChromiumPage
# Tạo một phiên bản của ChromiumPage
page = ChromiumPage()
# Truy cập trang ví dụ kích hoạt reCAPTCHA
page.get("https://www.google.com/recaptcha/api2/demo")
# TODO: Đặt cấu hình của bạn
api_key = "khóa api của bạn của capsolver" # Khóa API CapSolver của bạn
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # Khóa trang của trang web mục tiêu của bạn
site_url = "https://www.google.com/recaptcha/api2/demo" # URL trang của trang web mục tiêu của bạn
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
# Gửi yêu cầu đến CapSolver để tạo một nhiệm vụ
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Tạo nhiệm vụ thất bại:", res.text)
return
print(f"Nhận được taskId: {task_id} / Nhận kết quả...")
while True:
time.sleep(3) # Trì hoãn
payload = {"clientKey": api_key, "taskId": task_id}
# Truy vấn kết quả nhiệm vụ
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Giải quyết thất bại! phản hồi:", res.text)
return
def check():
# Nhận giải pháp reCAPTCHA
token = capsolver()
# Đặt giá trị phản hồi reCAPTCHA
page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
# Gọi hàm gọi lại thành công
page.run_js(f'onSuccess("{token}")')
# Gửi biểu mẫu
page.ele('x://input[@id="recaptcha-demo-submit"]').click()
if __name__ == '__main__':
check()
Trước khi chúng ta bắt đầu, hãy đảm bảo rằng bạn đã cài đặt các thư viện sau:
Bạn có thể cài đặt chúng bằng vcpkg:
vcpkg install cpr jsoncpp
Tạo một dự án C++ mới và bao gồm các tiêu đề cần thiết cho cpr và jsoncpp.
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
Chúng tôi sẽ định nghĩa hai hàm chính: createTask và getTaskResult.
Đây là mã hoàn chỉnh:
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
std::string createTask(const std::string& apiKey, const std::string& websiteURL, const std::string& websiteKey) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["task"]["type"] = "ReCaptchaV2Task";
requestBody["task"]["websiteURL"] = websiteURL;
requestBody["task"]["websiteKey"] = websiteKey;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/createTask"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
std::string taskId;
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["errorId"].asInt() == 0) {
taskId = responseBody["taskId"].asString();
} else {
std::cerr << "Lỗi: " << responseBody["errorCode"].asString() << std::endl;
}
} else {
std::cerr << "Phân tích cú pháp phản hồi thất bại: " << errs << std::endl;
}
return taskId;
}
std::string getTaskResult(const std::string& apiKey, const std::string& taskId) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["taskId"] = taskId;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
while (true) {
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/getTaskResult"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["status"].asString() == "ready") {
return responseBody["solution"]["gRecaptchaResponse"].asString();
} else if (responseBody["status"].asString() == "processing") {
std::cout << "Nhiệm vụ vẫn đang xử lý, chờ 5 giây..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
} else {
std::cerr << "Lỗi: " << responseBody["errorCode"].asString() << std::endl;
break;
}
} else {
std::cerr << "Phân tích cú pháp phản hồi thất bại: " << errs << std::endl;
break;
}
}
return "";
}
int main() {
std::string apiKey = "YOUR_API_KEY";
std::string websiteURL = "https://example.com";
std::string websiteKey = "SITE_KEY";
std::string taskId = createTask(apiKey, websiteURL, websiteKey);
if (!taskId.empty()) {
std::cout << "Nhiệm vụ được tạo thành công. ID nhiệm vụ: " << taskId << std::endl;
std::string recaptchaResponse = getTaskResult(apiKey, taskId);
std::cout << "Phản hồi reCAPTCHA: " << recaptchaResponse << std::endl;
} else {
std::cerr << "Tạo nhiệm vụ thất bại." << std::endl;
}
return 0;
}
Khi kết thúc, tôi có thể tự tin nói rằng việc tích hợp CapSolver vào các dự án của tôi đã giúp xử lý các thách thức reCAPTCHA dễ dàng hơn rất nhiều. Cho dù đó là V2 hay V3, quy trình đều đơn giản và đã giúp tôi tiết kiệm rất nhiều thời gian. Nếu bạn đang phải đối mặt với những thách thức tương tự, tôi khuyên bạn nên thử CapSolver - nó đã thay đổi cuộc chơi đối với tôi.
Đang gặp phải lỗi "reCAPTCHA Invalid Site Key" hoặc "token reCAPTCHA không hợp lệ"? Khám phá các nguyên nhân phổ biến, các giải pháp từng bước và mẹo khắc phục sự cố để giải quyết các vấn đề xác minh reCAPTCHA thất bại. Học cách sửa lỗi xác minh reCAPTCHA, vui lòng thử lại.

Học cách giải reCAPTCHA v2 bằng Python và API. Hướng dẫn toàn diện này bao gồm các phương pháp Proxy và không dùng Proxy cùng với mã nguồn có thể triển khai cho tự động hóa.
