Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти и решить капчу GeeTest v3 автоматически

Как распознать, решить обойти капчу GeeTest автоматически

Введение

Это руководство предназначено для разработчиков, которые работают с сайтами, защищёнными капчей GeeTest версии 3, и нуждаются в автоматизации её прохождения. В материале мы разберём технические особенности GeeTest V3, методы извлечения необходимых параметров и практические примеры интеграции с сервисом 2Captcha.

Необходимые инструменты:

  • Python 3.8 или выше
  • Библиотеки: twocaptcha, requests, asyncio
  • API-ключ от 2Captcha
  • Рабочий прокси (рекомендуется для стабильности)

1. Общие сведения о капче GeeTest V3

1.1. Описание технологии

GeeTest V3 — это система защиты от ботов, использующая интерактивные задачи (чаще всего слайдер-пазл) в сочетании с поведенческим анализом. Капча динамически генерирует параметры для каждой сессии, что усложняет автоматизацию без специализированных решений.

1.2. Ключевые параметры GeeTest V3

Параметр Описание Статус
gt Публичный ключ сайта, статическое значение Обязательно
challenge Динамическая строка вызова, меняется для каждой капчи Обязательно

1.3. Типы задач в API 2Captcha

Для решения капч GeeTest V3 сервис поддерживает два типа задач:

  1. GeeTestTaskProxyless — использует внутренние прокси 2Captcha, не требует настройки прокси с вашей стороны
  2. GeeTestTask — требует указания собственного прокси в параметрах задачи

2. Подготовка окружения

2.1. Установка зависимостей

Установите необходимые пакеты через pip:

bash Copy
pip3 install twocaptcha requests

2.2. Получение API-ключа

  1. Зарегистрируйтесь на 2captcha.com
  2. Перейдите в настройки аккаунта
  3. Скопируйте API-ключ

Рекомендуется хранить ключ в переменной окружения для безопасности:

bash Copy
# Linux/macOS
export APIKEY_2CAPTCHA=ваш_ключ_здесь

# Windows
set APIKEY_2CAPTCHA=ваш_ключ_здесь

3. Анализ страницы и извлечение параметров

3.1. Определение наличия капчи

GeeTest V3 обычно отображается как интерактивный виджет со слайдером. Визуально его можно распознать по логотипу GeeTest в нижней части.

3.2. Поиск параметров в исходном коде

Для извлечения gt и challenge:

  1. Откройте DevTools в браузере (клавиша F12)
  2. Перейдите на вкладку Elements
  3. Найдите вызов функции initGeetest в коде страницы

Пример JavaScript-вызова:

javascript Copy
initGeetest({
    gt: "81388ea1fc187e0c335c0a8907ff2625",
    challenge: "2e2f0f65240058b683cb6ea21c303eea6n",
    // другие параметры
});

Значения gt и challenge из этого вызова необходимо передать в запросе к API.

3.3. Анализ сетевых запросов

  1. В DevTools перейдите на вкладку Network
  2. Обновите страницу с капчей
  3. Отфильтруйте запросы по geetest

Ключевые запросы:

  • GET https://api.geetest.com/get.php — получение параметров капчи
  • POST запрос с решением капчи на целевой сайт

3.4. Структура ответа сервера

После решения капчи сервис возвращает три параметра:

json Copy
{
  "geetest_challenge": "abc123...",
  "geetest_validate": "def456...",
  "geetest_seccode": "ghi789..."
}

Эти значения необходимо передать на целевой сайт для верификации.


4. Реализация решения на Python

4.1. Полный пример кода с asyncio

python Copy
import asyncio
import os
import sys
import requests

from twocaptcha import AsyncTwoCaptcha

# API-ключ из переменной окружения или напрямую
api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

# Инициализация решателя с настройками таймаутов
solver = AsyncTwoCaptcha(
    api_key,
    defaultTimeout=300,      # Общий таймаут 5 минут
    pollingInterval=10,      # Интервал опроса результата 10 секунд
    extendedResponse=True    # Возвращать расширенный ответ
)

"""
Важно: параметр 'challenge' динамический. Для каждого запроса к API
необходимо получать новое значение с целевого сайта.
"""

async def solve_captcha():
    # Получение динамического challenge (синхронный запрос для простоты)
    resp = requests.get("https://api.2captcha.com/api/v1/captcha-demo/gee-test/init-params")
    challenge = resp.json()['challenge']

    try:
        # Отправка задачи на решение
        return await solver.geetest(
            gt='81388ea1fc187e0c335c0a8907ff2625',  # Статический gt сайта
            apiServer='http://api.geetest.com',      # Домен API (опционально)
            challenge=challenge,                      # Динамический challenge
            url='https://example.com',                # URL страницы с капчей
            # Прокси (раскомментируйте при необходимости):
            # proxy={
            #     'type': 'HTTPS',
            #     'uri': 'login:password@IP_address:PORT'
            # }
        )
    except Exception as e:
        print(f"Ошибка при решении капчи: {e}")
        sys.exit(1)

if __name__ == '__main__':
    result = asyncio.run(solve_captcha())
    print('Решение получено:', result)

