Решение reCAPTCHA с использованием Python, Java и C++

Nikolai Smirnov
Software Development Lead
25-Oct-2024

Когда я только начал работать с reCAPTCHA, я обнаружил, что это палка о двух концах. С одной стороны, это отлично подходит для фильтрации ботов, но с другой стороны, это может быть довольно серьезным препятствием для законных проектов автоматизации. Поэтому в этой статье я проведу вас через решение reCAPTCHA с помощью трех мощных языков программирования: Python, Java и C++. Каждый язык приносит свои преимущества в обработку задач reCAPTCHA, предлагая гибкость в зависимости от потребностей вашего проекта. Мы начнем с понимания того, что такое CAPTCHA и reCAPTCHA, а также их важности в веб-безопасности.
Что такое CAPTCHA?
Начнем с самого основного понятия: что такое CAPTCHA, или "Completely Automated Public Turing test to tell Computers and Humans Apart" ("Полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей"), который является распространенным методом для различения пользователей-людей и ботов. Он помогает веб-сайтам избегать автоматизированных атак, спама или эксплуатации, требуя от пользователей решения задач, которые легко решаются людьми, но трудны для машин. Это может быть распознавание искаженного текста, выбор изображений с определенными объектами или решение логических задач.
Что такое reCAPTCHA?
reCAPTCHA - это служба, разработанная Google, которая помогает защитить веб-сайты от спама и злоупотреблений, различая пользователей-людей и ботов. Она развивалась с течением времени, превращаясь в различные версии, каждая из которых предлагает свои специфические возможности.
-
reCAPTCHA v2: Это наиболее распространенная форма, где пользователи решают задачи, например, нажимают на флажки ("Я не робот") или выбирают изображения. Она более удобна для пользователей, но все же может показывать задачу на основе факторов риска.
-
reCAPTCHA v3: Эта версия работает невидимо в фоновом режиме, не прерывая пользователей. Она присваивает баллы риска (от 0,0 до 1,0) на основе поведения пользователя. Пользователи с низким риском проходят без задач, а подозрительная активность может вызвать шаги проверки.
-
reCAPTCHA Enterprise: Разработанная для защиты на уровне предприятия, эта версия предлагает расширенные функции безопасности для крупных компаний. Она обеспечивает расширенный анализ, модели машинного обучения и оценку риска, адаптированные к транзакциям с высоким риском, с большей настройкой для удовлетворения потребностей безопасности бизнеса.
Каждая из этих версий направлена на обеспечение оптимальной безопасности при минимизации трения для законных пользователей, адаптируясь к растущей сложности ботов и атак.
- reCAPTCHA v2 Demo
Посмотреть демонстрацию reCAPTCHA v2- reCAPTCHA v3 Demo
Посмотреть демонстрацию reCAPTCHA v3- reCAPTCHA Enterprise Demo
Узнать больше о reCAPTCHA Enterprise
Решение reCAPTCHA в Python, Java и C++
Каждый язык предлагает уникальные преимущества при работе с задачами reCAPTCHA:
-
Python известен своей простотой и большим набором библиотек, которые облегчают веб-автоматизацию и парсинг данных. Используя такие библиотеки, как Selenium и Playwright, вы можете легко автоматизировать задачи браузера и обойти CAPTCHA с помощью подходящих инструментов.
-
Java отлично подходит для приложений уровня предприятия и кроссплатформенных проектов. Его возможности многопоточности и такие фреймворки, как Selenium WebDriver, позволяют плавно обрабатывать reCAPTCHA в масштабируемых системах.
-
C++ предлагает преимущества производительности, что делает его идеальным для систем, которые требуют скорости и низкой задержки. Хотя он реже используется для автоматизации, его можно интегрировать с другими инструментами для решения задач reCAPTCHA в средах с высокой производительностью.
Представляем CapSolver
По мере продвижения вы заметите, что решение задач reCAPTCHA может стать сложным из-за эволюционирующих алгоритмов и сложности. Именно здесь появляется CapSolver. Это специализированная служба, которая автоматизирует процесс решения reCAPTCHA с высокой точностью, обрабатывая множество типов CAPTCHA, включая reCAPTCHA v2, reCAPTCHA v3 и многие другие. Интегрируя CapSolver в свой проект Python, Java или C++, вы можете снять с себя сложность решения CAPTCHA, передав ее на специализированную службу, что позволит вашим скриптам работать плавно и эффективно.
Далее мы рассмотрим пример кода для каждого языка и то, как вы можете быстро интегрировать CapSolver в свой проект...
Бонусный код
Получите Бонусный код для лучших решений CAPTCHA; CapSolver: WEBS. После его активации вы получите дополнительный бонус в размере 5% после каждой пополнения баланса, без ограничений
Как решить reCAPTCHA с помощью Python
Предварительные условия
Шаг 1. Получение ключа сайта
Как для V2, так и для V3, вы можете найти запрос /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf в журналах запросов браузера, где k= - это значение ключа, которое нам нужно
Шаг 2. Различение между V2 и V3
V2 и V3 имеют разные методы обработки. V2 требует распознавания изображений для выбора ответов, в то время как V3 относительно ненавязчива; Однако, V3 требует предоставления Действия во время проверки. На основе ранее полученного значения ключа, найдите страницу ответа, и вы найдете значение Действия на странице

