Package: python-rucaptcha-session-patch
python-rucaptchaБиблиотека предназначена для разрабаотчиков ПО и служит для облегчения работы с API сервиса RuCaptcha.Присутствуютпримеры работы с библиотекой.Используется Python версии 3.6+.How to install? Как установить?pippipinstallpython-rucaptchaSourcegitclonehttps://github.com/AndreiDrang/python-rucaptcha.gitcdpython-rucaptcha
pythonsetup.pyinstallПо всем вопросам можете писать вTelegramчат.Последние обновленияv.2.0- Обновление JSON ответа, ключа с информацией об ошибке(создание собственного списка ошибок с уникальнымиid).
Добавление вerrorBodyдвух ключей:text(текст ошибки) иid(уникальный номер ошибки).Таблица с ошибками и их номерами.
ЗаменаerrorIdи его значений 1/0 наerrorи логическиеTrue(есть ошибка)/False(нет ошибки).v.2.2.1- Вынесение методов для получению решений капчи (как синхронного так и асинхронного) в отдельный файл.v.2.3- Удаление использования временных файлов(для хранения изображений) и замена их на переменную.v.2.4- Добавлениеcallback(pingback) параметра для работы со всеми видами капч. Добавление нового модуля для получения результатов решения капчи с сервера -CallbackClient. В примеры добавленасинхронный сервер(на aiohttp)для обработки POST-запросов от RuCaptcha, а так жеэмулятор RuCaptcha, который высылает те же параметры что и настоящий сервер(подойдёт для тестирования обработки решений капчи).v.2.5- Добавление метода для решенияReCaptcha v3. Удаление модуляMediaCaptchaиз библиотеки.v.2.5.3- Добавлениеcontextmanagerко всем методам решения капчи.v.2.5.4- ДобавлениеGeeTestметода. С синхронным и асинхронным исполнением.v.2.6.3- ДобавлениеDistilметода. С синхронным и асинхронным исполнением.v.2.6.4- ДобавлениеHCaptchaметода. С синхронным и асинхронным исполнением.v.2.6.5- ДобавлениеCapyPuzzleметода. С синхронным и асинхронным исполнением.v.3.0- Удаление кастомных ошибиок и вывода текста о них.Замена структуры:{"errorBody":{"text":"some text","id":1}}На структуру:{"errorBody":"ERROR_NAME"}Будущие обновленияv.4.0 -  Переработка классов и методов. Добавление наследований и переиспользования.Реализованы следующие методы:0.Работа через callback(pingback).Структура и принцип работы системы подробнорасписан в данной схемеКраткий пример:importrequestsfrompython_rucaptchaimportImageCaptcha,RuCaptchaControl,CallbackClient# Введите ключ от сервиса RuCaptcha, из своего аккаунтаRUCAPTCHA_KEY=""# Ссылка на изображения для расшифровкиimage_link=""# для начала работы нужно зарегистрировать IP/URL(делается с того же IP, который регистрируете):RuCaptchaControl.RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action='add_pingback',addr='http://85.255.8.26/')# проверка зарегистрированных адресовanswer=RuCaptchaControl.RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action='get_pingback',json=1)print(answer)# нужно придумать сложное название очереди(15+ знаков подойдёт) для получения результатов решения капчиqueue_name='ba86e77f9007_andrei_drang_7436e744_cute_queue'# регистрируем очередь на callback сервереanswer=requests.post(f'http://85.255.8.26:8001/register_key',json={'key':queue_name,'vhost':'rucaptcha_vhost'})print(answer.text)# создаём задание в сервисе RuCaptcha и указываем `pingback` параметрtask_creation_answer=ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY,pingback=f'85.255.8.26:8001/rucaptcha/image_captcha/{queue_name}',).captcha_handler(captcha_link=image_link)print(task_creation_answer)# Два варианта получения решения: кеш(результат хранится 1 час) и  rabbitmq очередь(результат удаляется после первого чтения)# подключаемся к серверу и ждём решения капчи из кешаcallback_cache_response=CallbackClient.CallbackClient(task_id=task_creation_answer.get('id')).captcha_handler()# подключаемся к серверу и ждём решения капчи из RabbitMQ queuecallback_queue_response=CallbackClient.CallbackClient(task_id=task_creation_answer.get('id'),queue_name=queue_name,call_type='queue').captcha_handler()print(callback_cache_response)print(callback_queue_response)Если вы хотите запустить данный callback сервер у себя:Небольшаяинструкция-памяткапо шагам.Установить и запустить веб-приложение, которое будет принимать POST-запросы, парсить их, и совершать прочую, нужную вам, магию.Пример такого сервера, написанный на aiohttp.Все тесты можно проводить на локальном сервере, эмулируя POST-запросы от RuCaptcha при помощилокального клиента.Примеры создания реальных заданий для callback(pingback) способа вы можете посмотреть впапке с примерами, для конкретного метода капчи.Работа обычным методом - ожидание решения капчи периодическим опросом сервера.1.Решение капчи-изображения(большие и маленькие).frompython_rucaptchaimportImageCaptcha# Введите ключ от сервиса RuCaptcha, из своего аккаунтаRUCAPTCHA_KEY=""# Ссылка на изображения для расшифровкиimage_link=""# Возвращается JSON содержащий информацию для решения капчиuser_answer=ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_link=image_link)ifnotuser_answer['error']:# решение капчиprint(user_answer['captchaSolve'])print(user_answer['taskId'])elifuser_answer['error']:# Тело ошибки, если естьprint(user_answer['errorBody'])print(user_answer['errorBody'])2.Решение KeyCaptcha(пазл-капча).frompython_rucaptchaimportKeyCaptcha# Введите ключ от сервиса 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':'8f460599bebe02cb0dd096b1fe70b089','s_s_c_web_server_sign':'edd2c221c05aece19f6db93a36b42272','s_s_c_web_server_sign2':'15989edaad1b4dc056ec8fa05abc7c9a','pageurl':'https://www.keycaptcha.com/signup/'})# капча решена верно, ошибка = 0ifnotanswer['error']:# решение капчиprint(answer['captchaSolve'])print(answer['taskId'])# во время решения капчи возникли ошибки, ошибка = 1elifanswer['error']:# Тело ошибки, если естьprint(answer['errorBody'])3.Решение ReCaptcha v2.frompython_rucaptchaimportReCaptchaV2# Введите ключ от сервиса 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)ifnotuser_answer['error']:# решение капчиprint(user_answer['captchaSolve'])print(user_answer['taskId'])elifuser_answer['error']:# Тело ошибки, если естьprint(user_answer['errorBody'])print(user_answer['errorBody'])4.Решение ReCaptcha v3.frompython_rucaptchaimportReCaptchaV3# Введите ключ от сервиса RuCaptcha, из своего аккаунтаRUCAPTCHA_KEY=""# G-ReCaptcha ключ сайтаSITE_KEY=""# Ссылка на страницу с капчёйPAGE_URL=""# Значение параметра action, которые вы нашли в коде сайтаACTION='verify'# Требуемое значение рейтинга (score) работника, от 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)ifnotuser_answer['error']:# решение капчиprint(user_answer['captchaSolve'])print(user_answer['taskId'])print(user_answer['user_check'])print(user_answer['user_score'])elifuser_answer['error']:# Тело ошибки, если естьprint(user_answer['errorBody'])print(user_answer['errorBody'])5.Решение RotateCaptcha(повернуть изображение).6.Решение текстовой капчи.frompython_rucaptchaimportTextCaptcha# Введите ключ от рукапчи из своего аккаунтаRUCAPTCHA_KEY=''# Вопросtext_question='Если завтра суббота, то какой сегодня день?'user_answer=TextCaptcha.TextCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_text=text_question)ifnotuser_answer['error']:# решение капчиprint(user_answer['captchaSolve'])print(user_answer['taskId'])elifuser_answer['error']:# Тело ошибки, если естьprint(user_answer['errorBody'])print(user_answer['errorBody'])7.Решение FunCaptcha.frompython_rucaptchaimportFunCaptcha# Введите ключ от рукапчи из своего аккаунтаRUCAPTCHA_KEY='''''Страница на которой находится FunCaptch:https://www.funcaptcha.com/demoДанные взятые из этой страницы о данной капче:'''public_key='DE0B0BB7-1EE4-4D70-1853-31B835D4506B'pageurl='https://www.funcaptcha.com/demo'answer=FunCaptcha.FunCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(public_key=public_key,page_url=pageurl)ifnotanswer['error']:# решение капчиprint(answer['captchaSolve'])print(answer['taskId'])elifanswer['error']:# Тело ошибки, если естьprint(answer['errorBody'])8.Модуль для получения инофрмации о балансе аккаунта и отправке жалоб.frompython_rucaptcha.RuCaptchaControlimportRuCaptchaControl# Введите ключ от рукапчи из своего аккаунтаRUCAPTCHA_KEY=''JsSha1="af2d0557c23ff2d8f40ccf4bec57e480704634e9"JsUri="http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js"JsData="IWZ1bmN0fewfwefwefwef9905j0g4905jh9046hj3cpCg=="answer=RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action="getbalance")ifnotanswer["error"]:print("Your balance is: ",answer["serverAnswer"]," rub.")elifanswer["error"]:# Тело ошибки, если естьprint(answer["errorBody"])# Пример отправки жалобы на неправильно решённую капчу под ID "666"wrong_captcha_id=666answer=RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods(action="reportbad",id=wrong_captcha_id)# Если заявка принятаifnotanswer["error"]:print("Заявка принята.")# Если возникла ошибкаelifanswer["error"]:print(answer["errorBody"])9.Решение HCaptcha.frompython_rucaptcha.HCaptchaimportHCaptchaRUCAPTCHA_KEY=''website_link="https://secure2.e-konsulat.gov.pl/Uslugi/RejestracjaTerminu.aspx?IDUSLUGI=1&IDPlacowki=94"data_sitekey="39fccce0-e3e3-4f9d-a942-ea415c102beb"answer=HCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(site_key=data_sitekey,page_url=website_link)ifnotanswer['error']:# решение капчиprint(answer['captchaSolve'])print(answer['taskId'])elifanswer['error']:# Тело ошибки, если естьprint(answer['errorBody'])10.Решение CapyPuzzle.frompython_rucaptcha.CapyPuzzleimportCapyPuzzleRUCAPTCHA_KEY=''captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w"page_url="https://www.capy.me/account/register/"answer=CapyPuzzle(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captchakey=captchakey,page_url=page_url)ifnotanswer['error']:# решение капчиprint(answer['captchaSolve'])print(answer['taskId'])elifanswer['error']:# Тело ошибки, если естьprint(answer['errorBody'])Кроме того, для тестирования различных типов капчи предоставляетсяспециальный сайт, на котором собраны все имеющиеся типы капчи, с удобной системой тестирования ваших скриптов.Errors description. Описания ошибокВ обоих ссылках находятся валидные описания ошибокhttps://rucaptcha.com/api-rucaptcha#in_errorshttps://rucaptcha.docs.apiary.io/#reference/2