4.2. Пояснения к коду

Конфигурация решателя:

  • defaultTimeout=300 — максимальное время ожидания решения
  • pollingInterval=10 — интервал между запросами статуса задачи
  • extendedResponse=True — возвращает дополнительные метаданные ответа

Получение challenge:

  • Параметр challenge динамический, его необходимо получать с целевого сайта перед каждым запросом
  • В примере используется синхронный запрос для простоты, в продакшене можно реализовать асинхронно

Метод geetest():

  • Принимает обязательные параметры: gt, challenge, url
  • Опциональный параметр apiServer нужен для некоторых сайтов
  • Прокси повышает вероятность успешного решения

Обработка исключений:

  • Блок try/except перехватывает ошибки сети или API
  • При ошибке скрипт выводит сообщение и завершается с кодом 1

5. Альтернативные методы и дополнительные настройки

5.1. Синхронная версия библиотеки

Если вы не используете asyncio, можно применить синхронный клиент:

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha(api_key)

result = solver.geetest(
    gt='81388ea1fc187e0c335c0a8907ff2625',
    challenge='2e2f0f65240058b683cb6ea21c303eea6n',
    url='https://example.com'
)

5.2. Настройка прокси

Использование прокси повышает устойчивость к блокировкам:

python Copy
proxy_config = {
    'type': 'HTTPS',
    'uri': 'login:password@1.2.3.4:8080'
}

result = await solver.geetest(
    gt='81388ea1fc187e0c335c0a8907ff2625',
    challenge='2e2f0f65240058b683cb6ea21c303eea6n',
    url='https://example.com',
    proxy=proxy_config
)

Рекомендации по работе с прокси:

  • Используйте резидентные прокси соответствующего региона
  • Ротируйте прокси при множественных запросах
  • Проверяйте работоспособность прокси перед запуском

5.3. Обработка ошибок и повторные попытки

python Copy
import time

max_retries = 3
for attempt in range(max_retries):
    try:
        result = await solver.geetest(...)
        break
    except Exception as e:
        print(f"Попытка {attempt + 1} не удалась: {e}")
        time.sleep(5)
else:
    print("Все попытки исчерпаны")

5.4. Использование полученного решения

После получения решения капчи его необходимо отправить на целевой сайт. Обычно сайт отправляет решённые данные в запросе, который вы можете перехватить в инструментах разработчика.

Вам нужно найти запрос, который содержит данные решённой капчи, и воспроизвести его, подставив полученные параметры:

  • geetest_challenge
  • geetest_validate
  • geetest_seccode

6. Типичные ошибки и способы их устранения

Ошибка Возможная причина Решение
ERROR_WRONG_USER_KEY Неверный API-ключ Проверьте ключ в настройках аккаунта
ERROR_ZERO_BALANCE Недостаточно средств Пополните баланс на 2captcha.com
ERROR_CAPTCHA_UNSOLVABLE Капча не распознана Проверьте корректность параметров gt и challenge
ERROR_PROXY_CONNECT_REFUSED Прокси недоступен Проверьте данные прокси и его доступность
challenge expired Устаревший динамический параметр Получайте новый challenge перед каждым запросом
invalid gt Неверный публичный ключ Извлеките актуальный gt из исходного кода страницы
timeout Превышено время ожидания Увеличьте defaultTimeout или проверьте статус сервиса

6.1. Отладка запросов

Для анализа проблем добавьте вывод промежуточных данных:

python Copy
print(f"gt: {gt_value}")
print(f"challenge: {challenge_value}")
print(f"Ответ от api.2captcha.com: {result}")

7. Дополнительные ресурсы

Примеры кода на других языках:


8. Контрольный список перед запуском

  • Установлены пакеты twocaptcha и requests
  • API-ключ указан корректно и имеет положительный баланс
  • Параметр gt извлечён из исходного кода целевого сайта
  • Параметр challenge получен динамически перед отправкой задачи
  • Указан корректный websiteURL — страница, где отображается капча
  • При использовании прокси проверены его данные и доступность
  • Настроены адекватные таймауты (defaultTimeout, pollingInterval)
  • Скрипт протестирован в режиме отладки перед запуском в продакшене
  • Реализована обработка ошибок и повторные попытки

Заключение

Автоматизация прохождения капчи GeeTest V3 требует понимания динамической природы параметров и корректной интеграции с сервисом решения. Представленный в руководстве подход на основе Python и библиотеки twocaptcha обеспечивает надёжное и масштабируемое решение.

Ключевые рекомендации:

  • Всегда получайте актуальный параметр challenge перед отправкой задачи
  • Используйте прокси для повышения успешности решения
  • Настраивайте адекватные таймауты под вашу нагрузку
  • Реализуйте механизм повторных попыток для обработки временных сбоев

Интеграция с 2Captcha позволяет сосредоточиться на логике вашего приложения, делегируя решение капчи специализированному сервису. При соблюдении рекомендаций по настройке окружения, извлечению параметров и обработке ошибок вы сможете стабильно автоматизировать взаимодействие с защищёнными сайтами.