Шаг 3. Вызов сервиса CapSolver
Различение версий reCAPTCHA
- В журналах запросов браузера вы можете видеть, что для V2, после запроса
/recaptcha/api2/reload, обычно требуется запрос/recaptcha/api2/userverify, чтобы получить токен перехода; - Для V3 запрос
/recaptcha/api2/reloadможет получить токен перехода напрямую
Полный пример вызова API CapSolver
- Python reCAPTCHA V2
python
# pip install requests
import requests
import time
# TODO: set your config
api_key = "YOUR_API_KEY" # your api key of capsolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # site key of your target site
site_url = "https://www.google.com/recaptcha/api2/demo" # page url of your target site
# 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("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(3) # delay
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("Solve failed! response:", res.text)
return
token = capsolver()
print(token)
- Python reCAPTCHA V3
python
# pip install requests
import requests
import time
# TODO: set your config
api_key = "YOUR_API_KEY" # your api key of capsolver
site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf" # site key of your target site
site_url = "https://antcpt.com/score_detector/" # page url of your target site
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("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(1) # delay
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("Solve failed! response:", res.text)
return
# verify score
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'
}
Как решить reCAPTCHA с помощью Java
Предварительные условия
Прежде чем мы погрузимся в код, необходимо убедиться, что у вас есть следующие предварительные условия для успешного прохождения этого урока:
- Node.js и npm: Мы будем использовать Node.js, среду выполнения JavaScript, вместе с npm (Node Package Manager) для управления зависимостями нашего проекта. Если у вас не установлен Node.js, вы можете загрузить его с официального веб-сайта Node.js.
- Ключ API CapSolver: Для эффективной решения задач reCAPTCHA вам понадобится доступ к такой службе, как CapSolver, которая специализируется на программном решении задач CAPTCHA. Убедитесь, что вы зарегистрировались и получили ключ API от CapSolver для его интеграции в ваше решение.
Как только вы выполнили эти предварительные условия, вы готовы настроить свою среду и начать решать задачи reCAPTCHA с помощью JavaScript и CapSolver.
Шаг 1: Получение ключа сайта
- В журналах запросов браузера найдите запрос
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-, где значение послеk=- это ключ сайта, который нам нужен. Или вы можете найти все параметры для решения reCAPTCHA с помощью расширения CapSolver - URL - это адрес страницы, которая запускает reCAPTCHA V2.
Шаг 2: Установка библиотеки запросов
bash
pip install requests
Шаг 3: Пример кода
python
import requests
import time
from DrissionPage import ChromiumPage
# Create an instance of ChromiumPage
page = ChromiumPage()
# Access the example page that triggers reCAPTCHA
page.get("https://www.google.com/recaptcha/api2/demo")
# TODO: Set your configuration
api_key = "your api key of capsolver" # Your CapSolver API key
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # Site key of your target site
site_url = "https://www.google.com/recaptcha/api2/demo" # Page URL of your target site
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
# Send a request to CapSolver to create a task
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(3) # Delay
payload = {"clientKey": api_key, "taskId": task_id}
# Query task results
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("Solve failed! response:", res.text)
return
def check():
# Get the reCAPTCHA solution
token = capsolver()
# Set the reCAPTCHA response value
page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
# Call the success callback function
page.run_js(f'onSuccess("{token}")')
# Submit the form
page.ele('x://input[@id="recaptcha-demo-submit"]').click()
if __name__ == '__main__':
check()
Как решить reCAPTCHA с помощью C++
Предварительные условия
Прежде чем начать, убедитесь, что у вас установлены следующие библиотеки:
- cpr: Библиотека HTTP для C++.
- jsoncpp: Библиотека C++ для разбора JSON.
Вы можете установить их с помощью vcpkg:
bash
vcpkg install cpr jsoncpp
Шаг 1: Настройка проекта
Создайте новый проект C++ и включите необходимые заголовки для cpr и jsoncpp.
cpp
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
Шаг 2: Определение функций для создания и получения результатов задач
Мы определим две основные функции: createTask и getTaskResult.
- createTask: Эта функция создает задачу reCAPTCHA.
- getTaskResult: Эта функция получает результат созданной задачи.
Вот полный код:
cpp
#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 << "Error: " << responseBody["errorCode"].asString() << std::endl;
}
} else {
std::cerr << "Failed to parse response: " << 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 << "Task is still processing, waiting for 5 seconds..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
} else {
std::cerr << "Error: " << responseBody["errorCode"].asString() << std::endl;
break;
}
} else {
std::cerr << "Failed to parse response: " << 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 << "Task created successfully. Task ID: " << taskId << std::endl;
std::string recaptchaResponse = getTaskResult(apiKey, taskId);
std::cout << "reCAPTCHA Response: " << recaptchaResponse << std::endl;
} else {
std::cerr << "Failed to create task." << std::endl;
}
return 0;
}
Заключительные мысли
Подводя итоги, могу с уверенностью сказать, что интеграция CapSolver в мои проекты значительно упростила процесс решения задач reCAPTCHA. Независимо от того, V2 или V3, процесс прост и сэкономил мне массу времени. Если вы сталкиваетесь с аналогичными проблемами, я настоятельно рекомендую попробовать CapSolver - для меня это было настоящим прорывом.
Дисклеймер о соблюдении: Информация, представленная в этом блоге, предназначена только для справочных целей. CapSolver обязуется соблюдать все применимые законы и нормы. Использование сети CapSolver для незаконной, мошеннической или злоупотребляющей деятельности строго запрещено и будет расследовано. Наши решения для распознавания капчи улучшают пользовательский опыт, обеспечивая 100% соблюдение при помощи в решении трудностей с капчей в процессе сбора общедоступных данных. Мы призываем к ответственному использованию наших услуг. Для получения дополнительной информации, пожалуйста, посетите наши Условия обслуживания и Политику конфиденциальности.
Ещеe

