Как обойти Click Captcha
Введение
Click Captcha (также известная как координатная капча) — это тип проверки, где пользователю предлагается кликнуть по изображению в соответствии с инструкцией: «Нажмите на зелёное яблоко», «Выберите все светофоры» или «Кликните в указанном порядке». Такие капчи используются на множестве сайтов для защиты от ботов, но создают сложности при автоматизации.
В этом руководстве мы разберём, как автоматически решать Click Captcha с помощью нашего сервиса, используя метод координат. Вы узнаете:
- Как работает координатная капча
- Какие параметры нужны для отправки задачи
- Как интегрировать решение в свой скрипт на Python
- Как обрабатывать координаты ответа и эмулировать клики
- Какие ошибки могут возникнуть и как их исправить
Что такое Click Captcha
| Характеристика | Описание |
|---|---|
| Тип задачи | Клик по определённым точкам на изображении |
| Входные данные | Изображение капчи + текстовая/визуальная инструкция |
| Результат решения | Массив координат x=...,y=... для кликов |
| Сложность | Средняя — требуется точное позиционирование курсора |
Click Captcha визуально похожа на reCAPTCHA V2, но отличается механикой: вместо выбора объектов из сетки здесь нужно кликнуть по конкретным пикселям на одном изображении.
Подготовка: обязательные параметры
| Параметр | Обязателен | Описание |
|---|---|---|
| type | Да | Тип задачи: CoordinatesTask |
| body | Да | Изображение капчи в base64 или путь к файлу |
| imgInstructions | Нет | Изображение с визуальной подсказкой (опционально) |
| comment | Нет | Текстовая инструкция, например: «Click on the green apple» |
| minClicks и maxClicks | Нет | Минимальное и максимальное количество кликов, которое можно сделать |
| clientKey | Да | Ваш API ключ |
Совет: Всегда указывайте comment — это повышает точность распознавания.
Пошаговая инструкция: решение через API
Шаг 1: Получите изображение капчи
Используйте Selenium, Puppeteer или любой HTTP-клиент для загрузки изображения:
python
from selenium.webdriver.common.by import By
from PIL import Image
import requests
# Находим элемент с капчей
img_url = driver.find_element(By.CSS_SELECTOR, "img[alt='clickcaptcha example']").get_attribute('src')
# Скачиваем и сохраняем изображение
img = Image.open(requests.get(img_url, stream=True).raw)
img.save('captcha.png')
Шаг 2: Отправьте задачу на решение
Эндпоинт API v2: https:/api.2captcha.com/createTask
Пример запроса (JSON):
json
{
"clientKey": "ВАШ_API_КЛЮЧ",
"task": {
"type": "CoordinatesTask",
"body": "iVBORw0KGgoAAAANSUhEUgAA...",
"textinstructions": "Click on the green apple",
"imginstructions": "base64_hint_image_optional",
"lang": "en"
}
}
Или через SDK Python
python
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('ВАШ_API_КЛЮЧ', defaultTimeout=120, pollingInterval=5)
try:
result = solver.coordinates('captcha.png',
textinstructions='Click on the green apple',
lang='en')
except Exception as e:
print(f"Ошибка: {e}")
else:
print(f"Решено: {result}")
Шаг 3: Получите результат
Ответ сервиса содержит координаты в формате:
coordinates:x=187,y=60;x=98,y=121;x=267,y=115
Парсим ответ:
python
# result['code'] = "coordinates:x=187,y=60;x=98,y=121;x=267,y=115"
coordinates_raw = result['code'].replace('coordinates:', '').split(';')
coordinates = []
for coord in coordinates_raw:
x, y = coord.split('=')[1].split(',')
coordinates.append({'x': int(x), 'y': int(y)})
# coordinates = [{'x': 187, 'y': 60}, {'x': 98, 'y': 121}, {'x': 267, 'y': 115}]
Шаг 4: Эмулируйте клики по координатам
Важно: Координаты в ответе относительные — отсчёт идёт от левого верхнего угла изображения капчи.
python
from selenium.webdriver.common.action_chains import ActionChains
# Находим элемент капчи на странице и получаем его позицию
captcha_el = driver.find_element(By.CSS_SELECTOR, "img[alt='clickcaptcha example']")
captcha_location = captcha_el.location # {'x': 150, 'y': 300}
# Кликаем по каждой координате
for coord in coordinates:
ActionChains(driver)\
.move_to_element_with_offset(captcha_el, coord['x'], coord['y'])\
.click()\
.perform()
# Небольшая пауза между кликами для естественности
time.sleep(0.3)
Совет: После каждого клика сбрасывайте действия через
ActionChains(driver).reset_actions(), чтобы избежать накопления смещений.
Шаг 5: Подтвердите решение
После выполнения всех кликов нажмите кнопку проверки (Submit/Check):
python
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
Полный пример на Python
python
import time
import requests
from PIL import Image
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from twocaptcha import TwoCaptcha
# === Настройки ===
API_KEY = 'ВАШ_API_КЛЮЧ'
TARGET_URL = 'https://example.com/page-with-captcha'
CAPTCHA_SELECTOR = "img[alt='clickcaptcha example']"
SUBMIT_SELECTOR = "button[type='submit']"
# === Инициализация ===
driver = webdriver.Chrome()
solver = TwoCaptcha(API_KEY, defaultTimeout=120, pollingInterval=5)
try:
# 1. Открываем страницу
driver.get(TARGET_URL)
time.sleep(3)
# 2. Скачиваем изображение капчи
img_url = driver.find_element(By.CSS_SELECTOR, CAPTCHA_SELECTOR).get_attribute('src')
img = Image.open(requests.get(img_url, stream=True).raw)
img.save('captcha.png')
# 3. Отправляем на решение
result = solver.coordinates(
'captcha.png',
textinstructions='Click on the green apple', # Адаптируйте под вашу капчу!
lang='en'
)
# 4. Парсим координаты
coords_raw = result['code'].replace('coordinates:', '').split(';')
coordinates = []
for c in coords_raw:
x, y = c.replace('x=', '').replace('y=', '').split(',')
coordinates.append({'x': int(x), 'y': int(y)})
# 5. Кликаем по координатам
captcha_el = driver.find_element(By.CSS_SELECTOR, CAPTCHA_SELECTOR)
for coord in coordinates:
ActionChains(driver)\
.move_to_element_with_offset(captcha_el, coord['x'], coord['y'])\
.click()\
.perform()
time.sleep(0.3)
ActionChains(driver).reset_actions()
# 6. Подтверждаем
driver.find_element(By.CSS_SELECTOR, SUBMIT_SELECTOR).click()
print("✅ Капча успешно решена!")
# Держим браузер открытым для проверки
time.sleep(10)
except Exception as e:
print(f"❌ Ошибка: {e}")
finally:
# driver.quit() # Раскомментируйте для автоматического закрытия
pass
Обработка ошибок и рекомендации
Частые ошибки
| Код ошибки | Причина | Решение |
|---|---|---|
| ERROR_WRONG_USER_KEY | Неверный API-ключ | Проверьте ключ в личном кабинете |
| ERROR_ZERO_BALANCE | Недостаточно средств | Пополните баланс аккаунта |
| ERROR_CAPTCHA_UNSOLVABLE | Капча не распознана | Укажите comment, проверьте качество изображения |
| ERROR_BAD_PARAMETERS | Некорректные параметры задачи | Проверьте формат body (base64) и наличие обязательных полей |
Советы по повышению успешности
- Всегда указывайте инструкцию — она критически важна для точности.
- Добавляйте задержки между действиями — эмуляция «человеческого» поведения снижает риск блокировки.
- Проверяйте позицию элемента — координаты ответа относительные, учитывайте смещение капчи на странице.
- Реализуйте повторные попытки — при ошибке ERROR_CAPTCHA_UNSOLVABLE попробуйте отправить задачу ещё раз с уточнённой инструкцией.
Контроль частоты запросов
python
# Экспоненциальная задержка при повторных попытках
def solve_with_retry(solver, image_path, instruction, max_retries=3):
for attempt in range(max_retries):
try:
return solver.coordinates(image_path, textinstructions=instruction, lang='en')
except Exception as e:
if attempt == max_retries - 1:
raise
wait_time = 5 * (2 ** attempt) # 5s, 10s, 20s
print(f"Попытка {attempt + 1} не удалась. Ждём {wait_time}с...")
time.sleep(wait_time)
Полезные ссылки
Заключение
Click Captcha представляет собой эффективный механизм защиты, который может быть чувствителен к качеству реализации и условиям взаимодействия. Ключевые факторы надёжной работы автоматизированных сценариев тестирования:
- корректное извлечение и обработка изображений в интерфейсе
- точная интерпретация пользовательских инструкций (comment)
- аккуратная эмуляция взаимодействий с интерфейсом с учётом координат и состояния элементов
- обработка ошибок, таймаутов и нестабильных состояний интерфейса