From b602e311740f9c31c7389f640ceea6e7aab647a5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 25 Nov 2019 20:08:18 +0300 Subject: [PATCH] Add pyproject.toml for black --- .../anticaptcah_image_to_text_example.py | 21 ++---- .../anticaptcha_control_example.py | 10 ++- .../anticaptcha_customcaptcha_example.py | 4 +- .../anticaptcha_fun_example.py | 3 +- .../anticaptcha_nocaptcha_example.py | 7 +- .../anticaptcha_square_net_task.py | 7 +- anticaptcha_examples/callback_examples.py | 9 +-- .../custom_result_handler_example.py | 4 +- anticaptcha_examples/selenium_recaptcha_v2.py | 8 +-- pyproject.toml | 16 +++++ python3_anticaptcha/AntiCaptchaAppStats.py | 6 +- python3_anticaptcha/AntiCaptchaControl.py | 22 ++---- python3_anticaptcha/CallbackClient.py | 16 ++--- python3_anticaptcha/CustomCaptchaTask.py | 19 ++--- python3_anticaptcha/CustomResultHandler.py | 12 +--- python3_anticaptcha/FunCaptchaTask.py | 35 ++-------- .../FunCaptchaTaskProxyless.py | 31 ++------- python3_anticaptcha/GeeTestTask.py | 19 ++--- python3_anticaptcha/GeeTestTaskProxyless.py | 31 ++------- python3_anticaptcha/ImageToTextTask.py | 57 ++++----------- python3_anticaptcha/NoCaptchaTask.py | 39 +++-------- python3_anticaptcha/NoCaptchaTaskProxyless.py | 43 +++--------- .../ReCaptchaV3TaskProxyless.py | 42 +++-------- python3_anticaptcha/SquareNetTextTask.py | 52 ++++---------- test.py | 16 +---- tests/test_Control.py | 32 +++------ tests/test_CustomCaptcha.py | 16 ++--- tests/test_CustomResultHandler.py | 12 +--- tests/test_ImageToText.py | 69 +++++-------------- tests/test_Recaptcha3Proxyless.py | 12 +--- 30 files changed, 172 insertions(+), 498 deletions(-) create mode 100644 pyproject.toml diff --git a/anticaptcha_examples/anticaptcah_image_to_text_example.py b/anticaptcha_examples/anticaptcah_image_to_text_example.py index 76cad79..655e7ec 100644 --- a/anticaptcha_examples/anticaptcah_image_to_text_example.py +++ b/anticaptcha_examples/anticaptcah_image_to_text_example.py @@ -25,17 +25,13 @@ save_format = 'const' . result = ImageToTextTask.ImageToTextTask( anticaptcha_key=ANTICAPTCHA_KEY, save_format="const" -).captcha_handler( - captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png" -) +).captcha_handler(captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png") print(result) # Пример который показывает работу антикапчи при решении капчи-изображением и сохранением её в качестве ВРЕМЕННОГО файла # Протестировано на Линуксах. Не используйте данный вариант на Windows! Возможно починим, но потом. # Example for working with captcha-image like a temporary file. Tested on UNIX-based systems. Don`t use it on Windows! -result = ImageToTextTask.ImageToTextTask( - anticaptcha_key=ANTICAPTCHA_KEY -).captcha_handler( +result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler( captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png" ) print(result) @@ -47,9 +43,7 @@ Base64 files An example of working with decoding in base64 captcha-file after download. On-the-fly-encoding """ base_64_link = base64.b64encode( - requests.get( - "http://85.255.8.26/static/image/common_image_example/862963.png" - ).content + requests.get("http://85.255.8.26/static/image/common_image_example/862963.png").content ).decode("utf-8") user_answer_base64 = ImageToTextTask.ImageToTextTask( @@ -69,9 +63,9 @@ captcha_file = "088636.png" # captcha_file = 'D:\/Python\/933588.png' # captcha_file = r'D:\Python\933588.png' -result = ImageToTextTask.ImageToTextTask( - anticaptcha_key=ANTICAPTCHA_KEY -).captcha_handler(captcha_file=captcha_file) +result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler( + captcha_file=captcha_file +) print(result) """ Пример для работы с локальными файлами @@ -150,8 +144,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" """ answer = requests.post( - "http://85.255.8.26:8001/register_key", - json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, + "http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"} ) # если очередь успешно создана: if answer == "OK": diff --git a/anticaptcha_examples/anticaptcha_control_example.py b/anticaptcha_examples/anticaptcha_control_example.py index 179ac2d..8ea5dd3 100644 --- a/anticaptcha_examples/anticaptcha_control_example.py +++ b/anticaptcha_examples/anticaptcha_control_example.py @@ -19,15 +19,13 @@ result = AntiCaptchaControl.AntiCaptchaControl( ).complaint_on_result(reported_id=-5, captcha_type="recaptcha") print(result) # Пример метода, принимающего ключ аккаунта и возвращающего актуальный баланс -result = AntiCaptchaControl.AntiCaptchaControl( - anticaptcha_key=ANTICAPTCHA_KEY -).get_balance() +result = AntiCaptchaControl.AntiCaptchaControl(anticaptcha_key=ANTICAPTCHA_KEY).get_balance() print(result) # Пример метода, выдающий информацию о загрузке очереди, в зависимости от ID очереди # В данном случае queue_id = 1, то есть получаем информацию по загрузке очереди ImageToText (язык английский) -result = AntiCaptchaControl.AntiCaptchaControl( - anticaptcha_key=ANTICAPTCHA_KEY -).get_queue_status(queue_id=1) +result = AntiCaptchaControl.AntiCaptchaControl(anticaptcha_key=ANTICAPTCHA_KEY).get_queue_status( + queue_id=1 +) print(result) # Асинхронный метод работы diff --git a/anticaptcha_examples/anticaptcha_customcaptcha_example.py b/anticaptcha_examples/anticaptcha_customcaptcha_example.py index c6580f8..287a63e 100644 --- a/anticaptcha_examples/anticaptcha_customcaptcha_example.py +++ b/anticaptcha_examples/anticaptcha_customcaptcha_example.py @@ -53,9 +53,7 @@ custom_form = """[ ]""" my_custom_task = CustomCaptchaTask.CustomCaptchaTask( - anticaptcha_key=ANTICAPTCHA_KEY, - assignment="Enter license plate number", - forms=custom_form, + anticaptcha_key=ANTICAPTCHA_KEY, assignment="Enter license plate number", forms=custom_form ).captcha_handler(imageUrl=imageUrl) diff --git a/anticaptcha_examples/anticaptcha_fun_example.py b/anticaptcha_examples/anticaptcha_fun_example.py index fda987c..4e2a2a7 100644 --- a/anticaptcha_examples/anticaptcha_fun_example.py +++ b/anticaptcha_examples/anticaptcha_fun_example.py @@ -70,8 +70,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" """ answer = requests.post( - "http://85.255.8.26:8001/register_key", - json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, + "http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"} ) # если очередь успешно создана: if answer == "OK": diff --git a/anticaptcha_examples/anticaptcha_nocaptcha_example.py b/anticaptcha_examples/anticaptcha_nocaptcha_example.py index cebe291..3dd7426 100644 --- a/anticaptcha_examples/anticaptcha_nocaptcha_example.py +++ b/anticaptcha_examples/anticaptcha_nocaptcha_example.py @@ -16,9 +16,7 @@ result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless( print(result) # contextmanager -with NoCaptchaTaskProxyless.NoCaptchaTaskProxyless( - anticaptcha_key=ANTICAPTCHA_KEY -) as nocaptcha: +with NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY) as nocaptcha: response = nocaptcha.captcha_handler( websiteURL="https://www.google.com/recaptcha/api2/demo", websiteKey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", @@ -75,8 +73,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" """ answer = requests.post( - "http://85.255.8.26:8001/register_key", - json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, + "http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"} ) # если очередь успешно создана: if answer == "OK": diff --git a/anticaptcha_examples/anticaptcha_square_net_task.py b/anticaptcha_examples/anticaptcha_square_net_task.py index f8c67f5..4bcb638 100644 --- a/anticaptcha_examples/anticaptcha_square_net_task.py +++ b/anticaptcha_examples/anticaptcha_square_net_task.py @@ -15,9 +15,7 @@ SquareNetTextTask : select objects on image with an overlay grid ANTICAPTCHA_KEY = "" # Простой пример работы / Base example -result = SquareNetTextTask.SquareNetTextTask( - anticaptcha_key=ANTICAPTCHA_KEY -).captcha_handler( +result = SquareNetTextTask.SquareNetTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler( objectName="captcha numbers", rowsCount=2, columnsCount=3, @@ -59,8 +57,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" """ answer = requests.post( - "http://85.255.8.26:8001/register_key", - json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, + "http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"} ) # если очередь успешно создана: if answer == "OK": diff --git a/anticaptcha_examples/callback_examples.py b/anticaptcha_examples/callback_examples.py index 79e5f18..bf4081a 100644 --- a/anticaptcha_examples/callback_examples.py +++ b/anticaptcha_examples/callback_examples.py @@ -27,8 +27,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue" """ answer = requests.post( - "http://85.255.8.26:8001/register_key", - json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}, + "http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"} ) # если очередь успешно создана: if answer == "OK": @@ -77,11 +76,7 @@ if answer == "OK": print(result) # получение результата из кеша - print( - CallbackClient.CallbackClient( - task_id=result["taskId"] - ).captcha_handler() - ) + print(CallbackClient.CallbackClient(task_id=result["taskId"]).captcha_handler()) # получение результата из RabbitMQ очереди, со стандартными параметрами print( CallbackClient.CallbackClient( diff --git a/anticaptcha_examples/custom_result_handler_example.py b/anticaptcha_examples/custom_result_handler_example.py index 6f243f1..f60e27d 100644 --- a/anticaptcha_examples/custom_result_handler_example.py +++ b/anticaptcha_examples/custom_result_handler_example.py @@ -20,9 +20,7 @@ print(response) async def run(): try: # io.IOBase - custom_result = CustomResultHandler.aioCustomResultHandler( - anticaptcha_key=ANTICAPTCHA_KEY - ) + custom_result = CustomResultHandler.aioCustomResultHandler(anticaptcha_key=ANTICAPTCHA_KEY) response = await custom_result.task_handler(task_id=TASK_ID) print(response) except Exception as err: diff --git a/anticaptcha_examples/selenium_recaptcha_v2.py b/anticaptcha_examples/selenium_recaptcha_v2.py index 5bac370..7fdd32f 100644 --- a/anticaptcha_examples/selenium_recaptcha_v2.py +++ b/anticaptcha_examples/selenium_recaptcha_v2.py @@ -19,17 +19,13 @@ browser_options.add_argument("--no-sandbox") browser_options.add_argument("disable-infobars") browser_options.add_argument("--disable-extensions") # run browser -browser = webdriver.Chrome( - executable_path="./chromefile/chromedriver", options=browser_options -) +browser = webdriver.Chrome(executable_path="./chromefile/chromedriver", options=browser_options) # open page browser.get(WEB_URL) # prepare captcha solver captcha_obj = NoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY) # solve recaptcha -browser.execute_script( - "document.getElementById('g-recaptcha-response').style.display = 'block';" -) +browser.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';") # wait script finish time.sleep(1) recaptcha_element = browser.find_element_by_xpath(recaptcha_xpath) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3d01dc4 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,16 @@ +[tool.black] +line-length = 99 +target-version = ['py36'] +exclude = ''' +/( + \.git + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist +)/ +''' \ No newline at end of file diff --git a/python3_anticaptcha/AntiCaptchaAppStats.py b/python3_anticaptcha/AntiCaptchaAppStats.py index 1eb058f..e6c5230 100644 --- a/python3_anticaptcha/AntiCaptchaAppStats.py +++ b/python3_anticaptcha/AntiCaptchaAppStats.py @@ -57,10 +57,6 @@ class aioAntiCaptchaAppStats: async with aiohttp.ClientSession() as session: async with session.post( get_app_stats_url, - json={ - "clientKey": self.ANTICAPTCHA_KEY, - "softId": softId, - "mode": mode, - }, + json={"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode}, ) as resp: return await resp.json() diff --git a/python3_anticaptcha/AntiCaptchaControl.py b/python3_anticaptcha/AntiCaptchaControl.py index 5659f78..3d646ed 100644 --- a/python3_anticaptcha/AntiCaptchaControl.py +++ b/python3_anticaptcha/AntiCaptchaControl.py @@ -38,9 +38,7 @@ class AntiCaptchaControl: Получение баланса аккаунта :return: Возвращает актуальный баланс """ - answer = requests.post( - get_balance_url, json={"clientKey": self.ANTICAPTCHA_KEY} - ) + answer = requests.post(get_balance_url, json={"clientKey": self.ANTICAPTCHA_KEY}) return answer.json() @@ -51,8 +49,7 @@ class AntiCaptchaControl: """ if mode not in mods: raise ValueError( - f"\nWrong `mode` parameter. Valid params: {mods}." - f"\n\tYour param - `{mode}`" + f"\nWrong `mode` parameter. Valid params: {mods}." f"\n\tYour param - `{mode}`" ) payload = {"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode} answer = requests.post(get_app_stats_url, json=payload) @@ -62,9 +59,7 @@ class AntiCaptchaControl: else: return {"errorId": 1} - def complaint_on_result( - self, reported_id: int, captcha_type: str = "image" - ) -> dict: + def complaint_on_result(self, reported_id: int, captcha_type: str = "image") -> dict: f""" Позволяет отправить жалобу на неправильно решённую капчу. :param reported_id: Отправляете ID капчи на которую нужно пожаловаться @@ -160,8 +155,7 @@ class aioAntiCaptchaControl: """ if mode not in mods: raise ValueError( - f"\nWrong `mode` parameter. Valid params: {mods}." - f"\n\tYour param - `{mode}`" + f"\nWrong `mode` parameter. Valid params: {mods}." f"\n\tYour param - `{mode}`" ) payload = {"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode} async with aiohttp.ClientSession() as session: @@ -171,9 +165,7 @@ class aioAntiCaptchaControl: else: return {"errorId": 1} - async def complaint_on_result( - self, reported_id: int, captcha_type: str = "image" - ) -> dict: + async def complaint_on_result(self, reported_id: int, captcha_type: str = "image") -> dict: f""" Позволяет отправить жалобу на неправильно решённую капчу. :param reported_id: Отправляете ID капчи на которую нужно пожаловаться @@ -190,9 +182,7 @@ class aioAntiCaptchaControl: # complaint on image captcha if captcha_type == "image": async with aiohttp.ClientSession() as session: - async with session.post( - incorrect_imagecaptcha_url, json=payload - ) as resp: + async with session.post(incorrect_imagecaptcha_url, json=payload) as resp: return await resp.json() # complaint on re-captcha elif captcha_type == "recaptcha": diff --git a/python3_anticaptcha/CallbackClient.py b/python3_anticaptcha/CallbackClient.py index ed9cf1b..27c9db3 100644 --- a/python3_anticaptcha/CallbackClient.py +++ b/python3_anticaptcha/CallbackClient.py @@ -125,9 +125,7 @@ class CallbackClient: return False - def captcha_handler( - self, requests_timeout: int = 1, auth_params: dict = None - ) -> dict: + def captcha_handler(self, requests_timeout: int = 1, auth_params: dict = None) -> dict: """ Метод отвечает за получение результата решения капчи с callback сервера :param requests_timeout: Время между запросами к серверу. @@ -162,19 +160,13 @@ class CallbackClient: else self.rtmq_password ) self.rtmq_host = ( - auth_params["rtmq_host"] - if auth_params.get("rtmq_host") - else self.rtmq_host + auth_params["rtmq_host"] if auth_params.get("rtmq_host") else self.rtmq_host ) self.rtmq_port = ( - auth_params["rtmq_port"] - if auth_params.get("rtmq_port") - else self.rtmq_port + auth_params["rtmq_port"] if auth_params.get("rtmq_port") else self.rtmq_port ) self.rtmq_vhost = ( - auth_params["rtmq_vhost"] - if auth_params.get("rtmq_vhost") - else self.rtmq_vhost + auth_params["rtmq_vhost"] if auth_params.get("rtmq_vhost") else self.rtmq_vhost ) # получение данных из кеша diff --git a/python3_anticaptcha/CustomCaptchaTask.py b/python3_anticaptcha/CustomCaptchaTask.py index c047400..0684179 100644 --- a/python3_anticaptcha/CustomCaptchaTask.py +++ b/python3_anticaptcha/CustomCaptchaTask.py @@ -4,12 +4,7 @@ import asyncio import requests import aiohttp -from python3_anticaptcha import ( - create_task_url, - app_key, - get_async_result, - get_sync_result, -) +from python3_anticaptcha import create_task_url, app_key, get_async_result, get_sync_result class CustomCaptchaTask: @@ -30,9 +25,7 @@ class CustomCaptchaTask: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -89,9 +82,7 @@ class CustomCaptchaTask: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioCustomCaptchaTask: @@ -112,9 +103,7 @@ class aioCustomCaptchaTask: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи diff --git a/python3_anticaptcha/CustomResultHandler.py b/python3_anticaptcha/CustomResultHandler.py index 3b664be..e1f7416 100644 --- a/python3_anticaptcha/CustomResultHandler.py +++ b/python3_anticaptcha/CustomResultHandler.py @@ -12,9 +12,7 @@ class CustomResultHandler: :param sleep_time: Solution timeout """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # payload for receiving service response self.result_payload = {"clientKey": anticaptcha_key} @@ -37,9 +35,7 @@ class CustomResultHandler: # wait captcha solution result time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioCustomResultHandler: @@ -50,9 +46,7 @@ class aioCustomResultHandler: :param sleep_time: Solution timeout """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # payload for receiving service response self.result_payload = {"clientKey": anticaptcha_key} diff --git a/python3_anticaptcha/FunCaptchaTask.py b/python3_anticaptcha/FunCaptchaTask.py index 8c31769..6af5310 100644 --- a/python3_anticaptcha/FunCaptchaTask.py +++ b/python3_anticaptcha/FunCaptchaTask.py @@ -4,21 +4,12 @@ import asyncio import aiohttp import requests -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class FunCaptchaTask: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение FunCaptcha @@ -28,9 +19,7 @@ class FunCaptchaTask: :param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_fun_example.py """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -73,9 +62,7 @@ class FunCaptchaTask: ) # Отправляем на антикапча параметры фанкапич, # в результате получаем JSON ответ содержащий номер решаемой капчи - captcha_id = requests.post( - create_task_url, json=self.task_payload, **kwargs - ).json() + captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json() # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: @@ -91,18 +78,12 @@ class FunCaptchaTask: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioFunCaptchaTask: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение FunCaptcha @@ -112,9 +93,7 @@ class aioFunCaptchaTask: :param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_fun_example.py """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи diff --git a/python3_anticaptcha/FunCaptchaTaskProxyless.py b/python3_anticaptcha/FunCaptchaTaskProxyless.py index 384ded3..7866e22 100644 --- a/python3_anticaptcha/FunCaptchaTaskProxyless.py +++ b/python3_anticaptcha/FunCaptchaTaskProxyless.py @@ -4,18 +4,11 @@ import asyncio import aiohttp import requests -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class FunCaptchaTaskProxyless: - def __init__( - self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None - ): + def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None): """ Модуль отвечает за решение FunCaptcha Proxyless :param anticaptcha_key: Ключ от АнтиКапчи @@ -23,9 +16,7 @@ class FunCaptchaTaskProxyless: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -63,9 +54,7 @@ class FunCaptchaTaskProxyless: ) # Отправляем на антикапча параметры фанкапич, # в результате получаем JSON ответ содержащий номер решаемой капчи - captcha_id = requests.post( - create_task_url, json=self.task_payload, **kwargs - ).json() + captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json() # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: @@ -81,15 +70,11 @@ class FunCaptchaTaskProxyless: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioFunCaptchaTaskProxyless: - def __init__( - self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None - ): + def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None): """ Модуль отвечает за решение FunCaptcha Proxyless :param anticaptcha_key: Ключ от АнтиКапчи @@ -97,9 +82,7 @@ class aioFunCaptchaTaskProxyless: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи diff --git a/python3_anticaptcha/GeeTestTask.py b/python3_anticaptcha/GeeTestTask.py index 4340306..fd5a176 100644 --- a/python3_anticaptcha/GeeTestTask.py +++ b/python3_anticaptcha/GeeTestTask.py @@ -4,12 +4,7 @@ import asyncio import aiohttp import requests -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class GeeTestTask: @@ -32,9 +27,7 @@ class GeeTestTask: :param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_gee_test_task.py """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -90,9 +83,7 @@ class GeeTestTask: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioGeeTestTask: @@ -115,9 +106,7 @@ class aioGeeTestTask: :param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_gee_test_task.py """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи diff --git a/python3_anticaptcha/GeeTestTaskProxyless.py b/python3_anticaptcha/GeeTestTaskProxyless.py index a0010c1..7ece363 100644 --- a/python3_anticaptcha/GeeTestTaskProxyless.py +++ b/python3_anticaptcha/GeeTestTaskProxyless.py @@ -4,12 +4,7 @@ import asyncio import requests import aiohttp -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class GeeTestTaskProxyless: @@ -30,19 +25,13 @@ class GeeTestTaskProxyless: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи self.task_payload = { "clientKey": anticaptcha_key, - "task": { - "type": "GeeTestTaskProxyless", - "websiteURL": websiteURL, - "gt": gt, - }, + "task": {"type": "GeeTestTaskProxyless", "websiteURL": websiteURL, "gt": gt}, "softId": app_key, } # задаём callbackUrl если передан @@ -86,9 +75,7 @@ class GeeTestTaskProxyless: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioGeeTestTaskProxyless: @@ -109,19 +96,13 @@ class aioGeeTestTaskProxyless: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи self.task_payload = { "clientKey": anticaptcha_key, - "task": { - "type": "GeeTestTaskProxyless", - "websiteURL": websiteURL, - "gt": gt, - }, + "task": {"type": "GeeTestTaskProxyless", "websiteURL": websiteURL, "gt": gt}, "softId": app_key, } # задаём callbackUrl если передан diff --git a/python3_anticaptcha/ImageToTextTask.py b/python3_anticaptcha/ImageToTextTask.py index 2d23b38..2140588 100644 --- a/python3_anticaptcha/ImageToTextTask.py +++ b/python3_anticaptcha/ImageToTextTask.py @@ -46,9 +46,7 @@ class ImageToTextTask: :param **kwargs: За подробной информацией обратитесь к документации на сайте anticaptcha. """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # проверяем переданный параметр способа сохранения капчи if save_format in SAVE_FORMATS: @@ -93,9 +91,7 @@ class ImageToTextTask: :return: Возвращает ID капчи """ # Создаём пайлоад, вводим ключ от сайта, выбираем метод ПОСТ и ждём ответа в JSON-формате - self.task_payload["task"].update( - {"body": base64.b64encode(content).decode("utf-8")} - ) + self.task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) # Отправляем на рукапча изображение капчи и другие парметры, # в результате получаем JSON ответ с номером решаемой капчи и получая ответ - извлекаем номер captcha_id = requests.post(create_task_url, json=self.task_payload).json() @@ -114,14 +110,10 @@ class ImageToTextTask: # Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем image_hash = hashlib.sha224(content).hexdigest() - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb" - ) as out_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image: out_image.write(content) - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb" - ) as captcha_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image: # Добавляем в пайлоад картинку и отправляем self.task_payload["task"].update( {"body": base64.b64encode(captcha_image.read()).decode("utf-8")} @@ -181,13 +173,9 @@ class ImageToTextTask: :return: Возвращает весь ответ сервера JSON-строкой. """ if captcha_file: - captcha_id = self.__read_captcha_image_file( - captcha_file, content_type="file" - ) + captcha_id = self.__read_captcha_image_file(captcha_file, content_type="file") elif captcha_base64: - captcha_id = self.__read_captcha_image_file( - captcha_base64, content_type="base64" - ) + captcha_id = self.__read_captcha_image_file(captcha_base64, content_type="base64") elif captcha_link: content = requests.get(captcha_link, **kwargs).content # согласно значения переданного параметра выбираем функцию для сохранения изображения @@ -215,9 +203,7 @@ class ImageToTextTask: else: # Ожидаем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioImageToTextTask: @@ -247,9 +233,7 @@ class aioImageToTextTask: :param **kwargs: За подробной информацией обратитесь к документации на сайте anticaptcha. """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # проверяем переданный параметр способа сохранения капчи if save_format in SAVE_FORMATS: @@ -326,14 +310,10 @@ class aioImageToTextTask: # Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем image_hash = hashlib.sha224(content).hexdigest() - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb" - ) as out_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image: out_image.write(content) - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb" - ) as captcha_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image: # Добавляем в пайлоад картинку и отправляем self.task_payload["task"].update( {"body": base64.b64encode(captcha_image.read()).decode("utf-8")} @@ -342,18 +322,14 @@ class aioImageToTextTask: # в результате получаем JSON ответ содержащий номер решаемой капчи async with aiohttp.ClientSession() as session: - async with session.post( - create_task_url, json=self.task_payload - ) as resp: + async with session.post(create_task_url, json=self.task_payload) as resp: captcha_id = await resp.json() # удаляем файл капчи os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash))) return captcha_id - async def __read_captcha_image_file( - self, content: bytes, content_type: str = "file" - ): + async def __read_captcha_image_file(self, content: bytes, content_type: str = "file"): """ Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64 :param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер @@ -384,10 +360,7 @@ class aioImageToTextTask: # Работа с капчёй async def captcha_handler( - self, - captcha_link: str = None, - captcha_file: str = None, - captcha_base64: str = None, + self, captcha_link: str = None, captcha_file: str = None, captcha_base64: str = None ) -> dict: """ Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер @@ -397,9 +370,7 @@ class aioImageToTextTask: """ # если был передан линк на локальный скачаный файл if captcha_file: - captcha_id = await self.__read_captcha_image_file( - captcha_file, content_type="file" - ) + captcha_id = await self.__read_captcha_image_file(captcha_file, content_type="file") elif captcha_base64: captcha_id = await self.__read_captcha_image_file( captcha_base64, content_type="base64" diff --git a/python3_anticaptcha/NoCaptchaTask.py b/python3_anticaptcha/NoCaptchaTask.py index 20f8ff1..35db008 100644 --- a/python3_anticaptcha/NoCaptchaTask.py +++ b/python3_anticaptcha/NoCaptchaTask.py @@ -4,21 +4,12 @@ import asyncio import requests import aiohttp -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class NoCaptchaTask: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 10, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 10, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение NoCaptcha. @@ -29,9 +20,7 @@ class NoCaptchaTask: """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -68,9 +57,7 @@ class NoCaptchaTask: :param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи) return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) """ - self.task_payload["task"].update( - {"websiteURL": websiteURL, "websiteKey": websiteKey} - ) + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) # отправляем реквест, в ответ получаем JSON содержащий номер решаемой капчи captcha_id = requests.post(create_task_url, json=self.task_payload).json() @@ -87,18 +74,12 @@ class NoCaptchaTask: else: # Ждем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioNoCaptchaTask: def __init__( - self, - anticaptcha_key: str, - sleep_time: str = 10, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: str = 10, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение NoCaptcha. @@ -109,9 +90,7 @@ class aioNoCaptchaTask: """ if sleep_time < 10: - raise ValueError( - f"Param `sleep_time` must be greater than 10. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -148,9 +127,7 @@ class aioNoCaptchaTask: :param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи) return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) """ - self.task_payload["task"].update( - {"websiteURL": websiteURL, "websiteKey": websiteKey} - ) + 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: diff --git a/python3_anticaptcha/NoCaptchaTaskProxyless.py b/python3_anticaptcha/NoCaptchaTaskProxyless.py index 7133315..20edbb2 100644 --- a/python3_anticaptcha/NoCaptchaTaskProxyless.py +++ b/python3_anticaptcha/NoCaptchaTaskProxyless.py @@ -4,21 +4,12 @@ import asyncio import requests import aiohttp -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result class NoCaptchaTaskProxyless: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение ReCaptcha без прокси @@ -28,9 +19,7 @@ class NoCaptchaTaskProxyless: :param kwargs: Другие необязательные параметры из документации """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -69,14 +58,10 @@ class NoCaptchaTaskProxyless: """ # вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи - self.task_payload["task"].update( - {"websiteURL": websiteURL, "websiteKey": websiteKey} - ) + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) # Отправляем на антикапчу пайлоад # в результате получаем JSON ответ содержащий номер решаемой капчи - captcha_id = requests.post( - create_task_url, json=self.task_payload, **kwargs - ).json() + captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json() # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: @@ -92,18 +77,12 @@ class NoCaptchaTaskProxyless: else: # Ожидаем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioNoCaptchaTaskProxyless: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение ReCaptcha без прокси @@ -113,9 +92,7 @@ class aioNoCaptchaTaskProxyless: :param kwargs: Другие необязательные параметры из документации """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -155,9 +132,7 @@ class aioNoCaptchaTaskProxyless: """ # вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи - self.task_payload["task"].update( - {"websiteURL": websiteURL, "websiteKey": websiteKey} - ) + self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) # Отправляем на антикапчу пайлоад # в результате получаем JSON ответ содержащий номер решаемой капчи async with aiohttp.ClientSession() as session: diff --git a/python3_anticaptcha/ReCaptchaV3TaskProxyless.py b/python3_anticaptcha/ReCaptchaV3TaskProxyless.py index ec80c66..7b59056 100644 --- a/python3_anticaptcha/ReCaptchaV3TaskProxyless.py +++ b/python3_anticaptcha/ReCaptchaV3TaskProxyless.py @@ -4,23 +4,14 @@ import asyncio import requests import aiohttp -from python3_anticaptcha import ( - create_task_url, - app_key, - get_sync_result, - get_async_result, -) +from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result MIN_SCORES = (0.3, 0.7, 0.9) class ReCaptchaV3TaskProxyless: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение ReCaptcha v3 без прокси @@ -30,9 +21,7 @@ class ReCaptchaV3TaskProxyless: :param kwargs: Другие необязательные параметры из документации """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be less than 5. U send - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be less than 5. U send - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи @@ -63,12 +52,7 @@ class ReCaptchaV3TaskProxyless: # Работа с капчёй def captcha_handler( - self, - websiteURL: str, - websiteKey: str, - minScore: float, - pageAction: str, - **kwargs, + self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str, **kwargs ) -> dict: """ Метод решения ReCaptcha V3 @@ -95,9 +79,7 @@ class ReCaptchaV3TaskProxyless: ) # Отправляем на антикапчу пайлоад # в результате получаем JSON ответ содержащий номер решаемой капчи - captcha_id = requests.post( - create_task_url, json=self.task_payload, **kwargs - ).json() + captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json() # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: @@ -113,18 +95,12 @@ class ReCaptchaV3TaskProxyless: else: # Ожидаем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioReCaptchaV3TaskProxyless: def __init__( - self, - anticaptcha_key: str, - sleep_time: int = 5, - callbackUrl: str = None, - **kwargs, + self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs ): """ Модуль отвечает за решение ReCaptcha V3 без прокси @@ -134,9 +110,7 @@ class aioReCaptchaV3TaskProxyless: :param kwargs: Другие необязательные параметры из документации """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be less than 5. U send - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be less than 5. U send - {sleep_time}") self.sleep_time = sleep_time # Пайлоад для создания задачи diff --git a/python3_anticaptcha/SquareNetTextTask.py b/python3_anticaptcha/SquareNetTextTask.py index 2114997..f8e3244 100644 --- a/python3_anticaptcha/SquareNetTextTask.py +++ b/python3_anticaptcha/SquareNetTextTask.py @@ -40,9 +40,7 @@ class SquareNetTextTask: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # проверяем переданный параметр способа сохранения капчи if save_format in ["const", "temp"]: @@ -83,9 +81,7 @@ class SquareNetTextTask: :return: Возвращает ID капчи """ # Создаём пайлоад, вводим ключ от сайта, выбираем метод ПОСТ и ждём ответа в JSON-формате - self.task_payload["task"].update( - {"body": base64.b64encode(content).decode("utf-8")} - ) + self.task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) # Отправляем на рукапча изображение капчи и другие парметры, # в результате получаем JSON ответ с номером решаемой капчи и получая ответ - извлекаем номер captcha_id = requests.post(create_task_url, json=self.task_payload).json() @@ -104,14 +100,10 @@ class SquareNetTextTask: # Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем image_hash = hashlib.sha224(content).hexdigest() - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb" - ) as out_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image: out_image.write(content) - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb" - ) as captcha_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image: # Добавляем в пайлоад картинку и отправляем self.task_payload["task"].update( {"body": base64.b64encode(captcha_image.read()).decode("utf-8")} @@ -196,9 +188,7 @@ class SquareNetTextTask: # проводим действия над файлом уже закодированном в base64(передаём на сервер) elif image_base64: - captcha_id = self.__read_captcha_image_file( - image_base64, content_type="base64" - ) + captcha_id = self.__read_captcha_image_file(image_base64, content_type="base64") # проводим действия над ссылкой на файл(скачиваем, сохраняем и передаём на сервер) elif image_link: @@ -228,9 +218,7 @@ class SquareNetTextTask: else: # Ожидаем решения капчи time.sleep(self.sleep_time) - return get_sync_result( - result_payload=self.result_payload, sleep_time=self.sleep_time - ) + return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time) class aioSquareNetTextTask: @@ -256,9 +244,7 @@ class aioSquareNetTextTask: :param callbackUrl: URL для решения капчи с ответом через callback """ if sleep_time < 5: - raise ValueError( - f"Param `sleep_time` must be greater than 5. U set - {sleep_time}" - ) + raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}") self.sleep_time = sleep_time # проверяем переданный параметр способа сохранения капчи if save_format in ["const", "temp"]: @@ -328,14 +314,10 @@ class aioSquareNetTextTask: # Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем image_hash = hashlib.sha224(content).hexdigest() - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb" - ) as out_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image: out_image.write(content) - with open( - os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb" - ) as captcha_image: + with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image: # Добавляем в пайлоад картинку и отправляем self.task_payload["task"].update( {"body": base64.b64encode(captcha_image.read()).decode("utf-8")} @@ -344,18 +326,14 @@ class aioSquareNetTextTask: # в результате получаем JSON ответ содержащий номер решаемой капчи async with aiohttp.ClientSession() as session: - async with session.post( - create_task_url, json=self.task_payload - ) as resp: + async with session.post(create_task_url, json=self.task_payload) as resp: captcha_id = await resp.json() # удаляем файл капчи os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash))) return captcha_id - async def __read_captcha_image_file( - self, content: bytes, content_type: str = "file" - ): + async def __read_captcha_image_file(self, content: bytes, content_type: str = "file"): """ Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64 :param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер @@ -418,13 +396,9 @@ class aioSquareNetTextTask: self.task_payload["task"].update({"columnsCount": columnsCount}) # если был передан линк на локальный скачаный файл if image_file: - captcha_id = await self.__read_captcha_image_file( - image_file, content_type="file" - ) + captcha_id = await self.__read_captcha_image_file(image_file, content_type="file") elif image_base64: - captcha_id = await self.__read_captcha_image_file( - image_base64, content_type="base64" - ) + captcha_id = await self.__read_captcha_image_file(image_base64, content_type="base64") elif image_link: # согласно значения переданного параметра выбираем функцию для сохранения изображения if self.save_format == "const": diff --git a/test.py b/test.py index 499e291..7c434e6 100644 --- a/test.py +++ b/test.py @@ -120,13 +120,7 @@ class TestAntiCaptcha(object): def test_recaptcha_v3_params(self): default_init_params = ["self", "anticaptcha_key", "sleep_time", "callbackUrl"] - default_handler_params = [ - "self", - "websiteURL", - "websiteKey", - "minScore", - "pageAction", - ] + default_handler_params = ["self", "websiteURL", "websiteKey", "minScore", "pageAction"] # get customcaptcha init and captcha_handler params aioinit_params = inspect.getfullargspec( ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless.__init__ @@ -165,9 +159,7 @@ class TestAntiCaptcha(object): # check response type assert type(response) is dict # check all dict keys - assert ["errorId", "errorCode", "errorDescription", "taskId"] == list( - response.keys() - ) + assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys()) # check error code # TODO change to `0` assert response["errorId"] == 31 @@ -239,9 +231,7 @@ class TestAntiCaptcha(object): anticaptcha_key=self.anticaptcha_key_fail ) as recaptcha: # check response type - assert ( - type(recaptcha) is ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless - ) + assert type(recaptcha) is ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless response = yield recaptcha.captcha_handler( websiteURL="https://www.google.com/recaptcha/api2/demo", diff --git a/tests/test_Control.py b/tests/test_Control.py index 178d95f..0cc5f6c 100644 --- a/tests/test_Control.py +++ b/tests/test_Control.py @@ -23,9 +23,7 @@ class TestAntiCaptcha(MainAntiCaptcha): default_complaint_params = ["self", "reported_id", "captcha_type"] default_queue_status_params = ["queue_id"] # get aiocaptchacontrol init and other params - aio_init_params = inspect.getfullargspec( - AntiCaptchaControl.aioAntiCaptchaControl.__init__ - ) + aio_init_params = inspect.getfullargspec(AntiCaptchaControl.aioAntiCaptchaControl.__init__) aio_balance_params = inspect.getfullargspec( AntiCaptchaControl.aioAntiCaptchaControl.get_balance ) @@ -40,12 +38,8 @@ class TestAntiCaptcha(MainAntiCaptcha): ) # get captchacontrol init and other params - init_params = inspect.getfullargspec( - AntiCaptchaControl.AntiCaptchaControl.__init__ - ) - balance_params = inspect.getfullargspec( - AntiCaptchaControl.AntiCaptchaControl.get_balance - ) + init_params = inspect.getfullargspec(AntiCaptchaControl.AntiCaptchaControl.__init__) + balance_params = inspect.getfullargspec(AntiCaptchaControl.AntiCaptchaControl.get_balance) app_stats_params = inspect.getfullargspec( AntiCaptchaControl.AntiCaptchaControl.get_app_stats ) @@ -151,9 +145,7 @@ class TestAntiCaptcha(MainAntiCaptcha): anticaptcha_key=self.anticaptcha_key_true ) with pytest.raises(ValueError): - assert captcha_control.get_app_stats( - softId=config.app_key, mode=self.WRONG_MODE - ) + assert captcha_control.get_app_stats(softId=config.app_key, mode=self.WRONG_MODE) def test_fail_key_complaint(self): captcha_control = AntiCaptchaControl.AntiCaptchaControl( @@ -161,8 +153,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) response = captcha_control.complaint_on_result( - reported_id=self.REPORT_ID, - captcha_type=AntiCaptchaControl.complaint_types[0], + reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0] ) assert isinstance(response, dict) @@ -175,8 +166,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) response = captcha_control.complaint_on_result( - reported_id=self.REPORT_ID, - captcha_type=AntiCaptchaControl.complaint_types[0], + reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0] ) assert isinstance(response, dict) @@ -278,8 +268,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) response = await captcha_control.complaint_on_result( - reported_id=self.REPORT_ID, - captcha_type=AntiCaptchaControl.complaint_types[0], + reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0] ) assert isinstance(response, dict) @@ -293,8 +282,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) response = await captcha_control.complaint_on_result( - reported_id=self.REPORT_ID, - captcha_type=AntiCaptchaControl.complaint_types[0], + reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0] ) assert isinstance(response, dict) @@ -341,9 +329,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) as captcha_control: for mode in AntiCaptchaControl.mods: - response = captcha_control.get_app_stats( - softId=config.app_key, mode=mode - ) + response = captcha_control.get_app_stats(softId=config.app_key, mode=mode) assert isinstance(response, dict) diff --git a/tests/test_CustomCaptcha.py b/tests/test_CustomCaptcha.py index 5e6ba09..663cff1 100644 --- a/tests/test_CustomCaptcha.py +++ b/tests/test_CustomCaptcha.py @@ -26,17 +26,13 @@ class TestAntiCaptcha(MainAntiCaptcha): ] default_handler_params = ["self", "imageUrl"] # get customcaptcha init and captcha_handler params - aioinit_params = inspect.getfullargspec( - CustomCaptchaTask.aioCustomCaptchaTask.__init__ - ) + aioinit_params = inspect.getfullargspec(CustomCaptchaTask.aioCustomCaptchaTask.__init__) aiohandler_params = inspect.getfullargspec( CustomCaptchaTask.aioCustomCaptchaTask.captcha_handler ) # get customcaptcha init and captcha_handler params - init_params = inspect.getfullargspec( - CustomCaptchaTask.CustomCaptchaTask.__init__ - ) + init_params = inspect.getfullargspec(CustomCaptchaTask.CustomCaptchaTask.__init__) handler_params = inspect.getfullargspec( CustomCaptchaTask.CustomCaptchaTask.captcha_handler ) @@ -67,9 +63,7 @@ class TestAntiCaptcha(MainAntiCaptcha): # check all dict keys assert ["clientKey", "task", "softId"] == list(request_payload.keys()) assert request_payload["softId"] == config.app_key - assert ["type", "assignment", "imageUrl"] == list( - request_payload["task"].keys() - ) + assert ["type", "assignment", "imageUrl"] == list(request_payload["task"].keys()) assert request_payload["task"]["type"] == "CustomCaptchaTask" def test_get_result_payload(self): @@ -80,9 +74,7 @@ class TestAntiCaptcha(MainAntiCaptcha): assert isinstance(customcaptcha, CustomCaptchaTask.CustomCaptchaTask) with requests_mock.Mocker() as req_mock: - req_mock.register_uri( - "POST", config.create_task_url, json=self.VALID_RESPONSE_JSON - ) + req_mock.register_uri("POST", config.create_task_url, json=self.VALID_RESPONSE_JSON) req_mock.register_uri( "POST", config.get_result_url, json=self.VALID_RESPONSE_RESULT_JSON ) diff --git a/tests/test_CustomResultHandler.py b/tests/test_CustomResultHandler.py index 33f7a06..9d1b375 100644 --- a/tests/test_CustomResultHandler.py +++ b/tests/test_CustomResultHandler.py @@ -24,9 +24,7 @@ class TestAntiCaptcha(MainAntiCaptcha): ) # get customcaptcha init and task_handler params - init_params = inspect.getfullargspec( - CustomResultHandler.CustomResultHandler.__init__ - ) + init_params = inspect.getfullargspec(CustomResultHandler.CustomResultHandler.__init__) handler_params = inspect.getfullargspec( CustomResultHandler.CustomResultHandler.task_handler ) @@ -53,9 +51,7 @@ class TestAntiCaptcha(MainAntiCaptcha): # check response type assert isinstance(response, dict) # check all dict keys - assert ["errorId", "errorCode", "errorDescription", "taskId"] == list( - response.keys() - ) + assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys()) @pytest.mark.asyncio async def test_response_aioresult_handler(self): @@ -70,9 +66,7 @@ class TestAntiCaptcha(MainAntiCaptcha): # check response type assert isinstance(response, dict) # check all dict keys - assert ["errorId", "errorCode", "errorDescription", "taskId"] == list( - response.keys() - ) + assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys()) """ Fail tests diff --git a/tests/test_ImageToText.py b/tests/test_ImageToText.py index dcbad4a..6df0bca 100644 --- a/tests/test_ImageToText.py +++ b/tests/test_ImageToText.py @@ -24,25 +24,16 @@ class TestAntiCaptcha(MainAntiCaptcha): "language", "callbackUrl", ] - default_handler_params = [ - "self", - "captcha_link", - "captcha_file", - "captcha_base64", - ] + default_handler_params = ["self", "captcha_link", "captcha_file", "captcha_base64"] # get customcaptcha init and captcha_handler params - aioinit_params = inspect.getfullargspec( - ImageToTextTask.aioImageToTextTask.__init__ - ) + aioinit_params = inspect.getfullargspec(ImageToTextTask.aioImageToTextTask.__init__) aiohandler_params = inspect.getfullargspec( ImageToTextTask.aioImageToTextTask.captcha_handler ) # get customcaptcha init and captcha_handler params init_params = inspect.getfullargspec(ImageToTextTask.ImageToTextTask.__init__) - handler_params = inspect.getfullargspec( - ImageToTextTask.ImageToTextTask.captcha_handler - ) + handler_params = inspect.getfullargspec(ImageToTextTask.ImageToTextTask.captcha_handler) # check aio module params assert default_init_params == aioinit_params[0] assert default_handler_params == aiohandler_params[0] @@ -51,17 +42,13 @@ class TestAntiCaptcha(MainAntiCaptcha): assert default_handler_params == handler_params[0] def test_create_task_payload(self): - customcaptcha = ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail - ) + customcaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail) # check response type assert isinstance(customcaptcha, ImageToTextTask.ImageToTextTask) with requests_mock.Mocker() as req_mock: req_mock.register_uri("GET", self.image_url, json=self.VALID_RESPONSE_JSON) - req_mock.register_uri( - "POST", config.create_task_url, json=self.ERROR_RESPONSE_JSON - ) + req_mock.register_uri("POST", config.create_task_url, json=self.ERROR_RESPONSE_JSON) customcaptcha.captcha_handler(captcha_link=self.image_url) history = req_mock.request_history @@ -71,25 +58,19 @@ class TestAntiCaptcha(MainAntiCaptcha): request_payload = history[1].json() # check all dict keys - assert ["clientKey", "task", "languagePool", "softId"] == list( - request_payload.keys() - ) + assert ["clientKey", "task", "languagePool", "softId"] == list(request_payload.keys()) assert request_payload["softId"] == config.app_key assert ["type", "body"] == list(request_payload["task"].keys()) assert request_payload["task"]["type"] == "ImageToTextTask" def test_get_result_payload(self): - customcaptcha = ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail - ) + customcaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail) # check response type assert isinstance(customcaptcha, ImageToTextTask.ImageToTextTask) with requests_mock.Mocker() as req_mock: req_mock.register_uri("GET", self.image_url, json=self.VALID_RESPONSE_JSON) - req_mock.register_uri( - "POST", config.create_task_url, json=self.VALID_RESPONSE_JSON - ) + req_mock.register_uri("POST", config.create_task_url, json=self.VALID_RESPONSE_JSON) req_mock.register_uri( "POST", config.get_result_url, json=self.VALID_RESPONSE_RESULT_JSON ) @@ -110,9 +91,7 @@ class TestAntiCaptcha(MainAntiCaptcha): """ def test_response_imagecaptcha(self): - imagecaptcha = ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail - ) + imagecaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail) # check response type assert isinstance(imagecaptcha, ImageToTextTask.ImageToTextTask) @@ -144,14 +123,12 @@ class TestAntiCaptcha(MainAntiCaptcha): def test_fail_imagecaptcha_value(self): with pytest.raises(ValueError): assert ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=self.WRONG_SAVE_FORMAT, + anticaptcha_key=self.anticaptcha_key_fail, save_format=self.WRONG_SAVE_FORMAT ) def test_fail_imagecaptcha_const(self): imagecaptcha = ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[0], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0] ) response = imagecaptcha.captcha_handler(captcha_link=self.image_url) @@ -160,8 +137,7 @@ class TestAntiCaptcha(MainAntiCaptcha): def test_fail_imagecaptcha_const_context(self): with ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[0], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0] ) as imagecaptcha: response = imagecaptcha.captcha_handler(captcha_link=self.image_url) @@ -170,8 +146,7 @@ class TestAntiCaptcha(MainAntiCaptcha): def test_fail_imagecaptcha_temp(self): imagecaptcha = ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[1], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1] ) response = imagecaptcha.captcha_handler(captcha_link=self.image_url) @@ -180,8 +155,7 @@ class TestAntiCaptcha(MainAntiCaptcha): def test_fail_imagecaptcha_temp_context(self): with ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[1], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1] ) as imagecaptcha: response = imagecaptcha.captcha_handler(captcha_link=self.image_url) @@ -192,15 +166,13 @@ class TestAntiCaptcha(MainAntiCaptcha): async def test_fail_aioimagecaptcha_value(self): with pytest.raises(ValueError): assert await ImageToTextTask.ImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=self.WRONG_SAVE_FORMAT, + anticaptcha_key=self.anticaptcha_key_fail, save_format=self.WRONG_SAVE_FORMAT ) @pytest.mark.asyncio async def test_fail_aioimagecaptcha_temp(self): imagecaptcha = ImageToTextTask.aioImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[1], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1] ) response = await imagecaptcha.captcha_handler(captcha_link=self.image_url) assert 1 == response["errorId"] @@ -208,8 +180,7 @@ class TestAntiCaptcha(MainAntiCaptcha): @pytest.mark.asyncio async def test_fail_aioimagecaptcha_temp_context(self): with ImageToTextTask.aioImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[1], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1] ) as imagecaptcha: response = await imagecaptcha.captcha_handler(captcha_link=self.image_url) assert 1 == response["errorId"] @@ -217,8 +188,7 @@ class TestAntiCaptcha(MainAntiCaptcha): @pytest.mark.asyncio async def test_fail_aioimagecaptcha_const(self): imagecaptcha = ImageToTextTask.aioImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[0], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0] ) response = await imagecaptcha.captcha_handler(captcha_link=self.image_url) assert 1 == response["errorId"] @@ -226,8 +196,7 @@ class TestAntiCaptcha(MainAntiCaptcha): @pytest.mark.asyncio async def test_fail_aioimagecaptcha_const_context(self): with ImageToTextTask.aioImageToTextTask( - anticaptcha_key=self.anticaptcha_key_fail, - save_format=ImageToTextTask.SAVE_FORMATS[0], + anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0] ) as imagecaptcha: response = await imagecaptcha.captcha_handler(captcha_link=self.image_url) assert 1 == response["errorId"] diff --git a/tests/test_Recaptcha3Proxyless.py b/tests/test_Recaptcha3Proxyless.py index ba0b91e..14f6884 100644 --- a/tests/test_Recaptcha3Proxyless.py +++ b/tests/test_Recaptcha3Proxyless.py @@ -15,13 +15,7 @@ class TestAntiCaptcha(MainAntiCaptcha): def test_recaptcha3_params(self): default_init_params = ["self", "anticaptcha_key", "sleep_time", "callbackUrl"] - default_handler_params = [ - "self", - "websiteURL", - "websiteKey", - "minScore", - "pageAction", - ] + default_handler_params = ["self", "websiteURL", "websiteKey", "minScore", "pageAction"] # get customcaptcha init and captcha_handler params aioinit_params = inspect.getfullargspec( ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless.__init__ @@ -72,9 +66,7 @@ class TestAntiCaptcha(MainAntiCaptcha): anticaptcha_key=self.anticaptcha_key_fail ) # check response type - assert isinstance( - recaptcha, ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless - ) + assert isinstance(recaptcha, ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless) response = await recaptcha.captcha_handler( websiteURL="https://www.google.com/recaptcha/api2/demo",