From 171771c4dd83729cca75f5b893963ede92f3f3e2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 30 Mar 2020 03:45:48 +0300 Subject: [PATCH] Add HCaptcha, description and examples. --- README.md | 49 ++++-- .../anticaptcha_hcaptcha_example.py | 117 +++++++++++++ python3_anticaptcha/HCaptchaTask.py | 161 ++++++++++++++++++ python3_anticaptcha/HCaptchaTaskProxyless.py | 134 +++++++++++++++ setup.py | 2 +- 5 files changed, 446 insertions(+), 17 deletions(-) create mode 100644 anticaptcha_examples/anticaptcha_hcaptcha_example.py create mode 100644 python3_anticaptcha/HCaptchaTask.py create mode 100644 python3_anticaptcha/HCaptchaTaskProxyless.py diff --git a/README.md b/README.md index d0e4e0f..b9985d9 100644 --- a/README.md +++ b/README.md @@ -36,21 +36,21 @@ python setup.py install With any questions, please contact us in [Telegram](https://t.me/pythoncaptcha). *** -Присутствуют [примеры работы с библиотекой](https://github.com/AndreiDrang/python3-anticaptcha/tree/master/anticaptcha_examples). +Присутствуют [примеры работы с библиотекой](./anticaptcha_examples). -Full examples you can find [here](https://github.com/AndreiDrang/python3-anticaptcha/tree/master/anticaptcha_examples). +Full examples you can find [here](./anticaptcha_examples). *** ### At the moment the following methods are implemented: ### На данный момент реализованы следующие методы: -0.[Manual result handler.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/custom_result_handler_example.py) +0.[Manual result handler.](./anticaptcha_examples/custom_result_handler_example.py) ```python from python3_anticaptcha import CustomResultHandler # Enter the key to the AntiCaptcha service from your account. Anticaptcha service key. -ANTICAPTCHA_KEY = "" +ANTICAPTCHA_KEY = "your_key" # Task ID to get result TASK_ID = 123456 # This module is used to obtain the result of solving the task in "manual" mode @@ -61,7 +61,7 @@ custom_result = CustomResultHandler.CustomResultHandler( user_answer = custom_result.task_handler(task_id=TASK_ID) print(user_answer) ``` -1.[Image to text captcha.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcah_image_to_text_example.py) +1.[Image to text captcha.](./anticaptcha_examples/anticaptcah_image_to_text_example.py) ```python @@ -69,7 +69,7 @@ from python3_anticaptcha import ImageToTextTask # Enter the key to the AntiCaptcha service from your account. Anticaptcha service key. ANTICAPTCHA_KEY = "" # Ссылка на изображения для расшифровки. Link to captcha image. -image_link = "http://85.255.8.26/static/image/common_image_example/800070.png" +image_link = "https://pythoncaptcha.cloud/static/image/common_image_example/800070.png" # Возвращается строка-расшифровка капчи. Get string for solve captcha, and some other info. user_answer = ImageToTextTask.ImageToTextTask(anticaptcha_key = ANTICAPTCHA_KEY).\ captcha_handler(captcha_link=image_link) @@ -77,10 +77,10 @@ user_answer = ImageToTextTask.ImageToTextTask(anticaptcha_key = ANTICAPTCHA_KEY) print(user_answer) ``` -2.[ReCaptcha v2.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_nocaptcha_example.py) +2.[ReCaptcha v2.](./anticaptcha_examples/anticaptcha_nocaptcha_example.py) -3.[ReCaptcha v2 Proxyless. ](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_nocaptcha_example.py) + [Selenium example](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/selenium_recaptcha_v2.py) +3.[ReCaptcha v2 Proxyless. ](./anticaptcha_examples/anticaptcha_nocaptcha_example.py) + [Selenium example](./anticaptcha_examples/selenium_recaptcha_v2.py) ```python from python3_anticaptcha import NoCaptchaTaskProxyless @@ -98,7 +98,7 @@ user_answer = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key = AN print(user_answer) ``` -3.[ReCaptcha v3 Proxyless. ](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_nocaptcha_example.py) +3.[ReCaptcha v3 Proxyless. ](./anticaptcha_examples/anticaptcha_nocaptcha_example.py) ```python from python3_anticaptcha import ReCaptchaV3TaskProxyless @@ -116,7 +116,7 @@ PAGE_ACTION='login' # Возвращается строка-расшифровка капчи. Get string for solve captcha, and other info. user_answer = ReCaptchaV3TaskProxyless.ReCaptchaV3TaskProxyless(anticaptcha_key = ANTICAPTCHA_KEY)\ .captcha_handler(websiteURL=PAGE_URL, - websiteKey=SITE_KEY + websiteKey=SITE_KEY, minScore=MIN_SCORE, pageAction=PAGE_ACTION ) @@ -124,9 +124,9 @@ user_answer = ReCaptchaV3TaskProxyless.ReCaptchaV3TaskProxyless(anticaptcha_key print(user_answer) ``` -4.[Fun Captcha.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_fun_example.py) +4.[Fun Captcha.](./anticaptcha_examples/anticaptcha_fun_example.py) -5.[Fun Captcha Proxyless.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_fun_example.py) +5.[Fun Captcha Proxyless.](./anticaptcha_examples/anticaptcha_fun_example.py) ```python from python3_anticaptcha import FunCaptchaTask @@ -147,7 +147,7 @@ user_answer = FunCaptchaTask.FunCaptchaTask(anticaptcha_key=ANTICAPTCHA_KEY, print(user_answer) ``` -6.[Account management module.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_control_example.py) +6.[Account management module.](./anticaptcha_examples/anticaptcha_control_example.py) ```python from python3_anticaptcha import AntiCaptchaControl @@ -159,7 +159,7 @@ user_answer = AntiCaptchaControl.AntiCaptchaControl(anticaptcha_key = ANTICAPTCH print(user_answer) ``` -7.[Custom Captcha.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_control_example.py) +7.[Custom Captcha.](./anticaptcha_examples/anticaptcha_customcaptcha_example.py) ```python from python3_anticaptcha import CustomCaptchaTask @@ -173,9 +173,9 @@ my_custom_task = CustomCaptchaTask.CustomCaptchaTask(anticaptcha_key=ANTICAPTCHA print(my_custom_task) ``` -8.[Gee Test.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_control_example.py) +8.[Gee Test.](./anticaptcha_examples/gee_example.py) -9.[Gee Test Proxyless.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_control_example.py) +9.[Gee Test Proxyless.](./anticaptcha_examples/gee_example.py) ```python from python3_anticaptcha import GeeTestTaskProxyless @@ -191,6 +191,23 @@ result = GeeTestTaskProxyless.GeeTestTaskProxyless(anticaptcha_key=ANTICAPTCHA_K gt=gt).\ captcha_handler(challenge=challenge) +print(result) +``` + +10.[HCaptcha.](./anticaptcha_examples/anticaptcha_hcaptcha_example.py) + +11.[HCaptcha Proxyless.](./anticaptcha_examples/anticaptcha_hcaptcha_example.py) + +```python +from python3_anticaptcha import HCaptchaTaskProxyless +# Enter the key to the AntiCaptcha service from your account. Anticaptcha service key. +ANTICAPTCHA_KEY = "" +WEB_URL = "https://dashboard.hcaptcha.com/signup" +SITE_KEY = "00000000-0000-0000-0000-000000000000" + +result = HCaptchaTaskProxyless.HCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY).\ + captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + print(result) ``` *** diff --git a/anticaptcha_examples/anticaptcha_hcaptcha_example.py b/anticaptcha_examples/anticaptcha_hcaptcha_example.py new file mode 100644 index 0000000..22238d0 --- /dev/null +++ b/anticaptcha_examples/anticaptcha_hcaptcha_example.py @@ -0,0 +1,117 @@ +import asyncio +import requests + +from python3_anticaptcha import HCaptchaTaskProxyless, HCaptchaTask, CallbackClient + + +ANTICAPTCHA_KEY = "57929db084241b66dbc5e4eb80b117cf" +WEB_URL = "https://dashboard.hcaptcha.com/signup" +SITE_KEY = "00000000-0000-0000-0000-000000000000" +# Пример работы антикапчи с фанкапчёй и с использованием прокси при этом +result = HCaptchaTask.HCaptchaTask( + anticaptcha_key=ANTICAPTCHA_KEY, + proxyType="http", + proxyAddress="8.8.8.8", + proxyPort=8080, + proxyLogin="proxyLoginHere", + proxyPassword="proxyPasswordHere", + userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", +).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + +print(result) + +# Пример работы антикапчи с фанкапчёй и с БЕЗ использования прокси при этом +result = HCaptchaTaskProxyless.HCaptchaTaskProxyless( + anticaptcha_key=ANTICAPTCHA_KEY +).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + +print(result) + +# Асинхронный пример работы +async def run(): + try: + # Пример работы антикапчи с фанкапчёй и с использованием прокси при этом + result = await HCaptchaTask.aioHCaptchaTask( + anticaptcha_key=ANTICAPTCHA_KEY, + proxyType="http", + proxyAddress="8.8.8.8", + proxyPort=8080, + proxyLogin="proxyLoginHere", + proxyPassword="proxyPasswordHere", + userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", + ).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + + print(result) + # Пример работы антикапчи с фанкапчёй и БЕЗ использования прокси при этом + result = await HCaptchaTaskProxyless.aioHCaptchaTaskProxyless( + anticaptcha_key=ANTICAPTCHA_KEY + ).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + + print(result) + except Exception as err: + print(err) + + +if __name__ == "__main__": + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) + loop.close() + +""" +Callback example +""" +QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" + +""" +Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь +Очередь можно создать один раз и пользоваться постоянно + +Для создания очереди нужно передать два параметра: +1. key - название очереди, чем оно сложнее тем лучше +2. vhost - название виртуального хоста(в данном случаи - `anticaptcha_vhost`) +""" + +answer = requests.post( + "https://pythoncaptcha.cloud:8001/register_key", + json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, +) +# если очередь успешно создана: +if answer == "OK": + + # создаём задание с callbackURL параметром + result = HCaptchaTask.HCaptchaTask( + anticaptcha_key=ANTICAPTCHA_KEY, + proxyType="http", + proxyAddress="8.8.8.8", + proxyPort=8080, + proxyLogin="proxyLoginHere", + proxyPassword="proxyPasswordHere", + userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", + callbackUrl=f"https://pythoncaptcha.cloud:8001/anticaptcha/fun_captcha/{QUEUE_KEY}", + ).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + print(result) + + # получение результата из кеша + print(CallbackClient.CallbackClient(task_id=result["taskId"]).captcha_handler()) + # получение результата из RabbitMQ очереди + print( + CallbackClient.CallbackClient( + task_id=result["taskId"], queue_name=QUEUE_KEY, call_type="queue" + ).captcha_handler() + ) + + # создаём задание с callbackURL параметром + result = HCaptchaTaskProxyless.HCaptchaTaskProxyless( + anticaptcha_key=ANTICAPTCHA_KEY, + callbackUrl=f"https://pythoncaptcha.cloud:8001/anticaptcha/fun_captcha/{QUEUE_KEY}", + ).captcha_handler(websiteURL=WEB_URL, websiteKey=SITE_KEY) + print(result) + + # получение результата из кеша + print(CallbackClient.CallbackClient(task_id=result["taskId"]).captcha_handler()) + # получение результата из RabbitMQ очереди + print( + CallbackClient.CallbackClient( + task_id=result["taskId"], queue_name=QUEUE_KEY, call_type="queue" + ).captcha_handler() + ) diff --git a/python3_anticaptcha/HCaptchaTask.py b/python3_anticaptcha/HCaptchaTask.py new file mode 100644 index 0000000..3f04509 --- /dev/null +++ b/python3_anticaptcha/HCaptchaTask.py @@ -0,0 +1,161 @@ +import time +import asyncio + +import aiohttp +import requests + +from python3_anticaptcha import app_key, create_task_url, get_sync_result, get_async_result + + +class HCaptchaTask: + def __init__( + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs + ): + """ + Модуль отвечает за решение HCaptchaTask + :param anticaptcha_key: Ключ от АнтиКапчи + :param sleep_time: Время ожидания решения + :param callbackUrl: URL для решения капчи с ответом через callback + :param kwargs: Параметры для подключения к прокси. + Подробнее в официальной документации или примерe + ./anticaptcha_examples/anticaptcha_hcaptcha_example.py + """ + if sleep_time < 5: + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") + self.sleep_time = sleep_time + + # Пайлоад для создания задачи + self.task_payload = { + "clientKey": anticaptcha_key, + "task": {"type": "HCaptchaTask"}, + "softId": app_key, + } + + # задаём callbackUrl если передан + if callbackUrl: + self.task_payload.update({"callbackUrl": callbackUrl}) + + # пайлоад для получения ответа сервиса + self.result_payload = {"clientKey": anticaptcha_key} + + # Если переданы ещё параметры - вносим их в payload + if kwargs: + for key in kwargs: + self.task_payload["task"].update({key: kwargs[key]}) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type: + return False + return True + + def captcha_handler(self, websiteURL: str, websiteKey: str, **kwargs) -> dict: + """ + Метод получает ссылку на страницу на которпой расположена капча и ключ капчи + :param websiteURL: Адрес страницы на которой решается капча + :param websiteKey: Ключ-индентификатор капчи на целевой странице. + :param kwargs: Дополнительные параметры для `requests.post(....)`. + :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) + """ + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) + # Отправляем на антикапча параметры фанкапич, + # в результате получаем JSON ответ содержащий номер решаемой капчи + captcha_id = requests.post( + create_task_url, json=self.task_payload, verify=False, **kwargs + ).json() + + # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера + if captcha_id["errorId"] == 0: + captcha_id = captcha_id["taskId"] + # обновляем пайлоад на получение решения капчи + self.result_payload.update({"taskId": captcha_id}) + else: + return captcha_id + # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ + if self.task_payload.get("callbackUrl"): + return self.result_payload + + else: + # Ждем решения капчи + time.sleep(self.sleep_time) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) + + +class aioHCaptchaTask: + def __init__( + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs + ): + """ + Модуль отвечает за решение HCaptcha + :param anticaptcha_key: Ключ от АнтиКапчи + :param sleep_time: Время ожидания решения + :param callbackUrl: URL для решения капчи с ответом через callback + :param kwargs: Параметры для подключения к прокси. + Подробнее в официальной документации или примерe + ./anticaptcha_examples/anticaptcha_hcaptcha_example.py + """ + if sleep_time < 5: + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") + self.sleep_time = sleep_time + + # Пайлоад для создания задачи + self.task_payload = { + "clientKey": anticaptcha_key, + "task": {"type": "HCaptchaTask"}, + "softId": app_key, + } + + # задаём callbackUrl если передан + if callbackUrl: + self.task_payload.update({"callbackUrl": callbackUrl}) + + # пайлоад для получения ответа сервиса + self.result_payload = {"clientKey": anticaptcha_key} + + # Если переданы ещё параметры - вносим их в payload + if kwargs: + for key in kwargs: + self.task_payload["task"].update({key: kwargs[key]}) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type: + return False + return True + + async def captcha_handler(self, websiteURL: str, websiteKey: str) -> dict: + """ + Метод получает ссылку на страницу на которпой расположена капча и ключ капчи + :param websiteURL: Адрес страницы на которой решается капча + :param websiteKey: Ключ-индентификатор капчи на целевой странице. + :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) + """ + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) + # Отправляем на антикапча параметры фанкапич, + # в результате получаем JSON ответ содержащий номер решаемой капчи + async with aiohttp.ClientSession() as session: + async with session.post(create_task_url, json=self.task_payload) as resp: + captcha_id = await resp.json() + + # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера + if captcha_id["errorId"] == 0: + captcha_id = captcha_id["taskId"] + # обновляем пайлоад на получение решения капчи + self.result_payload.update({"taskId": captcha_id}) + else: + return captcha_id + + # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ + if self.task_payload.get("callbackUrl"): + return self.result_payload + + else: + # Ждем решения капчи + await asyncio.sleep(self.sleep_time) + return await get_async_result( + result_payload=self.result_payload, sleep_time=self.sleep_time + ) diff --git a/python3_anticaptcha/HCaptchaTaskProxyless.py b/python3_anticaptcha/HCaptchaTaskProxyless.py new file mode 100644 index 0000000..2f48a43 --- /dev/null +++ b/python3_anticaptcha/HCaptchaTaskProxyless.py @@ -0,0 +1,134 @@ +import time +import asyncio + +import aiohttp +import requests + +from python3_anticaptcha import app_key, create_task_url, get_sync_result, get_async_result + + +class HCaptchaTaskProxyless: + def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None): + """ + Модуль отвечает за решение HCaptcha Proxyless + :param anticaptcha_key: Ключ от АнтиКапчи + :param sleep_time: Время ожидания решения + :param callbackUrl: URL для решения капчи с ответом через callback + """ + if sleep_time < 5: + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") + self.sleep_time = sleep_time + + self.task_payload = { + "clientKey": anticaptcha_key, + "task": {"type": "HCaptchaTaskProxyless"}, + "softId": app_key, + } + + # задаём callbackUrl если передан + if callbackUrl: + self.task_payload.update({"callbackUrl": callbackUrl}) + + # пайлоад для получения ответа сервиса + self.result_payload = {"clientKey": anticaptcha_key} + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type: + return False + return True + + def captcha_handler(self, websiteURL: str, websiteKey: str, **kwargs) -> dict: + """ + Метод получает ссылку на страницу на которпой расположена капча и ключ капчи + :param websiteURL: Адрес страницы на которой решается капча + :param websiteKey: Ключ-индентификатор капчи на целевой странице. + :param kwargs: Дополнительные параметры для `requests.post(....)`. + :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) + """ + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) + # Отправляем на антикапча параметры фанкапич, + # в результате получаем JSON ответ содержащий номер решаемой капчи + captcha_id = requests.post( + create_task_url, json=self.task_payload, verify=False, **kwargs + ).json() + + # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, + # иначе возвращаем ответ сервера + if captcha_id["errorId"] == 0: + captcha_id = captcha_id["taskId"] + # обновляем пайлоад на получение решения капчи + self.result_payload.update({"taskId": captcha_id}) + else: + return captcha_id + # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ + if self.task_payload.get("callbackUrl"): + return self.result_payload + + else: + # Ждем решения капчи + time.sleep(self.sleep_time) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) + + +class aioHCaptchaTaskProxyless: + def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None): + """ + Модуль отвечает за решение HCaptcha Proxyless + :param anticaptcha_key: Ключ от АнтиКапчи + :param sleep_time: Время ожидания решения + :param callbackUrl: URL для решения капчи с ответом через callback + """ + if sleep_time < 5: + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") + self.sleep_time = sleep_time + + # Пайлоад для создания задачи + self.task_payload = { + "clientKey": anticaptcha_key, + "task": {"type": "HCaptchaTaskProxyless"}, + "softId": app_key, + } + + # задаём callbackUrl если передан + if callbackUrl: + self.task_payload.update({"callbackUrl": callbackUrl}) + + # пайлоад для получения ответа сервиса + self.result_payload = {"clientKey": anticaptcha_key} + + async def captcha_handler(self, websiteURL: str, websiteKey: str) -> dict: + """ + Метод получает ссылку на страницу на которпой расположена капча и ключ капчи + :param websiteURL: Адрес страницы на которой решается капча + :param websiteKey: Ключ-индентификатор капчи на целевой странице. + :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) + """ + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) + # Отправляем на антикапча параметры фанкапич, + # в результате получаем JSON ответ содержащий номер решаемой капчи + async with aiohttp.ClientSession() as session: + async with session.post(create_task_url, json=self.task_payload) as resp: + captcha_id = await resp.json() + + # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, + # иначе возвращаем ответ сервера + if captcha_id["errorId"] == 0: + captcha_id = captcha_id["taskId"] + # обновляем пайлоад на получение решения капчи + self.result_payload.update({"taskId": captcha_id}) + else: + return captcha_id + + # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ + if self.task_payload.get("callbackUrl"): + return self.result_payload + + else: + # Ждем решения капчи + await asyncio.sleep(self.sleep_time) + return await get_async_result( + result_payload=self.result_payload, sleep_time=self.sleep_time + ) diff --git a/setup.py b/setup.py index d54bcf9..091ddc9 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ URL = "https://github.com/AndreiDrang/python3-anticaptcha" EMAIL = "drang.andray@gmail.com" AUTHOR = "AndreiDrang, redV0ID" REQUIRES_PYTHON = ">=3.6.0" -VERSION = "1.6" +VERSION = "1.6.1" REQUIRED = ["requests==2.23.0", "aiohttp==3.6.2", "pika==1.1.0"] here = os.path.abspath(os.path.dirname(__file__))