Python 3.6+ RuCaptcha library with AIO module.
Project description
python-rucaptcha
Библиотека предназначена для разработчиков ПО и служит для облегчения работы с API сервиса RuCaptcha.
Присутствуют примеры работы с библиотекой.
Используется Python версии 3.6+.
How to install? Как установить?
pip
pip install python-rucaptcha
Source
git clone https://github.com/AndreiDrang/python-rucaptcha.git
cd python-rucaptcha
python setup.py install
По всем вопросам можете писать в 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 - Переработка классов и методов. Добавление наследований и переиспользования.
Реализованы следующие методы:
Структура и принцип работы системы подробно расписан в данной схеме
Краткий пример:
import requests from python_rucaptcha import ImageCaptcha, 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 queue callback_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) способа вы можете посмотреть в папке с примерами, для конкретного метода капчи.
Работа обычным методом - ожидание решения капчи периодическим опросом сервера.
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']) print(user_answer ['errorBody'])
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':'8f460599bebe02cb0dd096b1fe70b089', 's_s_c_web_server_sign':'edd2c221c05aece19f6db93a36b42272', 's_s_c_web_server_sign2':'15989edaad1b4dc056ec8fa05abc7c9a', 'pageurl':'https://www.keycaptcha.com/signup/' } ) # капча решена верно, ошибка = 0 if not answer['error']: # решение капчи print(answer['captchaSolve']) print(answer['taskId']) # во время решения капчи возникли ошибки, ошибка = 1 elif answer['error']: # Тело ошибки, если есть print(answer['errorBody'])
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']) print(user_answer ['errorBody'])
from python_rucaptcha import ReCaptchaV3 # Введите ключ от сервиса 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 ) 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']) print(user_answer ['errorBody'])
from python_rucaptcha import TextCaptcha # Введите ключ от рукапчи из своего аккаунта RUCAPTCHA_KEY = '' # Вопрос text_question = 'Если завтра суббота, то какой сегодня день?' user_answer = TextCaptcha.TextCaptcha(rucaptcha_key = RUCAPTCHA_KEY).captcha_handler(captcha_text = text_question) if not user_answer['error']: # решение капчи print(user_answer['captchaSolve']) print(user_answer['taskId']) elif user_answer['error']: # Тело ошибки, если есть print(user_answer ['errorBody']) print(user_answer ['errorBody'])
from python_rucaptcha import FunCaptcha # Введите ключ от рукапчи из своего аккаунта 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) if not answer['error']: # решение капчи print(answer['captchaSolve']) print(answer['taskId']) elif answer['error']: # Тело ошибки, если есть print(answer ['errorBody'])
from python_rucaptcha.RuCaptchaControl import RuCaptchaControl # Введите ключ от рукапчи из своего аккаунта RUCAPTCHA_KEY = '' JsSha1 = "af2d0557c23ff2d8f40ccf4bec57e480704634e9" JsUri = "http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js" JsData = "IWZ1bmN0fewfwefwefwef9905j0g4905jh9046hj3cpCg==" answer = RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods( action="getbalance" ) if not answer["error"]: print("Your balance is: ", answer["serverAnswer"], " rub.") elif answer["error"]: # Тело ошибки, если есть print(answer["errorBody"]) # Пример отправки жалобы на неправильно решённую капчу под ID "666" wrong_captcha_id = 666 answer = RuCaptchaControl(rucaptcha_key=RUCAPTCHA_KEY).additional_methods( action="reportbad", id=wrong_captcha_id ) # Если заявка принята if not answer["error"]: print("Заявка принята.") # Если возникла ошибка elif answer["error"]: print(answer["errorBody"])
from python_rucaptcha.HCaptcha import HCaptcha RUCAPTCHA_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 ) if not answer['error']: # решение капчи print(answer['captchaSolve']) print(answer['taskId']) elif answer['error']: # Тело ошибки, если есть print(answer ['errorBody'])
from python_rucaptcha.CapyPuzzle import CapyPuzzle RUCAPTCHA_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 ) if not answer['error']: # решение капчи print(answer['captchaSolve']) print(answer['taskId']) elif answer['error']: # Тело ошибки, если есть print(answer ['errorBody'])
Кроме того, для тестирования различных типов капчи предоставляется специальный сайт, на котором собраны все имеющиеся типы капчи, с удобной системой тестирования ваших скриптов.
Errors description. Описания ошибок
В обоих ссылках находятся валидные описания ошибок
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size python_rucaptcha-3.0.1-py3-none-any.whl (54.3 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size python-rucaptcha-3.0.1.tar.gz (39.6 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for python_rucaptcha-3.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60e2592d3f23cee72d2b2d4aa71e671a8ad80cdb4366a65f8e3cb9d08deb6761 |
|
MD5 | 0480f0a67dfce36b20fa9034664d5874 |
|
BLAKE2-256 | 17a0943c65ddd1588abe467c0b424b810053fbe9c89ddcb70bbe025ad83ecfb5 |