Автоматизируем решение капчи
Table of Contents
НА ПРАВАХ РЕКЛАМЫ
Привет! Думаю, что тебя раздражает каждый раз вводить капчу при входе на любимый сайт. И было бы логично предположить, что существует сервис для решения этой проблемы. И действительно, такой есть.
Согласно описанию на сайте:
RuCaptcha.com — антикапча-сервис ручного распознавания изображений, здесь встречаются те, кому нужно в режиме реального времени распознать текст с отсканированных документов, бланков, капч и те, кто хочет заработать на вводе текста с экрана.
В системе работают русскоязычные и англоязычные работники.
Cервис антикапчи RuCaptcha.com не только поддерживает стандартное API на равне с сервисами pixodrom, antigate, anti-captcha и других, но и предоставляет расширенный фукнционал пополняющийся под каждый виток борьбы с автоматизацией. API RuCaptcha поддерживает решение ReCaptcha v2 (где нужно кликнуть по картинкам), ClickCaptcha (где нужно кликнуть в определённые точки) и Rotatecaptcha (FunCaptcha и другие капчи, которые нужно крутить).
Что-ж, неплохо!
Данный способ позволяет пройти капчу без эмуляции браузера и отправки картинок, так же этот способ даёт 100% прохождение капчи.
Где, какие данные брать и куда вставлять? Посмотри HTML-код страницы(нажми F12), где ты встретили капчу:
-
найди параметр data-sitekey= Это ключ сайта, он постоянен и уникален для каждого сайта (если администратор сайта не поменяет его вручную)
-
найди форму для текста
<textarea id="g-recaptcha-response"
name="g-recaptcha-response"
class="g-recaptcha-response"
style="width: 250px; height: 40px;
border: 1px solid #c1c1c1; margin: 10px 25px;
padding: 0px; resize: none; "></textarea>
Сюда тебе нужно будет вставить ответ от сервиса.
Установка
Но всё это не “торт”. Настоящие программисты всё автоматизируют. Потому давайте напишем программу антикапчу на python, используя соответствующую библиотеку.
Установить модуль можно следующими методами:
Через pip
pip3 install python-rucaptcha
Хотя на страничке github указан pip, у меня он не нашёл соответствующий пакет. Потому я всё сделал через pip3(видимо разработчики решили использовать актуальную ветку python, а не устаревшую).
Или собрав из исходников
git clone https://github.com/AndreiDrang/python-rucaptcha.git
cd python-rucaptcha
python setup.py install
Примеры работы
Как вариант можно воспользоваться Callback API. Однако в таком случае тесты проводяться на локальном сервере, эмулируя POST-запросы от RuCaptcha при помощи локального клиента. Принцип работы ты можешь увидеть на схеме ниже
Однако этот способ не рационален, т.к для решения небольшой проблемы мы поднимаем сервер, пускай и небольшой.
Всё можно сделать гораздо проще:
Простая капча
from python_rucaptcha import ImageCaptcha
# Введите ключ от сервиса RuCaptcha, из своего аккаунта
RUCAPTCHA_KEY = ""
# Ссылка на изображения для расшифровки
image_link = ""
# Возвращается JSON содержащий информацию для решения капчи
user_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_link=image_link)
if not user_answer['error']:
# решение капчи
print(user_answer['captchaSolve'])
print(user_answer['taskId'])
elif user_answer['error']:
# Тело ошибки, если есть
print(user_answer['errorBody']['text'])
print(user_answer['errorBody']['id'])
KeyCaptcha
from python_rucaptcha import KeyCaptcha
# Введите ключ от сервиса RuCaptcha, из своего аккаунта
RUCAPTCHA_KEY = ''
answer = KeyCaptcha.KeyCaptcha(rucaptcha_key=RUCAPTCHA_KEY) \
.captcha_handler(key_params = {
's_s_c_user_id':15,
's_s_c_session_id':'',
's_s_c_web_server_sign':'',
's_s_c_web_server_sign2':'',
'pageurl':'https://www.keycaptcha.com/signup/'
}
)
# капча решена верно, ошибка = 0
if not answer['error']:
# решение капчи
print(answer['captchaSolve'])
print(answer['taskId'])
# во время решения капчи возникли ошибки, ошибка = 1
elif answer['error']:
# Тело ошибки, если есть
print(answer['errorBody'])
ReCaptcha v.2
from python_rucaptcha import ReCaptchaV2
# Введите ключ от сервиса RuCaptcha, из своего аккаунта
RUCAPTCHA_KEY = ""
# G-ReCaptcha ключ сайта
SITE_KEY = ""
# Ссылка на страницу с капчей
PAGE_URL = ""
# Возвращается JSON содержащий информацию для решения капчи
user_answer = ReCaptchaV2.ReCaptchaV2(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(site_key=SITE_KEY,
page_url=PAGE_URL)
if not user_answer['error']:
# решение капчи
print(user_answer['captchaSolve'])
print(user_answer['taskId'])
elif user_answer['error']:
# Тело ошибки, если есть
print(user_answer['errorBody']['text'])
print(user_answer['errorBody']['id'])
ReCaptcha v.3
До этого момента я не показывал работу на реальных примерах. Т.к у всех решений схожая структура: вы вводите URL, ключ, который вы получили на сайте. Я решил показать решение реальной задачи на капче третей версии:
from python_rucaptcha import ReCaptchaV3
# Введите ключ от сервиса RuCaptcha, из своего аккаунта
RUCAPTCHA_KEY = ""
# G-ReCaptcha ключ сайта
SITE_KEY = ""
# Ссылка на страницу с капчёй
PAGE_URL = ""
# Значение параметра action, которые вы нашли в коде сайта
ACTION = 'verify'
# Требуемое значение рейтинга работника,от 0.1(робот) до 0.9(человек)
MIN_SCORE = 0.4
# Возвращается JSON содержащий информацию для решения капчи
user_answer = ReCaptchaV3.ReCaptchaV3(rucaptcha_key=RUCAPTCHA_KEY,
action = ACTION,
min_score = MIN_SCORE).captcha_handler(site_key=SITE_KEY,
page_url=PAGE_URL)
if not user_answer['error']:
# решение капчи
print(user_answer['captchaSolve'])
print(user_answer['taskId'])
print(user_answer['user_check'])
print(user_answer['user_score'])
elif user_answer['error']:
# Тело ошибки, если есть
print(user_answer['errorBody']['text'])
print(user_answer['errorBody']['id'])
В качестве тестового полигона будем использовать следующий сайт.
Подставим необходимые данные в наш код:
Задача решена:
Цена вопроса
Отдельно стоит отметить, что стоимость распознавания очень низка, от $0,0005 за одну капчу. Для удобства, все цены указываются за распознавание 1000 капч, но биллинг в системе происходит отдельно по каждой капче. Разные типы капч распознаются по разной цене.
- Простые капчи: от $0.5 до $1 за 1000 решений
Простые капчи это те, где нужно переписать текст с изображения. Цена зависит от нагрузки на сервис. Если нагрузка маленькая, то цена низкая. Чем выше нагрузка на сервис, тем выше цена. В статистике можно узнать среднюю цену за каждый час за последние дни.
- Большие капчи, ReCaptcha v2 images: $1 за 1000 решений
Большие капчи это те, у которых сумма высоты и ширины превышает 400px. Цена на них $1 в любое время, независимо от нагрузки на сервер. ReCaptcha v2 images - картинки от рекапчи, где нужно выбрать правильный квадрат.
- ReCaptcha v2 token: $2.99 за 1000 решений
Действительно недорого, даже не смотря на отсутсвие скидок, промокодов и бонусов. Однако если ты будешь тратить больше $2000 ежедневно в течении месяца и при этом не являясь рефералом кого-либо, ты можешь написать в раздел “Support” и сервис сделает для тебя скидку.