Что является лучшим решателем reCAPTCHA v2 и v3 при веб-скрапинге в 2025 году
В 2025 году, с повышением сложности антибот-систем, поиск надежных решателей reCAPTCHA стал критическим для успешного извлечения данных.

Nikolai Smirnov
17-Jan-2025

Решение reCAPTCHA с помощью AI-распознавания в 2025 году
Исследуйте, как ИИ преобразует процесс решения reCAPTCHA, решения CapSolver и меняющийся ландшафт безопасности CAPTCHA в 2025 году.

Nikolai Smirnov
11-Nov-2024

Решение reCAPTCHA с использованием Python, Java и C++
Как успешно решать reCAPTCHA с помощью трех мощных языков программирования: Python, Java и C++ в одном блоге? Давай!

Nikolai Smirnov
25-Oct-2024

Как решить reCAPTCHA v2 с помощью Rust
Узнайте, как решать reCaptcha v2 с помощью Rust и API Capsolver. Это руководство охватывает как методы с прокси, так и без прокси, предоставляя пошаговые инструкции и примеры кода для интеграции решения reCaptcha v2 в ваши приложения Rust.

Nikolai Smirnov
17-Oct-2024

Руководство по решению reCAPTCHA v3 с высокими баллами на Python
Это руководство проведет вас через эффективные стратегии и приемы Python для решения reCAPTCHA v3 с высокими баллами, гарантируя бесперебойную работу ваших задач автоматизации.

Nikolai Smirnov
17-Sep-2024

Как интегрировать решения reCAPTCHA v2 в Python для извлечения данных
Узнайте, как интегрировать решения reCAPTCHA v2 в Python для беспроблемного извлечения данных. Изучите версии reCAPTCHA, разберитесь в извлечении данных и следуйте простому примеру с использованием Capsolver для автоматизации решения задач reCAPTCHA v2.

Nikolai Smirnov
10-Sep-2024


