From d2d5196b44d2513b130cb6d7029e310ff0b900f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 18:00:08 +0000 Subject: [PATCH 001/175] Update myst-parser requirement from ==1.0.* to ==2.0.* Updates the requirements on [myst-parser](https://github.com/executablebooks/MyST-Parser) to permit the latest version. - [Release notes](https://github.com/executablebooks/MyST-Parser/releases) - [Changelog](https://github.com/executablebooks/MyST-Parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/executablebooks/MyST-Parser/compare/v1.0.0...v2.0.0) --- updated-dependencies: - dependency-name: myst-parser dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 64a06013..71617a36 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ pallets_sphinx_themes==2.* -myst-parser==1.0.* +myst-parser==2.0.* autodoc_pydantic==1.8.* From 753a1785ef516b160e88a28775c5e8341c1c66e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jul 2023 17:18:23 +0000 Subject: [PATCH 002/175] Update autodoc-pydantic requirement from ==1.8.* to ==1.9.* Updates the requirements on [autodoc-pydantic](https://github.com/mansenfranzen/autodoc_pydantic) to permit the latest version. - [Changelog](https://github.com/mansenfranzen/autodoc_pydantic/blob/main/changelog.rst) - [Commits](https://github.com/mansenfranzen/autodoc_pydantic/compare/v1.8.0-a.1...v1.9.0) --- updated-dependencies: - dependency-name: autodoc-pydantic dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 71617a36..49dad5be 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* -autodoc_pydantic==1.8.* +autodoc_pydantic==1.9.* From 7afdc82b9edcfc86619e5ebabd66ec0ec4f71a5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 17:55:58 +0000 Subject: [PATCH 003/175] Bump black from 23.3.0 to 23.7.0 Bumps [black](https://github.com/psf/black) from 23.3.0 to 23.7.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.3.0...23.7.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.style.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.style.txt b/requirements.style.txt index ceb18cb9..0264da21 100644 --- a/requirements.style.txt +++ b/requirements.style.txt @@ -1,4 +1,4 @@ # codestyle isort==5.* -black==23.3.0 +black==23.7.0 autoflake==2.* From c6cf0b41c393f7d4945954bfb32f6ddff9968906 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 17:30:33 +0000 Subject: [PATCH 004/175] Update autodoc-pydantic requirement from ==1.9.* to ==2.0.* Updates the requirements on [autodoc-pydantic](https://github.com/mansenfranzen/autodoc_pydantic) to permit the latest version. - [Changelog](https://github.com/mansenfranzen/autodoc_pydantic/blob/main/changelog.rst) - [Commits](https://github.com/mansenfranzen/autodoc_pydantic/compare/v1.9.0...v2.0.1) --- updated-dependencies: - dependency-name: autodoc-pydantic dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 49dad5be..29268972 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* -autodoc_pydantic==1.9.* +autodoc_pydantic==2.0.* From 0ad5f595c4edf5eb36091c2533f3c2295b608848 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 4 Sep 2023 07:15:52 +0300 Subject: [PATCH 005/175] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index baba5b97..5cbbffa8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ At the lowest price on the market, you may receive a variety of solutions, inclu [![PyPI version](https://badge.fury.io/py/python-rucaptcha.svg)](https://badge.fury.io/py/python-rucaptcha) [![Python versions](https://img.shields.io/pypi/pyversions/python-rucaptcha.svg?logo=python&logoColor=FBE072)](https://badge.fury.io/py/python-rucaptcha) -[![Downloads](https://pepy.tech/badge/python-rucaptcha/month)](https://pepy.tech/project/python-rucaptcha) +[![Downloads](https://static.pepy.tech/badge/python-rucaptcha/month)](https://pepy.tech/project/python-rucaptcha) [![Maintainability](https://api.codeclimate.com/v1/badges/aec93bb04a277cf0dde9/maintainability)](https://codeclimate.com/github/AndreiDrang/python-rucaptcha/maintainability) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/b4087362bd024b088b358b3e10e7a62f)](https://www.codacy.com/gh/AndreiDrang/python-rucaptcha/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AndreiDrang/python-rucaptcha&utm_campaign=Badge_Grade) From a93c41e14c61e5019aecc8db72a5bc43d0615127 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 17:52:08 +0000 Subject: [PATCH 006/175] Bump black from 23.7.0 to 23.9.1 Bumps [black](https://github.com/psf/black) from 23.7.0 to 23.9.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.7.0...23.9.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.style.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.style.txt b/requirements.style.txt index 0264da21..a2f0707b 100644 --- a/requirements.style.txt +++ b/requirements.style.txt @@ -1,4 +1,4 @@ # codestyle isort==5.* -black==23.7.0 +black==23.9.1 autoflake==2.* From 32bfea1daf14ea04ebd55709facb1f61ecd09479 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 25 Sep 2023 08:02:52 +0300 Subject: [PATCH 007/175] Api V2 implementation --- src/python_rucaptcha/__version__.py | 2 +- src/python_rucaptcha/core/base.py | 53 +++++------- src/python_rucaptcha/core/enums.py | 3 + src/python_rucaptcha/core/result_handler.py | 50 ++--------- src/python_rucaptcha/core/serializer.py | 63 +++++++++----- src/python_rucaptcha/text_captcha.py | 95 ++++++++++++--------- 6 files changed, 126 insertions(+), 140 deletions(-) diff --git a/src/python_rucaptcha/__version__.py b/src/python_rucaptcha/__version__.py index 0419a93d..0ae036ba 100644 --- a/src/python_rucaptcha/__version__.py +++ b/src/python_rucaptcha/__version__.py @@ -1 +1 @@ -__version__ = "5.3.1" +__version__ = "6.0" diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 286f3c30..036385bf 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -2,6 +2,7 @@ import time import uuid import asyncio +from typing import Union from pathlib import Path import aiohttp @@ -10,7 +11,7 @@ from . import enums from .config import RETRIES, ASYNC_RETRIES -from .serializer import ResponseSer, GetRequestSer, PostRequestSer, CaptchaOptionsSer, ServicePostResponseSer +from .serializer import CaptchaOptionsSer, CreateTaskBaseSer, CreateTaskResponseSer, GetTaskResultRequestSer from .result_handler import get_sync_result, get_async_result @@ -38,57 +39,43 @@ def __init__( # assign args to validator self.params = CaptchaOptionsSer(**locals(), **kwargs) - # prepare POST payload - self.post_payload = PostRequestSer(key=self.params.rucaptcha_key, method=method).dict(by_alias=True) - # prepare GET payload - self.get_payload = GetRequestSer(key=self.params.rucaptcha_key, action=action).dict( - by_alias=True, exclude_none=True + # prepare create task payload + self.create_task_payload = CreateTaskBaseSer(clientKey=self.params.rucaptcha_key, **locals()).dict( + by_alias=True ) - # prepare result payload - self.result = ResponseSer() + # prepare get task result data payload + self.get_task_payload = GetTaskResultRequestSer(clientKey=self.params.rucaptcha_key) for key in kwargs: - self.post_payload.update({key: kwargs[key]}) + self.create_task_payload.update({key: kwargs[key]}) # prepare session self.session = requests.Session() self.session.mount("http://", HTTPAdapter(max_retries=RETRIES)) self.session.mount("https://", HTTPAdapter(max_retries=RETRIES)) - def _processing_response(self, **kwargs: dict) -> dict: + def _processing_response(self, **kwargs: dict) -> Union[dict, Exception]: """ Method processing captcha solving task creation result :param kwargs: additional params for Requests library """ try: - response = ServicePostResponseSer( - **self.session.post(self.params.url_request, data=self.post_payload, **kwargs).json() + response = CreateTaskResponseSer( + **self.session.post(self.params.url_request, json=self.create_task_payload, **kwargs).json() ) # check response status - if response.status == 1: - self.result.taskId = response.request + if response.errorId == 0: + self.get_task_payload.taskId = response.taskId else: - self.result.error = True - self.result.errorBody = response.request + return response.dict() except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - - # check for errors while make request to server - if self.result.error: - return self.result.dict() - - # if all is ok - send captcha to service and wait solution - # update payload - add captcha taskId - self.get_payload.update({"id": self.result.taskId}) + return error # wait captcha solving time.sleep(self.params.sleep_time) + return get_sync_result( - get_payload=self.get_payload, - sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, url_response=self.params.url_response ) def url_open(self, url: str, **kwargs): @@ -130,7 +117,7 @@ async def _aio_processing_response(self) -> dict: # if all is ok - send captcha to service and wait solution # update payload - add captcha taskId - self.get_payload.update({"id": self.result.taskId}) + self.get_payload.taskId = self.result.taskId # wait captcha solving await asyncio.sleep(self.params.sleep_time) @@ -141,7 +128,7 @@ async def _aio_processing_response(self) -> dict: result=self.result, ) - async def __aio_make_post_request(self) -> ServicePostResponseSer: + async def __aio_make_post_request(self): async with aiohttp.ClientSession() as session: async for attempt in ASYNC_RETRIES: with attempt: @@ -149,7 +136,7 @@ async def __aio_make_post_request(self) -> ServicePostResponseSer: self.params.url_request, data=self.post_payload, raise_for_status=True ) as resp: response_json = await resp.json(content_type=None) - return ServicePostResponseSer(**response_json) + return GetTaskResultSer(**response_json) # Working with images methods diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 2ef92ca6..d4bb0d26 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -23,6 +23,8 @@ def list_names(cls) -> List[str]: class ServiceEnm(str, MyEnum): TWOCAPTCHA = "2captcha" RUCAPTCHA = "rucaptcha" + TWOCAPTCHA_V2 = "2captcha" + RUCAPTCHA_V2 = "rucaptcha" DEATHBYCAPTCHA = "deathbycaptcha" @@ -106,6 +108,7 @@ class AmazonWAFCaptchaEnm(str, MyEnum): class TextCaptchaEnm(str, MyEnum): TEXT = "text" + TextCaptchaTask = "TextCaptchaTask" class AudioCaptchaEnm(str, MyEnum): diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 20c854bb..a5a67593 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -1,44 +1,15 @@ import time import asyncio +from typing import Union import aiohttp import requests from .config import attempts_generator -from .serializer import ResponseSer, ServiceGetResponseSer +from .serializer import GetTaskResultRequestSer, GetTaskResultResponseSer -def result_processing(captcha_response: ServiceGetResponseSer, result: ResponseSer) -> dict: - """ - Function processing service response status values - """ - - # on error during solving - if captcha_response.status == 0: - result.error = True - result.errorBody = captcha_response.request - - # if solving is success - elif captcha_response.status == 1: - result.error = False - result.errorBody = None - result.captchaSolve = captcha_response.request - - # if this is ReCaptcha v3 then we get it from the server - if captcha_response.user_check and captcha_response.user_score: - result = result.dict() - result.update( - { - "user_check": captcha_response.user_check, - "user_score": captcha_response.user_score, - } - ) - return result - - return result.dict() - - -def get_sync_result(get_payload: dict, sleep_time: int, url_response: str, result: ResponseSer) -> dict: +def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str) -> Union[dict, Exception]: """ Function periodically send the SYNC request to service and wait for captcha solving result """ @@ -47,23 +18,18 @@ def get_sync_result(get_payload: dict, sleep_time: int, url_response: str, resul for _ in attempts: try: # send a request for the result of solving the captcha - captcha_response = ServiceGetResponseSer(**requests.get(url_response, params=get_payload).json()) + captcha_response = GetTaskResultResponseSer(**requests.post(url_response, json=get_payload.dict()).json()) # if the captcha has not been resolved yet, wait - if captcha_response.request == "CAPCHA_NOT_READY": + if captcha_response.status == "processing": time.sleep(sleep_time) - result.error = True - result.errorBody = "ERROR_CAPTCHA_UNSOLVABLE" else: - return result_processing(captcha_response, result) + return captcha_response.dict() except Exception as error: - result.error = True - result.errorBody = str(error) - - return result.dict() + return error -async def get_async_result(get_payload: dict, sleep_time: int, url_response: str, result: ResponseSer) -> dict: +async def get_async_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str) -> dict: """ Function periodically send the ASYNC request to service and wait for captcha solving result """ diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 29eea887..ba6141e0 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -1,6 +1,6 @@ import logging from uuid import uuid4 -from typing import Union, Optional +from typing import Optional from pydantic import Field, BaseModel, conint, constr, validator, root_validator @@ -84,14 +84,16 @@ class PostRequestSer(MyBaseModel): field_json: int = Field(1, alias="json") -class GetRequestSer(BaseModel): - key: str - action: str = "get" - field_json: int = Field(1, alias="json") +class TaskSer(MyBaseModel): + type: str - # Control keys - ids: str = None - id: str = None + +class CreateTaskBaseSer(MyBaseModel): + clientKey: str + task: TaskSer = None + languagePool: str = "en" + callbackUrl: str = None + softId: str = Field(APP_KEY, const=True) class CaptchaOptionsSer(BaseModel): @@ -135,6 +137,13 @@ def urls_set(cls, values): "url_response": f"http://api.{service_type}.com/2captcha/res.php", } ) + elif service_type in (enums.ServiceEnm.TWOCAPTCHA_V2, enums.ServiceEnm.RUCAPTCHA_V2): + values.update( + { + "url_request": f"https://api.{service_type}.com/createTask", + "url_response": f"https://api.{service_type}.com/getTaskResult", + } + ) else: values.update( { @@ -150,22 +159,32 @@ def urls_set(cls, values): """ -class ServicePostResponseSer(MyBaseModel): - status: int - request: str +class CreateTaskResponseSer(MyBaseModel): + errorId: int + taskId: int = None + + +class GetTaskResultRequestSer(BaseModel): + clientKey: str + taskId: int = None -class ServiceGetResponseSer(BaseModel): - status: int - request: Union[str, dict] +class GetTaskResultResponseSer(BaseModel): + errorId: int = 0 + status: str = None + solution: dict = None + cost: float = None + ip: str = None + createTime: int = None + endTime: int = None + solveCount: int = None - # ReCaptcha V3 params - user_check: str = "" - user_score: str = "" + +""" +Captcha tasks serializers +""" -class ResponseSer(MyBaseModel): - captchaSolve: Union[dict, str] = {} - taskId: Optional[int] = None - error: bool = False - errorBody: Optional[str] = None +class TextCaptchaTaskSer(TaskSer): + type: str = "TextCaptchaTask" + comment: str = "Если завтра суббота, то какой сегодня день?" diff --git a/src/python_rucaptcha/text_captcha.py b/src/python_rucaptcha/text_captcha.py index a074b877..2bdd5575 100644 --- a/src/python_rucaptcha/text_captcha.py +++ b/src/python_rucaptcha/text_captcha.py @@ -1,11 +1,12 @@ from .core.base import BaseCaptcha from .core.enums import TextCaptchaEnm +from .core.serializer import TextCaptchaTaskSer class TextCaptcha(BaseCaptcha): def __init__( self, - language: int = 0, + languagePool: str = "en", *args, **kwargs, ): @@ -14,40 +15,70 @@ def __init__( Args: rucaptcha_key: User API key - language: Captcha text lang: - 0 - not defined - 1 - captcha contains only Cyrillic - 2 - captcha contains only latin characters + languagePool: Used to choose the workers for solving the captcha by their language. + Applicable to image-based and text-based captchas. + Default: en. + en - English-speaking workers + rn - Russian-speaking workers. Examples: - >>> TextCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... language=2).captcha_handler(textcaptcha="Our planet name?") + >>> TextCaptcha(rucaptcha_key="aa90...51122", + ... languagePool='en' + ... ).captcha_handler(textcaptcha="If tomorrow is Saturday, what day is today?") { - 'captchaSolve': 'earth', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"SUNDAY" + }, + "cost":0.03669, + "ip":"46.53.241.91", + "createTime":1695617910, + "endTime":1695617965, + "solveCount":2 } - >>> TextCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122" - ... ).captcha_handler(textcaptcha="Our planet name?") + >>> TextCaptcha(rucaptcha_key="aa90...51122", + ... ).captcha_handler(textcaptcha="If tomorrow is Saturday, what day is today?") { - 'captchaSolve': 'earth', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"SUNDAY" + }, + "cost":0.03669, + "ip":"46.53.241.91", + "createTime":1695617910, + "endTime":1695617965, + "solveCount":2 + } + + >>> await TextCaptcha(rucaptcha_key="aa90...51122", + ... ).aio_captcha_handler(textcaptcha="If tomorrow is Saturday, what day is today?") + { + "errorId":0, + "status":"ready", + "solution":{ + "text":"SUNDAY" + }, + "cost":0.03669, + "ip":"46.53.241.91", + "createTime":1695617910, + "endTime":1695617965, + "solveCount":2 } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_text_captcha + https://2captcha.com/api-docs/get-task-result + https://rucaptcha.com/api-docs/get-task-result """ - super().__init__(method=TextCaptchaEnm.TEXT.value, *args, **kwargs) + super().__init__(method=TextCaptchaEnm.TextCaptchaTask.value, *args, **kwargs) - self.post_payload.update({"language": language}) + self.create_task_payload.update({"languagePool": languagePool}) def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: """ @@ -56,23 +87,13 @@ def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: Args: textcaptcha: Captcha text - Examples: - >>> TextCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... language=2).captcha_handler(textcaptcha="Our planet name?") - { - 'captchaSolve': 'earth', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: Check class docstirng for more info """ - self.post_payload.update({"textcaptcha": textcaptcha}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).dict()}) return self._processing_response(**kwargs) @@ -83,21 +104,11 @@ async def aio_captcha_handler(self, textcaptcha: str) -> dict: Args: textcaptcha: Captcha text - Examples: - >>> await TextCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... language=2).aio_captcha_handler(textcaptcha="Our planet name?") - { - 'captchaSolve': 'earth', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: Check class docstirng for more info """ - self.post_payload.update({"textcaptcha": textcaptcha}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).dict()}) return await self._aio_processing_response() From d52226c294eebf2562ae08c2e363c4a4dd5a4f63 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 25 Sep 2023 08:05:34 +0300 Subject: [PATCH 008/175] python 3.7 remove --- .github/workflows/build.yml | 2 +- .github/workflows/install.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 2 +- src/setup.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1dd10435..67a5cc8c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index 7eebaffe..e280c83c 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1df5ce2b..119c0278 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d39b127..d0ab5fe7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 diff --git a/src/setup.py b/src/setup.py index e1f9fd12..d2648cd4 100644 --- a/src/setup.py +++ b/src/setup.py @@ -125,11 +125,11 @@ def run(self): "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Development Status :: 5 - Production/Stable", "Framework :: AsyncIO", "Operating System :: Unix", From 7a1ad40eb9c21aca8b6235d0fe6298cf53c94afd Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 25 Sep 2023 08:07:22 +0300 Subject: [PATCH 009/175] Update dependabot.yml --- .github/dependabot.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 570c103f..f4c61d42 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,3 +4,10 @@ updates: directory: "/" # Location of package manifests schedule: interval: "weekly" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + commit-message: + prefix: "[github-actions] " From 3e204ab43bbf65de60f62f336590f56125c72b93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 05:08:33 +0000 Subject: [PATCH 010/175] [github-actions] Bump actions/setup-python from 3 to 4 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/install.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/sphinx.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67a5cc8c..d720a710 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index e280c83c..2261bc2b 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 119c0278..bbee25ab 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -29,7 +29,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 07662d31..dbade210 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 - name: Build docs requirements run: pip install -r docs/requirements.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d0ab5fe7..7858bbb7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} From 1d47c89229a12eda0d56d2b5af8d0bbc5171fe13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 05:08:40 +0000 Subject: [PATCH 011/175] [github-actions] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/install.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/sphinx.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67a5cc8c..553f9db5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index e280c83c..a8552978 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -23,7 +23,7 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 119c0278..a991bcf2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -27,7 +27,7 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 07662d31..29e48398 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v3 - name: Build docs requirements diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d0ab5fe7..38859c2a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,7 +32,7 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: From 72c5e84a48592a399d6f57c3cda6e3e6dd7e6174 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 25 Sep 2023 08:12:59 +0300 Subject: [PATCH 012/175] upd --- docs/requirements.txt | 2 +- pyproject.toml | 2 +- src/python_rucaptcha/core/base.py | 31 +++++++-------------- src/python_rucaptcha/core/result_handler.py | 21 ++++++-------- 4 files changed, 20 insertions(+), 36 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 29268972..1da77a43 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* -autodoc_pydantic==2.0.* +autodoc_pydantic==1.9.0 diff --git a/pyproject.toml b/pyproject.toml index 9ac9eea7..41eab815 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 120 -target-version = ['py310'] +target-version = ['py311'] exclude = ''' /( \.git diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 036385bf..c2175544 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -94,49 +94,38 @@ async def aio_url_read(self, url: str, **kwargs) -> bytes: async with session.get(url=url, **kwargs) as resp: return await resp.content.read() - async def _aio_processing_response(self) -> dict: + async def _aio_processing_response(self) -> Union[dict, Exception]: """ Method processing async captcha solving task creation result """ try: # make async or sync request - response = await self.__aio_make_post_request() + response = await self.__aio_create_task() # check response status - if response.status == 1: - self.result.taskId = response.request + if response.errorId == 0: + self.get_task_payload.taskId = response.taskId else: - self.result.error = True - self.result.errorBody = response.request + return response.dict() except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - - # check for errors while make request to server - if self.result.error: - return self.result.dict() - - # if all is ok - send captcha to service and wait solution - # update payload - add captcha taskId - self.get_payload.taskId = self.result.taskId + return error # wait captcha solving await asyncio.sleep(self.params.sleep_time) return await get_async_result( - get_payload=self.get_payload, + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, url_response=self.params.url_response, - result=self.result, ) - async def __aio_make_post_request(self): + async def __aio_create_task(self) -> CreateTaskResponseSer: async with aiohttp.ClientSession() as session: async for attempt in ASYNC_RETRIES: with attempt: async with session.post( - self.params.url_request, data=self.post_payload, raise_for_status=True + self.params.url_request, data=self.create_task_payload, raise_for_status=True ) as resp: response_json = await resp.json(content_type=None) - return GetTaskResultSer(**response_json) + return CreateTaskResponseSer(**response_json) # Working with images methods diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index a5a67593..071ce9d6 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -1,5 +1,4 @@ import time -import asyncio from typing import Union import aiohttp @@ -29,7 +28,9 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r return error -async def get_async_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str) -> dict: +async def get_async_result( + get_payload: GetTaskResultRequestSer, sleep_time: int, url_response: str +) -> Union[dict, Exception]: """ Function periodically send the ASYNC request to service and wait for captcha solving result """ @@ -41,18 +42,12 @@ async def get_async_result(get_payload: GetTaskResultRequestSer, sleep_time: int # send a request for the result of solving the captcha async with session.get(url_response, params=get_payload, raise_for_status=True) as resp: captcha_response = await resp.json(content_type=None) - captcha_response = ServiceGetResponseSer(**captcha_response) + captcha_response = GetTaskResultResponseSer(**captcha_response) # if the captcha has not been resolved yet, wait - if captcha_response.request == "CAPCHA_NOT_READY": - await asyncio.sleep(sleep_time) - result.error = True - result.errorBody = "ERROR_CAPTCHA_UNSOLVABLE" - + if captcha_response.status == "processing": + time.sleep(sleep_time) else: - return result_processing(captcha_response, result) - + return captcha_response.dict() except Exception as error: - result.error = True - result.errorBody = str(error) - return result.dict() + return error From f15f274188ab93bd70081eeaedd24839be94d478 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 29 Sep 2023 16:02:27 +0000 Subject: [PATCH 013/175] fix: src/requirements.txt to reduce vulnerabilities The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-PYDANTIC-5907722 --- src/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/requirements.txt b/src/requirements.txt index 889ea9fd..30a70da2 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,5 +1,5 @@ requests>=2.21.0 aiohttp>=3.7.4 -pydantic==1.* +pydantic==2.4.0* tenacity==8.* # websockets==11.* From 781de77df54039aab22796f380147bf88e45acfe Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 29 Sep 2023 17:09:28 +0000 Subject: [PATCH 014/175] fix: docs/requirements.txt to reduce vulnerabilities The following vulnerabilities are fixed by pinning transitive dependencies: - https://snyk.io/vuln/SNYK-PYTHON-PYDANTIC-5907722 --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index 1da77a43..79875ddb 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* autodoc_pydantic==1.9.0 +pydantic>=2.4.0 # not directly required, pinned by Snyk to avoid a vulnerability From 86502dc16db3ffdb592cbca87657a62ff416b6da Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 21:35:38 +0300 Subject: [PATCH 015/175] Update requirements.txt --- docs/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 79875ddb..5364728b 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* -autodoc_pydantic==1.9.0 -pydantic>=2.4.0 # not directly required, pinned by Snyk to avoid a vulnerability +autodoc_pydantic==2.0.1 +pydantic==2.4.0 From 7de87847d4ef18405985168d2d228bca248cd0be Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 21:35:40 +0300 Subject: [PATCH 016/175] Update requirements.txt --- src/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/requirements.txt b/src/requirements.txt index 30a70da2..90ba47be 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,5 +1,5 @@ requests>=2.21.0 aiohttp>=3.7.4 -pydantic==2.4.0* +pydantic==2.4.0 tenacity==8.* # websockets==11.* From eea28af89428d2f0b7216544b2324b9467a87a78 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 21:37:01 +0300 Subject: [PATCH 017/175] Update requirements.txt --- src/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/requirements.txt b/src/requirements.txt index 90ba47be..31877940 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,5 +1,5 @@ requests>=2.21.0 aiohttp>=3.7.4 -pydantic==2.4.0 +pydantic>=2.4.0 tenacity==8.* # websockets==11.* From f720547b70b978da187e517a476d3af2ef6d3dc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 18:38:31 +0000 Subject: [PATCH 018/175] Bump pydantic from 2.4.0 to 2.4.2 Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.4.0 to 2.4.2. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.4.0...v2.4.2) --- updated-dependencies: - dependency-name: pydantic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 5364728b..91e9c421 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ pallets_sphinx_themes==2.* myst-parser==2.0.* autodoc_pydantic==2.0.1 -pydantic==2.4.0 +pydantic==2.4.2 From 9f0457d6cb96867ad3645610150ad971d90151f3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:22:12 +0300 Subject: [PATCH 019/175] upd tests --- src/python_rucaptcha/core/base.py | 5 ++- src/python_rucaptcha/core/config.py | 2 +- src/python_rucaptcha/core/enums.py | 2 - src/python_rucaptcha/core/result_handler.py | 15 +++++-- src/python_rucaptcha/core/serializer.py | 12 ++--- src/python_rucaptcha/text_captcha.py | 1 - tests/conftest.py | 4 +- tests/test_audio.py | 30 ++++++------- tests/test_capypuzzle.py | 6 +-- tests/test_control.py | 26 +++++------ tests/test_funcaptcha.py | 6 +-- tests/test_geetest.py | 10 ++--- tests/test_hcaptcha.py | 10 ++--- tests/test_image.py | 50 +++++++++------------ tests/test_key_captcha.py | 6 +-- tests/test_lemin.py | 6 +-- tests/test_recaptcha.py | 10 ++--- tests/test_rotate.py | 26 +++++------ tests/test_text.py | 43 +++++++++--------- tests/test_turnstile.py | 6 +-- tests/test_yandex.py | 6 +-- 21 files changed, 139 insertions(+), 143 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index c2175544..94cb3e16 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -2,6 +2,7 @@ import time import uuid import asyncio +import logging from typing import Union from pathlib import Path @@ -101,6 +102,7 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: try: # make async or sync request response = await self.__aio_create_task() + logging.warning(f"{response = }") # check response status if response.errorId == 0: self.get_task_payload.taskId = response.taskId @@ -109,6 +111,7 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: except Exception as error: return error + logging.warning(f"{self.get_task_payload = }") # wait captcha solving await asyncio.sleep(self.params.sleep_time) return await get_async_result( @@ -122,7 +125,7 @@ async def __aio_create_task(self) -> CreateTaskResponseSer: async for attempt in ASYNC_RETRIES: with attempt: async with session.post( - self.params.url_request, data=self.create_task_payload, raise_for_status=True + self.params.url_request, json=self.create_task_payload, raise_for_status=True ) as resp: response_json = await resp.json(content_type=None) return CreateTaskResponseSer(**response_json) diff --git a/src/python_rucaptcha/core/config.py b/src/python_rucaptcha/core/config.py index 09e3dfca..e139884a 100644 --- a/src/python_rucaptcha/core/config.py +++ b/src/python_rucaptcha/core/config.py @@ -8,7 +8,7 @@ # Connection retry generator -def attempts_generator(amount: int = 7): +def attempts_generator(amount: int = 2): """ Function generates a generator of length equal to `amount` diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index d4bb0d26..df843502 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -23,8 +23,6 @@ def list_names(cls) -> List[str]: class ServiceEnm(str, MyEnum): TWOCAPTCHA = "2captcha" RUCAPTCHA = "rucaptcha" - TWOCAPTCHA_V2 = "2captcha" - RUCAPTCHA_V2 = "rucaptcha" DEATHBYCAPTCHA = "deathbycaptcha" diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 071ce9d6..67716a04 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -1,4 +1,5 @@ import time +import logging from typing import Union import aiohttp @@ -17,7 +18,9 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r for _ in attempts: try: # send a request for the result of solving the captcha - captcha_response = GetTaskResultResponseSer(**requests.post(url_response, json=get_payload.dict()).json()) + captcha_response = GetTaskResultResponseSer( + **requests.post(url_response, json=get_payload.dict()).json(), taskId=get_payload.taskId + ) # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": time.sleep(sleep_time) @@ -39,10 +42,15 @@ async def get_async_result( async with aiohttp.ClientSession() as session: for _ in attempts: try: + logging.warning(f"{get_payload = }") + logging.warning(f"{url_response = }") # send a request for the result of solving the captcha - async with session.get(url_response, params=get_payload, raise_for_status=True) as resp: + async with session.post(url_response, json=get_payload.dict(), raise_for_status=True) as resp: + logging.warning(f"{resp.status = }") captcha_response = await resp.json(content_type=None) - captcha_response = GetTaskResultResponseSer(**captcha_response) + logging.warning(f"{captcha_response = }") + captcha_response = GetTaskResultResponseSer(**captcha_response, taskId=get_payload.taskId) + logging.warning(f"{captcha_response = }") # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": @@ -50,4 +58,5 @@ async def get_async_result( else: return captcha_response.dict() except Exception as error: + logging.warning(f"{error = }") return error diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index ba6141e0..47f7ba54 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -2,7 +2,7 @@ from uuid import uuid4 from typing import Optional -from pydantic import Field, BaseModel, conint, constr, validator, root_validator +from pydantic.v1 import Field, BaseModel, conint, constr, validator, root_validator from . import enums from .config import APP_KEY @@ -137,20 +137,13 @@ def urls_set(cls, values): "url_response": f"http://api.{service_type}.com/2captcha/res.php", } ) - elif service_type in (enums.ServiceEnm.TWOCAPTCHA_V2, enums.ServiceEnm.RUCAPTCHA_V2): + else: values.update( { "url_request": f"https://api.{service_type}.com/createTask", "url_response": f"https://api.{service_type}.com/getTaskResult", } ) - else: - values.update( - { - "url_request": f"http://{service_type}.com/in.php", - "url_response": f"http://{service_type}.com/res.php", - } - ) return values @@ -178,6 +171,7 @@ class GetTaskResultResponseSer(BaseModel): createTime: int = None endTime: int = None solveCount: int = None + taskId: int = None """ diff --git a/src/python_rucaptcha/text_captcha.py b/src/python_rucaptcha/text_captcha.py index 2bdd5575..0e127e52 100644 --- a/src/python_rucaptcha/text_captcha.py +++ b/src/python_rucaptcha/text_captcha.py @@ -94,7 +94,6 @@ def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: Check class docstirng for more info """ self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).dict()}) - return self._processing_response(**kwargs) async def aio_captcha_handler(self, textcaptcha: str) -> dict: diff --git a/tests/conftest.py b/tests/conftest.py index 8d0559c7..42b28325 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,12 +9,12 @@ @pytest.fixture(scope="function") def delay_func(): - time.sleep(5) + time.sleep(0.2) @pytest.fixture(scope="class") def delay_class(): - time.sleep(20) + time.sleep(0.2) @pytest.mark.usefixtures("delay_func") diff --git a/tests/test_audio.py b/tests/test_audio.py index 5059f92a..2f170006 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import SaveFormatsEnm from python_rucaptcha.audio_captcha import AudioCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestAudioCaptcha(BaseTest): @@ -36,7 +36,7 @@ def test_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_link(self, save_format): @@ -56,7 +56,7 @@ def test_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_base64(self, save_format): @@ -77,7 +77,7 @@ def test_basic_data_base64(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -98,7 +98,7 @@ async def test_aio_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -119,7 +119,7 @@ async def test_aio_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -141,7 +141,7 @@ async def test_aio_basic_data_base64(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() """ Fail tests @@ -160,7 +160,7 @@ def test_no_captcha(self): assert result["errorBody"] == AudioCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -175,7 +175,7 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == AudioCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_link(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -188,7 +188,7 @@ def test_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_path(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -202,7 +202,7 @@ def test_wrong_path(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_base64(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -212,7 +212,7 @@ def test_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -226,7 +226,7 @@ async def test_aio_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_path(self): @@ -241,7 +241,7 @@ async def test_aio_wrong_path(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): @@ -254,4 +254,4 @@ async def test_aio_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() diff --git a/tests/test_capypuzzle.py b/tests/test_capypuzzle.py index af6db7a4..00a12763 100644 --- a/tests/test_capypuzzle.py +++ b/tests/test_capypuzzle.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import CapyPuzzleEnm from python_rucaptcha.capy_puzzle import CapyPuzzle -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestCapyPuzzle(BaseTest): @@ -48,7 +48,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -79,7 +79,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with CapyPuzzle( diff --git a/tests/test_control.py b/tests/test_control.py index 5dbeb74a..334eb5c2 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.control import Control from python_rucaptcha.core.enums import ControlEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestControl(BaseTest): @@ -32,7 +32,7 @@ def test_get_balance(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert float(result["captchaSolve"]) > 1 - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_get_balance(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) as instance: @@ -53,7 +53,7 @@ async def test_aio_get_balance(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert float(result["captchaSolve"]) > 1 - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_get_balance(self): @@ -74,7 +74,7 @@ def test_get_solution(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_get_solution(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET.value) as instance: @@ -95,7 +95,7 @@ async def test_aio_get_solution(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_get_solution(self): @@ -116,7 +116,7 @@ def test_get_cost(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID|ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_get_cost(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET2.value) as instance: @@ -137,7 +137,7 @@ async def test_aio_get_cost(self): assert result["errorBody"] is None assert isinstance(result["captchaSolve"], str) is True assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID|ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_get_cost(self): @@ -157,7 +157,7 @@ def test_domains_clean(self): assert result["taskId"] is None assert result["errorBody"] is None assert result["captchaSolve"] == "OK" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_domains_clean(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) as instance: @@ -177,7 +177,7 @@ async def test_aio_domains_clean(self): assert result["taskId"] is None assert result["errorBody"] is None assert result["captchaSolve"] == "OK" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_domains_clean(self): @@ -221,7 +221,7 @@ def test_report_bad(self): assert result["taskId"] is None assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_report_bad(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) as instance: @@ -241,7 +241,7 @@ async def test_aio_report_bad(self): assert result["taskId"] is None assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_report_bad(self): @@ -261,7 +261,7 @@ def test_report_good(self): assert result["taskId"] is None assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_report_good(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) as instance: @@ -281,7 +281,7 @@ async def test_aio_report_good(self): assert result["taskId"] is None assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_context_report_good(self): diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index b18c3728..a3f1fee0 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import FunCaptchaEnm from python_rucaptcha.fun_captcha import FunCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestFunCaptcha(BaseTest): @@ -48,7 +48,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -78,7 +78,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with FunCaptcha( diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 497f1a3c..a90e22a5 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.gee_test import GeeTest from python_rucaptcha.core.enums import GeetestEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestGeeTestBase(BaseTest): @@ -56,7 +56,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -82,7 +82,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with GeeTest( @@ -186,7 +186,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -212,7 +212,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with GeeTest( diff --git a/tests/test_hcaptcha.py b/tests/test_hcaptcha.py index aa6e4f81..d4107df7 100644 --- a/tests/test_hcaptcha.py +++ b/tests/test_hcaptcha.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest, DeathByTest from python_rucaptcha.hcaptcha import HCaptcha from python_rucaptcha.core.enums import ServiceEnm, HCaptchaEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class BaseHCaptcha(BaseTest): @@ -45,7 +45,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -73,7 +73,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with HCaptcha( @@ -146,7 +146,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -176,7 +176,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with HCaptcha( diff --git a/tests/test_image.py b/tests/test_image.py index 76bc9da3..d8714523 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest, DeathByTest from python_rucaptcha.core.enums import ServiceEnm, SaveFormatsEnm from python_rucaptcha.image_captcha import ImageCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultRequestSer class BaseImageCaptcha(BaseTest): @@ -25,16 +25,6 @@ def test_basic_data_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_link=self.captcha_url) - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_file(self, save_format): @@ -50,7 +40,7 @@ def test_basic_data_file(self, save_format): else: assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_base64(self, save_format): @@ -70,7 +60,7 @@ def test_basic_data_base64(self, save_format): else: assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -87,7 +77,7 @@ async def test_aio_basic_data_link(self, save_format): else: assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -104,7 +94,7 @@ async def test_aio_basic_data_file(self, save_format): else: assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -124,7 +114,7 @@ async def test_aio_basic_data_base64(self, save_format): else: assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() """ Fail tests @@ -139,7 +129,7 @@ def test_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -151,7 +141,7 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() def test_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -161,7 +151,7 @@ def test_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() def test_wrong_base64(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -171,7 +161,7 @@ def test_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -182,7 +172,7 @@ async def test_aio_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): @@ -195,7 +185,7 @@ async def test_aio_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() class TestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): @@ -224,7 +214,7 @@ def test_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_file(self, save_format): @@ -247,7 +237,7 @@ def test_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -271,7 +261,7 @@ async def test_aio_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -295,7 +285,7 @@ async def test_aio_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() """ Fail tests @@ -315,7 +305,7 @@ def test_no_captcha(self): assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -331,7 +321,7 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() def test_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") @@ -345,7 +335,7 @@ def test_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -360,4 +350,4 @@ async def test_aio_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultRequestSer().dict().keys() diff --git a/tests/test_key_captcha.py b/tests/test_key_captcha.py index f512bd1f..e1245193 100644 --- a/tests/test_key_captcha.py +++ b/tests/test_key_captcha.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import KeyCaptchaEnm from python_rucaptcha.key_captcha import KeyCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestKeyCaptcha(BaseTest): @@ -51,7 +51,7 @@ def test_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -84,7 +84,7 @@ async def test_aio_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with KeyCaptcha( diff --git a/tests/test_lemin.py b/tests/test_lemin.py index 85bd632c..4ad1ddb0 100644 --- a/tests/test_lemin.py +++ b/tests/test_lemin.py @@ -2,7 +2,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import LeminCroppedCaptchaEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer from python_rucaptcha.lemin_cropped_captcha import LeminCroppedCaptcha @@ -48,7 +48,7 @@ def test_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -79,7 +79,7 @@ async def test_aio_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with LeminCroppedCaptcha( diff --git a/tests/test_recaptcha.py b/tests/test_recaptcha.py index 27041832..0b4ab2f0 100644 --- a/tests/test_recaptcha.py +++ b/tests/test_recaptcha.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest, DeathByTest from python_rucaptcha.core.enums import ServiceEnm, ReCaptchaEnm from python_rucaptcha.re_captcha import ReCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class BaseReCaptcha(BaseTest): @@ -45,7 +45,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -73,7 +73,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with ReCaptcha( @@ -146,7 +146,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -176,7 +176,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with ReCaptcha( diff --git a/tests/test_rotate.py b/tests/test_rotate.py index a3f1418b..8d1c22eb 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -2,7 +2,7 @@ from tests.conftest import BaseTest from python_rucaptcha.rotate_captcha import RotateCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestRotateCaptcha(BaseTest): @@ -34,7 +34,7 @@ def test_basic_data_link(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_basic_data_file(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -53,7 +53,7 @@ def test_basic_data_file(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_basic_data_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -73,7 +73,7 @@ def test_basic_data_base64(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_link(self): @@ -93,7 +93,7 @@ async def test_aio_basic_data_link(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_file(self): @@ -113,7 +113,7 @@ async def test_aio_basic_data_file(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_base64(self): @@ -134,7 +134,7 @@ async def test_aio_basic_data_base64(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() """ Fail tests @@ -157,7 +157,7 @@ def test_no_captcha(self): assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -172,7 +172,7 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -185,7 +185,7 @@ def test_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -198,7 +198,7 @@ def test_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -212,7 +212,7 @@ async def test_aio_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): @@ -228,4 +228,4 @@ async def test_aio_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() diff --git a/tests/test_text.py b/tests/test_text.py index 75bd16df..2fbcf83c 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -1,12 +1,14 @@ +import logging + import pytest from tests.conftest import BaseTest from python_rucaptcha.text_captcha import TextCaptcha -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestTextCaptcha(BaseTest): - questions = ((0, "Our planet name?"), (1, "Название нашей планеты?"), (2, "Our planet name?")) + questions = (("en", "Our planet name?"),) """ Success tests @@ -17,45 +19,46 @@ def test_methods_exists(self): assert "aio_captcha_handler" in TextCaptcha.__dict__.keys() @pytest.mark.parametrize("lang_code, question", questions) - def test_basic_data(self, lang_code, question): - instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, language=lang_code) + def test_basic(self, lang_code: str, question: str): + instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, languagePool=lang_code) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(textcaptcha=question) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("lang_code, question", questions) - async def test_aio_basic_data(self, lang_code, question): - instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, language=lang_code) + async def test_aio_basic(self, lang_code, question): + instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, languagePool=lang_code) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(textcaptcha=question) + logging.warning(f"{result = }") assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + logging.warning(f"{result = }") + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() """ Fail tests diff --git a/tests/test_turnstile.py b/tests/test_turnstile.py index e3013c78..df9e7cfb 100644 --- a/tests/test_turnstile.py +++ b/tests/test_turnstile.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.turnstile import Turnstile from python_rucaptcha.core.enums import TurnstileCaptchaEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestTurnstile(BaseTest): @@ -43,7 +43,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -71,7 +71,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with Turnstile( diff --git a/tests/test_yandex.py b/tests/test_yandex.py index 9016ddd2..d15fbe7b 100644 --- a/tests/test_yandex.py +++ b/tests/test_yandex.py @@ -2,7 +2,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import YandexSmartCaptchaEnm -from python_rucaptcha.core.serializer import ResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer from python_rucaptcha.yandex_smart_captcha import YandexSmartCaptcha @@ -43,7 +43,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -71,7 +71,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == ResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_context_basic_data(self): with YandexSmartCaptcha( From cde94c4770e4c457b2367b78945ff652efce7091 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:31 +0300 Subject: [PATCH 020/175] Update base.py --- src/python_rucaptcha/core/base.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 94cb3e16..513160b5 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -12,7 +12,7 @@ from . import enums from .config import RETRIES, ASYNC_RETRIES -from .serializer import CaptchaOptionsSer, CreateTaskBaseSer, CreateTaskResponseSer, GetTaskResultRequestSer +from .serializer import TaskSer, CaptchaOptionsSer, CreateTaskBaseSer, CreateTaskResponseSer, GetTaskResultRequestSer from .result_handler import get_sync_result, get_async_result @@ -41,14 +41,14 @@ def __init__( self.params = CaptchaOptionsSer(**locals(), **kwargs) # prepare create task payload - self.create_task_payload = CreateTaskBaseSer(clientKey=self.params.rucaptcha_key, **locals()).dict( - by_alias=True - ) + self.create_task_payload = CreateTaskBaseSer( + clientKey=self.params.rucaptcha_key, task=TaskSer(type=method), **locals() + ).dict(by_alias=True) # prepare get task result data payload self.get_task_payload = GetTaskResultRequestSer(clientKey=self.params.rucaptcha_key) for key in kwargs: - self.create_task_payload.update({key: kwargs[key]}) + self.create_task_payload["task"].update({key: kwargs[key]}) # prepare session self.session = requests.Session() @@ -60,6 +60,7 @@ def _processing_response(self, **kwargs: dict) -> Union[dict, Exception]: Method processing captcha solving task creation result :param kwargs: additional params for Requests library """ + logging.warning(f"{self.create_task_payload = }") try: response = CreateTaskResponseSer( **self.session.post(self.params.url_request, json=self.create_task_payload, **kwargs).json() From a0359f9e9bb3a651995b2c8b7948dcef4d96ea44 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:40 +0300 Subject: [PATCH 021/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index df843502..22e9dd9e 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -37,7 +37,7 @@ class GeetestEnm(str, MyEnum): class ImageCaptchaEnm(str, MyEnum): - BASE64 = "base64" + ImageToTextTask = "ImageToTextTask" class CapyPuzzleEnm(str, MyEnum): @@ -105,7 +105,6 @@ class AmazonWAFCaptchaEnm(str, MyEnum): class TextCaptchaEnm(str, MyEnum): - TEXT = "text" TextCaptchaTask = "TextCaptchaTask" From c0cbeba618e7b63a636a701c3e96e0f94e11c1c1 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:41 +0300 Subject: [PATCH 022/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 47f7ba54..c528c10a 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -90,7 +90,7 @@ class TaskSer(MyBaseModel): class CreateTaskBaseSer(MyBaseModel): clientKey: str - task: TaskSer = None + task: TaskSer = {} languagePool: str = "en" callbackUrl: str = None softId: str = Field(APP_KEY, const=True) @@ -181,4 +181,4 @@ class GetTaskResultResponseSer(BaseModel): class TextCaptchaTaskSer(TaskSer): type: str = "TextCaptchaTask" - comment: str = "Если завтра суббота, то какой сегодня день?" + comment: str From 3d6fdcb464c7e169f80b593227fdcc2a68e4df39 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:45 +0300 Subject: [PATCH 023/175] Update image_captcha.py --- src/python_rucaptcha/image_captcha.py | 37 ++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index 65f4a55a..b540a479 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -4,6 +4,7 @@ from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, ImageCaptchaEnm +from .core.serializer import GetTaskResultResponseSer class ImageCaptcha(BaseCaptcha): @@ -112,10 +113,12 @@ def __init__( Notes: https://rucaptcha.com/api-rucaptcha#solving_normal_captcha """ - super().__init__(method=ImageCaptchaEnm.BASE64.value, *args, **kwargs) + super().__init__(method=ImageCaptchaEnm.ImageToTextTask.value, *args, **kwargs) + self.save_format = save_format self.img_clearing = img_clearing self.img_path = img_path + self.result = GetTaskResultResponseSer() def captcha_handler( self, @@ -160,28 +163,30 @@ def captcha_handler( """ # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: content = self.url_open(url=captcha_link, **kwargs).content except Exception as error: - self.result.error = True - self.result.errorBody = str(error) + self.result.errorId = 12 + self.result.solution = {"text": str(error)} return self.result.dict() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: self._file_const_saver(content, self.img_path) - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR + self.result.errorId = 12 + self.result.solution = {"text": "No captcha send"} return self.result.dict() return self._processing_response(**kwargs) @@ -229,28 +234,30 @@ async def aio_captcha_handler( """ # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: content = await self.aio_url_read(url=captcha_link, **kwargs) except Exception as error: - self.result.error = True - self.result.errorBody = str(error) + self.result.errorId = 12 + self.result.solution = {"text": str(error)} return self.result.dict() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: self._file_const_saver(content, self.img_path) - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR + self.result.errorId = 12 + self.result.solution = {"text": "No captcha send"} return self.result.dict() return await self._aio_processing_response() From f605e35033003e4516855da946e9e8cb64a589cf Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:48 +0300 Subject: [PATCH 024/175] Update test_image.py --- tests/test_image.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index d8714523..c248bc03 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -21,13 +21,23 @@ def test_methods_exists(self): assert "aio_captcha_handler" in ImageCaptcha.__dict__.keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - def test_basic_data_link(self, save_format): + def test_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_link=self.captcha_url) + assert isinstance(result, dict) is True + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - def test_basic_data_file(self, save_format): + def test_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_file=self.captcha_file) @@ -43,7 +53,7 @@ def test_basic_data_file(self, save_format): assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - def test_basic_data_base64(self, save_format): + def test_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY @@ -64,7 +74,7 @@ def test_basic_data_base64(self, save_format): @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - async def test_aio_basic_data_link(self, save_format): + async def test_aio_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) @@ -81,7 +91,7 @@ async def test_aio_basic_data_link(self, save_format): @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - async def test_aio_basic_data_file(self, save_format): + async def test_aio_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) @@ -98,7 +108,7 @@ async def test_aio_basic_data_file(self, save_format): @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - async def test_aio_basic_data_base64(self, save_format): + async def test_aio_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY From f3ea75613887f11b7d3caf17fda3951f45da6f47 Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 22:50:50 +0300 Subject: [PATCH 025/175] Update test_text.py --- tests/test_text.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/test_text.py b/tests/test_text.py index 2fbcf83c..11792270 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -1,5 +1,3 @@ -import logging - import pytest from tests.conftest import BaseTest @@ -8,7 +6,7 @@ class TestTextCaptcha(BaseTest): - questions = (("en", "Our planet name?"),) + questions = (("en", "Our planet name?"), ("rn", "Название нашей планеты?")) """ Success tests @@ -47,9 +45,8 @@ async def test_aio_basic(self, lang_code, question): result = await instance.aio_captcha_handler(textcaptcha=question) - logging.warning(f"{result = }") assert isinstance(result, dict) is True - logging.warning(f"{result = }") + if not result["errorId"]: assert result["status"] == "ready" assert isinstance(result["solution"]["text"], str) is True From 7c0cf3c1a84479487c2a887d6c36eff14d4b5fee Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 23:03:15 +0300 Subject: [PATCH 026/175] Update test_image.py --- tests/test_image.py | 91 ++++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 50 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index c248bc03..4cefe744 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -42,15 +42,14 @@ def test_basic_file(self, save_format): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_base64(self, save_format): @@ -62,14 +61,14 @@ def test_basic_base64(self, save_format): result = instance.captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -79,14 +78,14 @@ async def test_aio_basic_link(self, save_format): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -96,14 +95,14 @@ async def test_aio_basic_file(self, save_format): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -116,14 +115,14 @@ async def test_aio_basic_base64(self, save_format): with open(self.captcha_file, "rb") as f: result = await instance.aio_captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] == 1 + assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultRequestSer().dict().keys() """ @@ -135,10 +134,8 @@ def test_no_captcha(self): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} + assert result["errorId"] == 12 + assert isinstance(result["solution"]["text"], str) is True assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -147,10 +144,8 @@ async def test_aio_no_captcha(self): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} + assert result["errorId"] == 12 + assert isinstance(result["solution"]["text"], str) is True assert result.keys() == GetTaskResultRequestSer().dict().keys() def test_wrong_link(self): @@ -158,9 +153,8 @@ def test_wrong_link(self): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} + assert result["errorId"] == 12 + assert isinstance(result["solution"]["text"], str) is True assert result.keys() == GetTaskResultRequestSer().dict().keys() def test_wrong_base64(self): @@ -168,9 +162,8 @@ def test_wrong_base64(self): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] == 15 assert result["taskId"] is None - assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -179,9 +172,8 @@ async def test_aio_wrong_link(self): assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} + assert result["errorId"] == 12 + assert isinstance(result["solution"]["text"], str) is True assert result.keys() == GetTaskResultRequestSer().dict().keys() @pytest.mark.asyncio @@ -192,13 +184,12 @@ async def test_aio_wrong_base64(self): captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8") ) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] == 15 assert result["taskId"] is None - assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultRequestSer().dict().keys() -class TestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): +class XTestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): """ Success tests """ From 4c4108bc0c02b5a4d15cfae3f6d85e6a3659f82c Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 23:20:29 +0300 Subject: [PATCH 027/175] Update test_image.py --- tests/test_image.py | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index 4cefe744..ccb8aa47 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest, DeathByTest from python_rucaptcha.core.enums import ServiceEnm, SaveFormatsEnm from python_rucaptcha.image_captcha import ImageCaptcha -from python_rucaptcha.core.serializer import GetTaskResultRequestSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class BaseImageCaptcha(BaseTest): @@ -41,6 +41,7 @@ def test_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_file=self.captcha_file) + assert isinstance(result, dict) is True if not result["errorId"]: @@ -69,7 +70,7 @@ def test_basic_base64(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -86,7 +87,7 @@ async def test_aio_basic_link(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -103,7 +104,7 @@ async def test_aio_basic_file(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -123,7 +124,7 @@ async def test_aio_basic_base64(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() """ Fail tests @@ -136,7 +137,7 @@ def test_no_captcha(self): assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -146,7 +147,7 @@ async def test_aio_no_captcha(self): assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -155,7 +156,7 @@ def test_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_base64(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -164,7 +165,7 @@ def test_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] == 15 assert result["taskId"] is None - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -174,7 +175,7 @@ async def test_aio_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): @@ -186,7 +187,7 @@ async def test_aio_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] == 15 assert result["taskId"] is None - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() class XTestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): @@ -215,7 +216,7 @@ def test_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_file(self, save_format): @@ -238,7 +239,7 @@ def test_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -262,7 +263,7 @@ async def test_aio_basic_data_link(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) @@ -286,7 +287,7 @@ async def test_aio_basic_data_file(self, save_format): assert result["error"] is True assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() """ Fail tests @@ -306,7 +307,7 @@ def test_no_captcha(self): assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -322,7 +323,7 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() def test_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") @@ -336,7 +337,7 @@ def test_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -351,4 +352,4 @@ async def test_aio_wrong_link(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultRequestSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().dict().keys() From e803de3ca75f6ce9f92e013b8c407e620799caea Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 23:23:33 +0300 Subject: [PATCH 028/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 22e9dd9e..b15998f1 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -101,7 +101,8 @@ class TurnstileCaptchaEnm(str, MyEnum): class AmazonWAFCaptchaEnm(str, MyEnum): - AMAZON_WAF = "amazon_waf" + AmazonTask = "AmazonTask" + AmazonTaskProxyless = "AmazonTaskProxyless" class TextCaptchaEnm(str, MyEnum): From a8b9454b1e0d0b3775cf7e6d71b077d3f28b01ec Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 3 Oct 2023 23:23:36 +0300 Subject: [PATCH 029/175] Update test_image.py --- tests/test_image.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index ccb8aa47..a3cc6398 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -165,7 +165,6 @@ def test_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] == 15 assert result["taskId"] is None - assert result.keys() == GetTaskResultResponseSer().dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -187,7 +186,6 @@ async def test_aio_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] == 15 assert result["taskId"] is None - assert result.keys() == GetTaskResultResponseSer().dict().keys() class XTestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): From 2caa5e0806b732a449ddbd8f09142d8019303e8c Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 7 Oct 2023 09:38:18 +0300 Subject: [PATCH 030/175] Create RuCaptchaHigh.png --- files/RuCaptchaHigh.png | Bin 0 -> 986465 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 files/RuCaptchaHigh.png diff --git a/files/RuCaptchaHigh.png b/files/RuCaptchaHigh.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5aba72c4022be5cdcb70ccbf65dd23c49b93ad GIT binary patch literal 986465 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�Z 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⋙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 sSeQ!Ql1nIrt+O0tN3&JL?sF+Xj{Q3 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


M<*1(*1K; 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�Xs? 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 Be%}B9 literal 0 HcmV?d00001 From bc566b345c7f89998325b5fd21bf8d6b26747676 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 7 Oct 2023 09:38:24 +0300 Subject: [PATCH 031/175] Update RuCaptchaLow.png --- files/RuCaptchaLow.png | Bin 34925 -> 3751 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/files/RuCaptchaLow.png b/files/RuCaptchaLow.png index 96df96beefeb493178181c4b110f5e2e9d43b4c3..322627b91a174995b72c6db3f97c9697478d544c 100644 GIT binary patch literal 3751 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

eYAX{t@IP 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

N5T|QV;&##mOEkAD}yPCIz5LdJ#CJ zk(bU;tGGoI!ab|B!|vnL+}sxEG~|=vCB`S45c|Gx3Sx&Qeb_mdbtZA{eV^3;NNVCa;O(V7-ldFB?!A=5)b9IppK3a>|4QT>23 z<@fv72QdF6dqg$kOna}a7ozLK6o+~MRA6z`Q<=2qvTeVnjSKG2xC(wX05o`ZWrf{N z){;6`nzuxkOO5KkKKJUcSFg``=_2Av@rXmp?$GI;M-0)QnkJDZ&7~_4mWa+D;G~a9 zeQ}=dt;8le*8k6^SMUW16I&Jtd5^VP-?;#7fV^{}3^X zh?kUl{=dq4cunR^p`lb>o%h`~hc@N|-2oSw{qpcdIGrR@OqNMU%yITrp2?@m>i95l zLq%zxRvy7^?*G1oZlk%tY)Vvq^$btO%GLSltSq})2M(SNW9o(%BX1$#qT`P~%6+E8 z^gngLcVjjSPou5!Tb#arKVJ7CM82RO;DB>$UODTZY9A_dTzEi316P_N?}BXDe8oqB zq?z}CzBK1!2=Hob!2xZgb2{EW znbd6mkbMRqi^?Q-dcMY7Ao^j0^Qp`CE%An?3A{3i>Z4tN)3moAKCFX&@NiA+eqi*e zy=cEI7s3+@1D%o%a0(jlq^(ft1v(v@h=(IlKQFv$n0p$XTc<0 z%9RputewsI|Ky|mx`8XJXDjn#Vz9awVCtI?G3<*d_<2JLVGW` z$DI)olpGmU;Fk_=7=xeQ;;UxO&nnv}{F}I~EK=vD{SHd8OKqF^lk_&9&pUe0%!!~f z>bY(F#9cSmoH8~!Qnobp1pOI-8}YxsUU@MeEj1C+3@J)sGs8X%O-D+^nf0h7&f)V2OA_ zAQT&!lYO0bXArcbzm^hh}Q2nxT_e$%x)5*YuqCGxbO%;W}=4ZbXRq~0!T(} z!RV;pDcE%|Q_cVLQ)LciB&`4|Yjg|4LDh1` zlza|TS9rDXdZnkwb=91riYyOh9Guag&K6_a*S0vN_l~CZcjcL2Foj(jMP^5CdUHn4 zh!}wkj!ZU*d`855hs`3GvQY5+b~%B8gSJ!Vhn_$+vRqJ`fX>9fpL;w|_%9kJf*@v3 za;6Y+kW!etmObD=+aS~jW~($?GK{y!{;)Sk@>}$)M$#AL0(nzXLBW$3+my3Yo*r9dilyqsl6Y)yr;72F*1zl)N{Rs=vR<{7k28#P*o`H2R8Uv2xt}^X}pB8zlm4Pc4Vs%K!HjQ3pWv&7V%2-rYU2X019-=3ZXMVR`aj>(JaNu**4hH3kOzvMGUJl^xa z$&UYh=4vpKD_`Qlfc!}c34NRywB0O(nKT^GO3EUl{*hrV1v+(ijhxM3G#9*_vsc+? z{96YM@&Wna`qnUG?cu5@yv@%hbD(6dtgI}sB6Fr^q4!nr^=EzmNF+7xi0HEa@f-LQL?>4dF6Oc1;8c?KE`G zoZ~L8Gsaa={K_0lu#8)}#yPW;R#{2Ko`yZOGds8%;u zn&e4DUCneCIaGx@IZb8R9$FHU7$Ts}T?S8fNxm|+XpfXcq?7U)xBas9AT~%;DbdV5 zP);O>SddZBHvQiHOwD18#f^*|%H|Hu+a-*LxKQtiG;LW}?K^uEAI4Ig2USmR&71-P zuqe%A2boo4^3hRQR>h>^9x}OC58eIjiXk(O@4v^q)oX&@(v}za88yk>DH(n98?ySU z`uu|r9Z3wF>})2DvL1QMTQsd&TvO+x`~8*5|0eE0;{qgjOM7S}@--L42s-(A8D)72 z6_fS&btu}&8ecKT);w-YA%<*rmqyRzapSt(#6F!W%w3>qeZ~A3szD|j#`8(=HV_z0!piMhL!B(LLb(6OaSH#Fvb9Kb zq!L+E>>Hzr{l?I}w38J*yw8~9=Oj_Umi0wXY^)Q=+czvq{pZKi{o23xCiB<9C_suvv`Xa0ce}C zr4Me}<{?_%hG-3Lpp~QZ7Ys*A;ZNvI#L;eVD+1#mq5NX3f_rl}sY?_=_`loA3>bM@95-_gU#x$VBRhS%?pn^}2-jX zJ~6dq{JcY(UdQzmvk&v12nWk`<)^rWdw0k@Kybw$%h)94JV%HSBtQ@y^E{^fnV(BS4z;EBYq0MVYu91k1 z33nIybPVzYL(4>HhMt<^!<7k@aaIWiz(y+N&;C#2=YKs8!7mDE`mogKEmjwUjGG8) z$K=+3u+?C|>{%4b%h-tQ~zaCv;g@UJr)5()g?w_{b zS~fP^v?C&a#uj)8{tpUQ{-?n6?=5U8_93XLWuugMfbbB=FHHYOYQ}kp5vQtf!G~8? zonLe=xmP&1PZ^`VjjKOzUaqN8w>hy33w!Szb|`A=_T`N&?hYx}Gp>8HSN#m9pFg(U zqTissGwnBSyf(N@zy3c3|JHEDpSR*0#Kmnd(|z@)qDg7}` zn~w6n)J%+ZFvS?Jao8>A*~1*99pIywNr~?qME2-w!)75S1g+?Zqw)}}1T{i%bwOJowp03P zWfQL!6cn&sZU~mt?O<1^BGNkVvJ(%PIq$Cbj^=ZCGFSxN&vD4N-i2+b)E=N*~nuvNHRdMin_Ye}Bla%HO6t5}PM^R{3HBKeTa9m+yGm2XWDZlo@1+c3 zcJZLBxHu{g*!o9vWC=59>bWB+owLHlyqQz9kMNsj7T1k$zlX8LC2kMsww)e9;Wag??7|!GOiam=ggUD@qk>#uFj7-c=LkE02 zSqY98ezZYu6Sh_2Y-^=;XYlC-!Wf?l{Sxu%_t0eC6rWE+MdmEw)-f-djONMQ@xm9| zl-h`6008&Gex{k_H>^Lde0Za#P0w{ca~ND{qDD~|#eW@PvYsfXC|Yvw%7kOhwuven zH9zdRtEM30K3<3$DQ9`yJf13#bIHO_jHp`D^MF(Lq1Bo6QE$OD@&fk3_Ts6)^KsW? zxp6GiSL;MXpW1ZZ(!l2VE$cx$=3m|CF|2=^AfHM6N3QX17}tE)F}&@>tFs@OAZPs7 zSDb<@jCRY$BX zWvQA^zddH=<~PWkyYJt}54Jb{dxunthI?qO)AU!u*N#ofQ%|O$NHcCOz;(%)to_X* z;JYMV6{DYS(Xe4+=ZInAcs+FV?4I;vPN==2X7szlMTmB}R6W({VY}Gx7P*ErzOC-#4*y&VJxK*;&h(7ANPUTCAH%q%u zosIaQnXdA9|MgY4f*FlxXlD;=t@nvzHqtb))KhiW=MQ7%=T5xG6V6K|JvW-F2*eos zV5QPJCESE5)?FrYF(#O98pkI`jvQ$>?rb@6`OZvS7&JoR)vmb6Ym#m$i=yZTwN8}b zWl`Q2?>KbmTIVw+vW8a1VDUkJ6{nX5!P*7aX>kCQLzEltAmHII%qXBkk|}Mz!G1`z zd~=}Zp}NZrgd=NLvOD;1!NG0w^zGxn-)OA9MSLxiZ|b5?b94{Ef!e1_zJjxIN8|UUFQ6b}*!M-A39=^<5OLs7=4jzL#Hz7hv_<^h>@##bt7q`Ov$7#l{vdMw0b)|FJT{3u=rf=J-b?br9G3-6dk8qy% z{Zoh@R_e|vy3uFj#JjfRYS4vl=}`dHVW^dX7f{TAhM%n_|gJBDN5Vp z%q&K&QDmN!3eCiN-Mzdt%4&H~Pt+%3(D>yVSb@87PZd?hojgB7j+HD188h$wT2j_~ zjOm~8e@@J?_bVDA^%}l@^QgZ1u{=rkvSQs>Jz)Z-aQ5OXO`9TqxD2;l;N2(=K2@K1 zk2}(a2d^nQa0R{cs;u=1lslFxrvV(U8+)d24~XruFU9BJ5$*J7YOF5#iDmK4)G#jK zMz~Taw*L7kEdq)mgqbxRIzB!-|QRdJYcLQYk`eaoJlGS)8aWea?f zJJbQ%=rFqZW_>fTDd*DRO1MLaeC94#UvU#Bj;o&@$!;VrZf~is*mW+-a0J@VR`<6s z%PTRSgngb!8NfvPcy_E}te5Y}Uo4kR4xeK^cUm!S|5~;Kb;LokbZ3*5?9-9Q`#4v> zgW$_J4^7U`Jd<+e%58=NSm(L}*^jK!WCNr>zIWc**9YTtC3PeikZdgxV+SIpP`!|G z^*@iv8Xg}XFH6AQ$-FHCK9~V35+g2e>NpT#O56BfsTrAbUw^-X*L>=hsTdH6XBfDO ziza&*3EX1ukdf_26mQuZ5EGnzM7wCqPp9{v{%unXQm*|8op`kmGESq-eG73xEl;mW4KCO5o0}4Und5Bx@pcvQq2cGj#qKjuJ z_BYcw9nJRgLW8Pnx}!2;FUL@1uTcz9MMTJo=gf|RDe;8&a;YP}el05UgVMD_GUkMs zz}wr~Y1ptx3TwgR@R5=|j#4K%y&4W5jb%ykE@rG~-miCt7}}D>K?Vuf^q>J!xo-z~ z0S{761at9Ls+qO;C-YlzzqKDxw8i|+G~CR)R(H;-wD_TooyqDCE!=N5o_MZgtR`Ex zgB2y~d(_UuBmV!7bV&E^3&p*UekwP#t84-kSy3f}?2BK%b{{qj7ktWu)Xg^#(eK8#bqKx&VVt#9^j0rn2T1#e7aDHn3 z95WpkU{QYuaVD2_$JuI(CB?bXyKds*+`EUHWZ9jc+1NedL#qvNfCHQ&r!W3(+WexY z)3;w4W7=fp7Uid?t6fW+N!UZUnx!kXL;c(SV7*i5I=-PhhdRx8!84-6Z3L!HyZY6n zZR$gnxZltZ10u1=+!~tm^yy?wu*J7Sj0G(FluL|YIqh|dV57O^Z6<>VV%Dxp%xU7y z&AODuh-ayx4cO>qzwEweEPs50I)Ucs_>*NVF25>kYRrq0<(dqmj(BRFK?vGnyWHWz z!e7%m0LQ5c~Bd@5+WoHWd9r+10hUa0h8P^f(C9a1-kx|L5?&dDc~- zI0Vjg5Ub_AxZhIWIjGggByZckMoxQ&IlL>c_&c&D#p;Egbj-5jK{~=aN6o00hgIo8 z#)Vc%@_uA&@_8+6g4~7w-?bH+^1aO1<_0~||LLb|Xf1TLNey2)T_R)1@6xGLr#WOs z+2E>Iwt^dBip`gqZMb#Da;Q+GrFK4pj*+VPCO=w4Lh<{9;-5~b5V~f~1PU1cFHY=wYOH>Hmv}v;Vx)vqkYqOJLy&FC24f1Q$$&)s@ zP5BQg(vcwO-Sl7qsria$+58~Uc`|PtWLQ&5=y$2sgC4m$?NLw2t!G6lmtD|gA;6yM zvO?frUx^V-8L7qFg4^JR*XZYakBTR0^qTN(9hk&pn>tFDuzPvO@QHNx2fJi*5}UZ4 z#MpssF`g$p$*5W9qr^Aa^x~?R{}_!l4N~y>^=@Dl3cq0#337WPF*^B7vmPb5jeL@o zR0DkQE3Z1TWrI)D@kEuxqtelixe#buf`BAHu2Lh6941Dd{bIW#<$dF*83V{nJXgM& z`Ex!Litxc`!FOp_qkVy_F$xVU%los#f341^<*|JqQ4k&YQ1L z1ynXrywo>GRMtEEkJOfn`;RZL^_&JLnwJ<%yWkq1!&ncJw^J#I4JEhava{QSKcnq| z4pbI}Ayb7N4VvBwIkm}x-52!%F83QM5?B}Gs)5cXJo&GdGW0#e(lYXdhA7#H({Vv! z77o$s5=8OhHBHTQ=nm#uls3!gQDpD+d}EUrZ==oAJX|!6FCf-*J(S#(t>yBkVMUzS zIy)!lIayfNjk3#lPk4B}zFij-p376W=-6>6(yxfGryL93zFmtz55EC()C`gs)#?xK z3A>|NbTXPMe08>WysT7^f27W-RJrmH4tf8)ZIw(~-*RpK^2Vhs%CGNFDc`*3;!kP% z5$UKcc>w#Z29U6kc$q7eU&0c+XUrHl*DaGGx&EhOC$#*s6&v7C=v(=_fBxB#P%=0| z^{W7mU?CgPKRLf>#owN|C4|OEnyk)Qvq-({9vBaOai(+m$_z^HVd!PJYvFz{>`3Y; zstf-a)~r32JKyo4Zx53Bq+j{59lLketCCR0t7)%5?JG3(Y!Ms-KjYeaWqzk#y!*$L zgwj^XCgvTl2Nw`);mNAEyRsoP{i?V?+E&D*qIOw57GzWgedsUieCG3oOZ+IP9rrSo;?9;EeM zd7do-gMZR@bX#@NPaPgfjrY&|n^+A{)Q62D+&C#Ip==zOoyDAlhIuPtKPNkTnCstg zMR4erEeFB%pD{k>TGSrvA!!ok8=K3b4OwUjU?h-I{rz+q{t4@WQ293#HPbiBEGEn? z*(_GI@DFj@;hyUf9`j}uDfy*&lVux!HK{I&B<`EIp5Lsju&(`&Q`SeNI;Qesp|Bj~ z!!w?$*d)c$B*J(*GNOZp?n3*2o zrn&j6`UMT&xj(7v2$Qu-5#EmYXP#em>FQNkRxg`8M3_f?ungHVt>4{rZzaJ$6 zM$MWvpHq%@_RZhQ2zlzw;-lEVNvpvpb>!j7V!HZig!aVpBE{mjMp>!E*dLR*K9trm zs)aHgGmzJAk08ls*}x20hgn9EIh0HPo-v4Lkj6|5Z+Gucsu1)a^i6E4cDDj*1!IX; zd9}+8Q6`Sbf4_W-ZcJW#5yDuu^*&?tVeq(d+uT!G!g+u~d*6bR;@zP4)*=5pM@&U> zZmh^%b7?F666%{&a)02s)}!Mw)uIM_h8^8j=iPhG??hmN30JR!XO_mQtmyLNrl`EPR7|1fh7twtS}9R+LOy`7LZbd=9pS;rz2 z!13Gz6Lw04a{e#%iS}a?6_SY~iq7VEKgaIWfjP|mj+yq~T-Wzo`8iD4KWjm71BG8t zN<)yj17gaBi1M&j5bO8I910HARUABPdOe-z;oFNDB%ei1a2HCJddPPnr(8G_@rc0w zeQbu%LIMUcHDNHbtir1T&QY@F?((YyfO!f<--t1*3{T~s{aN-cMy;urYxiVy-YDx& z30Zcrkq&t+zDKNau?AmXTVHQHvH8m*s?O7Z6l7t+x8mij6fbdOp(b==F+@OtY6Wjb zO%!$Xe`iYJ8%WcF;rb|92Q7OF0q4M~RS%B)+-wzle>?Uk8J(pNs!VeoJ*Gly&3I<$ zW!r~Og?jsm;z8Bdt_BQXGw3ibRx~D`2~PI*TM?Ue1K}Rbb@y2*-o>(h63`DEIjxhz zYc#QNzhS*rUAjEztd~EVUQ*JZPe2oaPN|w$c@`u~GQ74*IN(5~F~PDnEX-B2gB$;x zf&HgXUvadS^V75VkDUxyRAP`Id905 z-91w}7p?JeILtKUy4O-mC~S4p#$FG>U*Jf_xTD4#f!Lp@y<5t!mVZAj+wEJoc4La{ z4r5C1S!^v;{|i)0%=Yc$9Tsep(y^#9BRS&k%jJ73L+kWdN3{M)pr98@qmr&%KSW9U z70tzU88UUfT0gg5-y4Yh56ZOYQ0M83`S?X<3m5ts6iwlB67IJEIyR2IH&yfaCn|kF z9eZAqY>@N+L+1Q(N0W8O0wT>|f0BR-ZkSOSJSd~^sw@>KZ~n@w1>iv(vci=dGU4w& zQ@QM4Q*Swo()JG97gFbz$4 zMKWi)kpUQv$GL`oSIqtnJ`BhF&bA#K1SN{UWAm)+e@Gk7BeGmapl9vM)oNAzG~#f~ zK>}ABy_E(-PKdE>iw+&qxIje##16*qSWLD@_xt~_6Qoz{X+XIu1S)*n6TVsh^+=A9 z4!&6_WA3_|a7iCVVSa9Xaw}NrSF{f^&wXsM2|5If1Q-5|-KmMS+jya}%QyWiEgu5) zb1!Wbk8V=J%>xY)l8{9WlS^rq`Jam#q;!tH*SX^S-Dh)tsi97_T>NqNh?? z3{Ex?$XabzVn|}5EUb|Qj6q|>u2m3HT|Ij;v00e&*|Ju<+;|t{-OSqJDnx#Hu~PX; zoF1cQH0|5*zSkcz$03)`Kv5=t4(;G5L6^&9z7;6Uu%2$0d@v4B64|IlbQpE4FCJ54s1W-T4xSl~EGIl%9=hoIchV&!r zsjd<`Kbz7K3U6ZN2BqA2SE-4;}aw|p~ z(v-CqlYxoly)tsF!=)At+I}=uSV)E6X2bgFv#Lw-&mTi+HmBt4M_DWc@!){)Bv!S$ zsccR|w?-j2L{@oJ2B81@0MX5wvh$k*RD$ir8+>K@uk{$SC*O8pi<4Jx%I)%5*>n#b zi7cQ1*5xbIQofr%Bf0N*hJtHVTc!8k9a?^!|3}r8fYrEm?Jb!*6eXETh6Yq5 zlqO^fTXSiY4k46klQbDmp~NX;yGSVw3Z;3Fp@^LZWolA1Y?`BJ`0w?``TYC3zVAEN zcZ&T!@AIr@t^2;$y}&nJ#ezeCdJE@l7jP0llF2+|PTF#0=tO>U1U`vwFo2U|7cTK= zY%)-hi*fqE?`+LD)Tu4V3OWUri8{J*9-Ygy-QX-k^0xoQWxef03{RSlCi&}KK)wM( zj}6Nh!OGPl@(aIJ0x?T8+F7?Y^nJvxDkW=p@I4st%&IXaA4RVE;gT-{XvLvoTMHNb zp3+K(V<60^zYYh&Ukx7k<(pAsShSYCT^QrtmC&3bhf|(Z~RV zWP&c>u^A3xILm{i%%t#wS06RJ2T1%A2mr1<4>EWM8?(r_w(?H5r@!4--E zow-j3KB4f_1FV8SeHq@>OSJ}ZYP7;84F|<4yL>r@V*^Py0PXYRl@~gU5RmuaMjC8J zuLrgIf_wlEVfK9U76X0TY$oPZdUU=7wMUzQY%Ex9%KK9+NF@=)=9a;OoW@@XIvK~ksFy9b56~<4Sd@?+anDMiNCo5iegYW;Gxa! zd**-$LxN*&&+@4#EG#TVrN?<9W=bi^^JmZQvVW|Bu#B+9nKmP8N{4Rhp&hYf2T-u* zNLGWw9KTPI!nZw({D#V61aRWZ;$7IKX)gBE1C@?1PPbE=F23xt{`8L+-?abWG}avO zF@#qvIi!E%!UF~6eQx;S&8@WEWi_bSs*#~&6w*9-*gxU{X_gMrfxkc3%VyxZvwM10 zA1e%DTx;|{hIn=-FT#nSx7}*L{sPSw0rQWH5yp9_*(huq^9P1C^R zlp#@?(Y=dsAKuHa2l+_qnOV1|i7rZWX`uPh2n@r3{X=;{iS%7I_AC|2G{_E&T`5(U zF6=tzv@Y;#dr-^7pu>_NYBk)o0p6P0O=xBMPT&n;R=Q@mO@84)i04GEm2Zej!$_cH zbnM}xH3w0ToR8%ek5Dg%WA$a=*H+*~;KjfgVrNM76!x5!*P*?WrpTMjv)HLLZ?ktvQ zDfP5LTE-U|At*?(Grj57H6;17?_{*7F+!zBGN>uuBHhS*PDmp5cMR|&y4K=cyrNc} z9D5bUeb{M5b+N3zkvCV^i;If>4OK@bqpHe(3ke@V^|C7=%+W_s#fH6wJHou7k4W-YHa`1S^Vx(xW$A3vt^Vb$&rb>Hk z`c-|P`rQr49L!511;5{)d}=7Xll9FU#QhegI-$g2E9Gk7E|PhHg`Y}DpNEm>rD`KI zBfzaTV{i!P)E1)H2=7v6<+dYtR6#VsEr-Eshs#yHqfyLKhS>96iRJZ=$b*L?Te}BjRk6gC$=4>28ZCCZr%HOo2md)6fwZdVU>LmgE6}dznUy>u%U^_y0Zr zHC&IBVv%AOyO8!9l=%>&R6@?cM73gMXhY#4cT}Zo>1G6kXGqT&Zi7{0hNw%46|8Ag z;22M;ESdfr)ApyX#DO#hSBg-UTlXs#(h-=yU;&EZ5Y+yJCHjmD1QdfU*%T9dr{vy_ z2NMQD$()VG-jOX1SgSFM)xq6dr5T38^3%14^GIKwg+A z+J6J%3Cw7MQRv~%5(Da^adi{6^7boAo_v6Hma@1XF>s|%q9uIQTt}<@?@$FRUS=Xd zjRbQwJfWft+bI@rg@8Uv!G3?-lA&^mhKO$}%(U$!L-GH&$)M$cHoh(Q1}G6(d3j6< z*ZhKaWPle9Tzlf9`z$B)aW44_wkP=YGRU#wU3jtxWX~(Urm91~@Mi_os7bP@ZqrkIxjreX{X6|4Iz!K(K;t+C< z-5fDu1nMizbJh0V3+ByxN;rq;Y8akTFA1g^o5PSYiKiM1;V31`0DSJ#^EWKOO!hC| zz+eI<)84%tz$|3FNCsvp&oa^C&495zufWRadVPH1rfCRsJKX<#>I2}Vpb2+{Y(s6} zxX!YOXkV@N6V2Qc+0>DC&7| z$=m4i;}IZG8nwj~Q#ZPhvcyD37pOJG(ajQXm0^NB>K;A245nmvzVXIY+PhVlrTGkC z(?yH@IQ5sO$mCs#X!&qG^M&2c?~ZAoCSw8Lp@hJvXge`!ig%BE-_Joy5VE8&7&&7k z?SCJrQ|#^e5R@B2b{j+km=PyxmSK|mZRnn_E=>ZELlP<|LN=|a(Zb%20$>PjEGY8B zvQvDjX?DjRt8@0^` zqXU}Z;1IQYHGY`peE|%7+vs!GmJ))c6@OG*Jy_ zIGH)-k+*KS_w59R)D6*xd!GW!jJ7&vz7Hk;>kXQD-OmfvcOJ}vbuLxDL-%|rW9>Em z8=#fj81O}7j(~IiDuo}ieK+`B(j(zo{D7c7{T~#ucLCWDMAAm6PR<*slB#p5kTS`O_dcRv%;JiGm*eVHYNn}@U^tjtY8vB&k z^*J9-j?jIV{vxTCJT;7`l#WYV~!lxKkcrx-}-$Dcu5TT5$T8O9=`=zr-jlS40f zGVb%Kka9pY@Nz0?wm~GH7}aij3&kDDB|*Es#V#8Xm0d4;8LDAH)d(hD#u=Xe3S_zr z%8DTZ1-+{1k35K>b$1E>K=&;4d1iF8Y*WM>Y3$;X&C4nyKv0=Ah`z_jn;T;$%`?MJ zuMsyeFi`g@{p7qG3Z|Jk<5+CCSN5vz3z416Q^N?TsTtP2Tk~JGAnID6wpxlrAJ5Ck z0GGdjbVXD|Xk$`c~yl4 zlJC%m1OMP*0nEID_1->E-;q1vW<hkO< ze>Cs0;l`doBnd7m963NJtpJ%z7;@V*-kfr+Qe#uA9p$VLXT&@UnVtx223$DWe#p7X z=t>3{h*V^2LkNw^LX~TbE`)U8rOVAB#K8q+9B=-biB=Q2TfuWsuL8}t?&Cp(=E{#x zA$&}a(Uc#i);>~ZJwpEvD+k_vpWCmIKtA75z~^63g@DYJp{B`Qe%_I?vc9;wo!`+B z5|0AzTIDEw`)%;xfnnt~Tyv+f^uHJLk9YjU32ORE@4K4miqgT@P_EDr$3P-m z?}hh5?OP~QO6oP+EWpX>LFbDE1>FcNkC*6oxQ;u$5ly9x!i0Bt40IdV))I3Be6}b4 zxPLDN(sEgJrE)9r{}MOYHXna@Cr!1 z|8r0C{sm?W+LmUnlE|9=otqdihks_e(}2IlX_7Ech9_?{FqC=Uk1D4T9yZB?4G9~; zqL{CC41Dxv4D7-;(#QYH;T?{}8%At@0f<@D5Lpi1GTqUXh{ckE_Sj8avESXKSgZkP zG}a*Q7eiW+)zNStoMa?KOk3@-=$8;AG~8PuVX5I?1S}4Q5l1*0jxOLb4?Y>gxmjqo4?<7DhoXj`qb|Wo{DN8Rzf>j#lVkk zUW#IRqcq78D=c07pLy2oC3kJ8RdF37vfXsd=`Y6~R49NRoOGE4(}DaiS8a$#qqq6J zzx_ywfg9NYYCLn9`?&+OtY&R^YV(Yi}W?FrM2I zn8^*uQQxXPYFJ>EUWW8>Ac=qp+_~6G~WNMYx_GI zHCSyUAf!K6n(ya~C!czIMTMLeKlN?Drst1ngqL62opGF;fN@bKkZ*URv2MPMO#Yuq zw_YBEF|N3-_uwrv0WBaHwIC^TaY$z7SivHWLM;>yH}f5bH`qZlk6W3-MwKiS9!MTi zsSyZy0{{a##Cc>EcMv%DBYs=U5DfY7E{X{`x^jp0s9!3K1fqu)u6KAU=A^5VOpTH| ztRPBS3;ZeMMgt22SBNl~2d|)we=ruZy2G*X&C*&S^_<4?|;)PsmXUa_Tf5HoZ9}Hp!_LSo809ParhF*mBUPF`&mW zn;pbl$!Zu;;~sVE+YcrgcEPvtR^0oR^5RhOg5t67pHHPjY2E(xrg@0qC?=!!zJIWp z!7f-n+d)T$;TCG_wy`5!0tYHd>~J4b1`0i92kqN?M0i{_+)C^OsC8IvawO3Q>>UZH z*DR`UHwKkeAPE4FI)lD!U#QGFzx}DTBhOU|uxw1AJgz*DKjQ~dK~!lAm;`Xc_@~Ry zFI!)k#_p9VdC~G6LluEiEFQYcB`9~f9z==h`E@h(F}epvOWXg<&)R%|!D~S7=MMEJ zbERS>rq_Ygs{kOb;k67^rKD%qc`7Q-RX@GLP)s;YTfH}9jUesNFsh#p9+yCHg#Od- zzka^4jb&{IEQS=$Op4&Vk{$uqHV?rf(*$5P=a}81k7M1~5XB-2BBXAnW)4*0Zds7Q z5s(foOv<|a;ku6igdsoNNOz%B(fFK0O(jq4QXs((nJV+6_8-Y9GHNnU{X$}xEpX{t zC9ASW>x(hhgkRKondRnyAt?OO(`B0Db|*1eR`2I)<#OU*2sOoh zK&(ryH(ue9FXgxkzuvWA)oj6IOXf((sJXvVD`<@zNW{zk;x!P3IuWPt%20OBdq@;T zWG(im$zGfbBgiZ&b4S*~k=I&ke` zZ0LUIb^y$lZy5ir8YT>iFd~np9q|4lvjecWLBH03AwlNSbR}qxh(P(=o{xj~--k!d zb_A^fqDY}jpe+>#g1SPW+Q(BPav?r6Cryc8KgY(f|z(wBJ-bx;<&=|uf>e=#QRrn9fb^nw6 zTn*SL9eICW3+NV_^k)$D3M12or5@fZI z-awgGl=({D9kp^)A)n(;6)_?x&Ue5-y zui-q3)uu(4-eAC_ml#K6czSGSaOS>~Z$0sD;O+2m2zh8A4X@8c;)KC?nc+7L&97EU z6Q=s>lMBrI{Vj((X={`7amqAhhDRKcfayPM(R z=*jz6SUjy75Lx`BJQ%UDK9KopI;i2i&v(P2W!ep{5b;rXDF&F?F`5;YGzzse@KvpN z1+1DeN42%7$B9aNZK-WsLn$g_fI2dmNA>xC|E()fRreBL9mD{;;~0mZqID!BMgyd z%*eU^hUDIma4dJ9=j;eWUHp{c9nA;$Q{?r-b$ri!NWeWx+Dp#bH)c6rSq%RkFZl)C0Al1+Ho9M>yYeb$z6JztdAQ zjM2j~mEa-yzh~gMnT|NVlH^S2W4?^^E8eAM*2%HG_2)X|=Dm{%+j813z#wSL>40x? z?^+Gf*1tX6^R(Zq(fmL8iSiT?mxsxaejAt?Kl(_pJnxYPbN1S*mfB3*^ zj*V+#|2~j&`sv!+Mt-a0P3rS+T%Y))Pkw7=AXeYtuC%_qRY!h~;?$pY)#4pL zjlwV6+&y{IC?ZjLi_w4RlvKyx4T795or?kUb~e=%Z^A_Fhf=0^%(RA$H?nGJRh_@wJcAVpEIZx+19OqUn@3UMaW+kDooD+|vdy z_O3^`+-)O01O_ORWV&3=))v-RctE92U=uMA95PgooDyvGC<()TFZG4?J#x1YQ}9u6 z#Gsev81J62nAY_Df} zv}IC^wUL=vVSe8uG7&&Mj5Q-ddbh(F7vA#mh5vOd~ z3Vj}A@KHwTuDj`)w45y?vkuqM*o>9obh4nkU}&Q0AyendTRe!H-GC9e0SCg>M~~#} z`Cg%xY_CzL)9bpuQ!6;w`Q4X3B76|wcQ(*=b5f+MxF8Zkk|@`P_H6r`tYJzak9B?; z#T&%!F_Md$YP{X}<{tc`-|Hu0<6=8bE{f4xx>jGmJotCyWx@Pnk$#N9thL7Sj~hGI zKJo5sEnO_|?%sUkYX>8Cb@C(!e|-9^tgH6OCGtih)Ol3&BH|iT>g9qzg;xmZiPR|T ziXd6cfed(dSW!b`TER7ZQAFR&thebv9cIO}-y&M!Dtv6oJ-{$84=M>bye`LS7x^1N zb~D)aH(8Q5P~=aAWiI%L6LaBd1M3){PUK#|C&xh62GIO`OV)R5W;JJFH3Mk$$%>z3VFyrR0Hb2pO8 zU+W3GIIJhS1_iq@9SLKI(l}$i3^Jo_y7!3c_isEi@I9ehabZkz@VG+BCnx9rZwWi~ zBbt5i`Inc(g6CrdlR1a34)kxnFmQj-)-aF5=GBrfl;VUG=~e@(M@bVVHb0_J zEM>zE(~QS^ov)(u`mXX%z?UfamDkrhBOfdWBpnh}ltvaBm_8sZcGwX8AKkgbC+tG< zjYD6HNV*e)O6>?9#a^GkV#Ry4$Xtz%g4ve4{$j1F$FVLSa|h$8YcjEg&1Kx4A_1iO ztwshlDcGVjamr&Y(Q5;$WH+@CInSE?=t@O;r=a7_ttRUhX1A$3 zV%-VC6gL?u?EH(?3BGb=H`ky>0dN$0+;Zs*mt)RL{3J^m&~;?+!5JxhfapsMYLH#H z@TJ<5Zd_zhC@rbqoidoq)TRHK$93R}Or-3PU}dD5+6wjE$@0C_N9|TrRHp-Xlvfsx zS&=fKZWxHA)e(Cj{Pd+1)7lcTxLC`%f&WI{oMw83+uGT?1eE*zPKtb~lC9Z-teOer zHVLF1mDcRzI^#2}V3I_Q#d-@02xkPTT#oU}|&az$%sKXMadfYesTn z#EWZYiY0&Pbyxe=D`vhp>rP8%WTvhdg7M*U0#orkojd0tLsNz5tQ1um|IJ~7eQ}N- zNu3{+2^tj1`;Jg8MVQ?Qs#KW*#G!uYatT{I95ASe@;=a?0~~8BIX%eDYKJ*+Easn3 zW_eNIs1HUT?B~|1At>q*f{7LF^U}JReOL*)D$+r2B1jDGl!?62ez3D3>k_;PR;my( z)*35l-zdwVNyOCO!DOk<31P5+S?FQ((D-}h0=VrS?5~WWBovQWE+=wBXHkxtwS|eIhPh#e=AM|WLN6{v zJ4;tEwDYny`PHCjcEDF49jz7&0~nNO66G$U;c;k3{NczO>^}b3gSb>6<*?eZR9cwQjuC!M8hx?u)jO);mVCaXmagwt$gTluhIPkxgP$^4e*=h0XewdV3c`qrg zwtrp9F%5pe?l=noxfu(?@G?;T=e7b<#0-GS>C+6ToQ=VA2CS4mX9iZj3JNI?&lcFl zQQx_^lfD~`H3F36$Q7Av?a_{2M3!wMNn8+pc5p=uEPcdStAH0(SHx{q<_lJ!zGaga zTuTHi*_iml6a7T0mu6{c&Rlj`>^e(x=b*$&ZbJU0B< zPcZ(>=?j<>ano3F*{dH#g5RlwrOaDD8tb4=7O!> zKi^lAG;i_xdJ(8ZOTf8bYAu4tx?=9tHluKzF=#j`SDU?nCT7DbB!$NkUQ5Ur`C_Qe zj)1Yjqcu&#q#mRGjYsG~H&B7vBTk=J4o5&*2Rs%HHQ@^tnL(z`h=Kqx*rB`p22L{l zJ_wa3F36;64iQyf%ZHYWxil^uSyQvTxc%jz(LwVIZ+pR3jw%YnS7#N7-Dw`i@^zyd zlTIr<4vN+0?$uedp~A}8JYjQ8V8k4Y^|0<&;b!BBvy(>LTRc=Q1Fj(T?$FKWHZEbYAWJ6>6b*s40I`w9M8&z}t-Afu zi-OMAf#@qHSs%2s-rGb=pG?bOjw`cHHQ%j_6xNoWGOqX@dzC`?*-8C=NZMn;kTWuA z{OBumd_xa#NN$SIslGTU)l`>yojA4#ZIo31G;jc=e`3QLf~L{(&n7AzYWa{TDLicK zDtGtv{TW}E5|bB|T8_*<0je}J`xDc}w~g?51tn+-shqhrx@RXo+<>&@9=k0Fspn_=Eh`q+Y{ZCA+`=`7=)#Bs?3tk~KGvt6oD8LT85@8v`$w9h6WpjPjTGF>=)+00=++ZgWvAfH>|9V4@YLopHp$T&VShw*s9Vy z625`hhf0kog_C`8gqA=AGD~aJhz4L&CFu6^tP(euGmZ%Yp{K8HTw8>y0?Ebc(;vUi zYB+O7aJct=WN@Sg;+%2-CZUT~@Ep#m*>|#k?CJGT-#?0V`f@4F94%TQtD17!{L}$4~0EYOSWR_?Y6)iU)rIxn-*(2ix0%L!z;M_Q` z*QIqj`O5|k-|l|4v*FO!cXZen4_)cs=}OnuAyX|^NMo8nZEd?N_@6rNKuG6FvI zns~}oaBOjtSW?n$11a}W0&NAI_kibwy09h!A`;Z1&($6oBFaR-X^6IwUJY>PCCDE5 zLiv^?Wg3H&5VX!*1R%nZoD?xVOmRwq{>K1C^%X(l3b?=k4Znea$#P>Go6K|1Hr8qson^8zmK0Uf~Cfx~1)_M4QDRswz<~ zQn#bZO1c0+QN^pTCooJIWv@p2<4LrKW@G*wLilUkT~S}Yd=W@{nVOm^kj7oF41?uh zg_qI%UZ8G>ELRbq)j(%AteV_FLvvqpS5&AyT0}Q`$X&;3O}?P1t>C9~z5QN%L7mGE z30dW84_zpT5jjFjbA9HKFN@Hgh`=p^m}m-R7E`NeLL6<5C@sBd(h}8I|^%pWw;Lz@fbiL(AEd`_F^qBjhHSls=6-(ERQ} zNO}+noHN6GFp~ z7iG?Jcf^E7A|VS5tlr}MFYf5AP|Up9xM4#vPA)K+ldyoE{N!4HO(KwcRKz@}+^KDs z2ot?+)N6$V3s#_u)Mt)l`5dB~?z{^UYQhp~W(=-iFR|xMXOPrq=*X6FFYB(;IT|N4 zqq67j+g`668?+Uu44tz>?R3t}EHKiXY^e|n&7<55YA?(Fl@WXIV8X7L+Wr{XdGG8Q zf4-reB(+LRZhGXp)*Q2I)#pl8Uh0}Rq^?q$VuVV!`FGy8|_7rRhlKX)(o?hZIj~x=d$nNQhE};S)2SeP@A(#K6C5gjdG-a14EMN9&_;v~a>tbxFmnt_v8dZp$5Z`5mUK?a%JrIalVr zmCmDa0!OtU`^!5IGhsQ=ctD^Bk*GZ|U+5O1{m^N=j+Da!I}H|R9o_VP<>Q6!kzfTqF-T3@*21G`%m(F_?0J3GyR0Lf(xGvGPfgH zEY*E3>QUQ!r(`X?eQ`iDHWbibGO*ja_R%mkP_?g<9ZX?+X-MSjo;`aCco~3$QZIKLh79#K zJe9X|YjJ2@_y!#9D0CF6%Qj3u21F+?0zjLM8L zcP5KH`6N)I4l8GS;9Iji_o53@=Ipd(?1$T4{coA(o4h#h(sNjn6=(ruFUB(M9_NBX z|Dlk^g@-UO@_nYs(3OWd9FWWXI*KVnM-ekG&r-I7Mzs>PCobXPUYWZp4i$cUozZ`i z(TM+ACnq)meH=%tTZn0fuCu~80k?sdHKGxw9Hwi`&bo}Uz_=j)Sg3om9M)et!d|MC zCM#0PM~xp;l%bMpLfwrsW>QcT09>k9;{3L}6JyfrF904^--ioO4P#dk*;7$*H)C*P z1@#;mS}INv+VkXj*VEUg(#31^a8%ZL9 z-k96yRWZfiOxC9yateV$81jb{S46&bKM_o4Xee6Z=QlB!N_N3aM-55T-d7jzfR4Q; z8hI;K(65l0*>gXRA*l&KpFP~#&?N9Yu8?4Y{38K1vi8@2J6EeMWyKEjB|^S zDa0ryEt#EcVmonBqZv$s`U|POoVLT^3otz)n&1AiEb*?C>B~f|^~2Yr&?lVjHB$!e z6dBZcsqyWNozREDqoDuTEkAU{%l6(nb2Y_q)3a9^VN*~8+}#|z`ryxoj|hza6_6*G zoH#TE;w(~rt1r5=E;&Z5IMXlLl{3jcbU7I2UmqX6`T8#s)@-RLPBy(*QnTSm&=s*H z_TsycZ$LV0j7UgQcGk?Y9B=P^ZxWH0WC9!|$J5H+7_ZqksWna~1v zJW540ZbVX28pWDLDmdH#e02RJvfIxBa@zxN0j9V^_DWJ;MhFZ;`&5zIBb9e4j*i?K zcT1@mCR81euMi^)KixpniiVFAA}W`{PeC$X4g>c;52SF%F%+a-VF*3Gtx{gPBKkW={qgi8jQP&37)Pn+-#kkq-om(k&e zMyQ8U`ZIexO0KtvCD(H22?6N;{TaP+cuVT~*g?nDz_0dkx9`t z%E#=4A~+6N{})XE)njZ$?-Y~$tY8JqVNGtVI*BX}W+nM*v!r`GG|>`LsrKkTd9;u# z911pP{L6LZBg#1?F%v_Kax+i>=&~P7lgD)#g`M=Rr7{**0VaRymTy41`1kw+`Qq=s zmEY7g>yKIdZ-DrleWL(P>@95;$jHj<_}TwIUNdhLU};v7I|e5Z=!ZAQ7cG)C{*bVy zw0T!~<5c;ng_XZo3jbRh3!uw0E7cF|(0=ar&yLa_Wi$vH`4#dOYOnxaJ`qByX1LB?R75TPQ4U&Ib3nYDQ&)&^5oC>~$qDz_PW}i! zF(gHh2-S;NFGA%&P=PAwu|#%T9AfD%TsDM5)ISGQNS+jMQT;EjQCJ|3S0|K~=gZqi z5CQeURAs`T$Lg*2yuqRdyXrgo2d`H4)WD_eHju%~Oq`SQNL-889)cW%Y>Odt#SRae zKkd@1Wvxq!XDqu&9Z&y#)){3htqsenTCcHxp(A(u$A&ZG90>x$flReT{y`#Yu$g>O zokVyd@J}SFz+E{zyP+1-LrRf6#4Gy<1Vf91q=6}e`8nEZbK2 z-X&u>hH@_GS?ukw4rm88#k~`+tWIX-%$dS|Z6GO{nat&nixxpE7yI|K3jrb2&M8%f zjr#(#cSa0jhyNP#LjC&i;zhTX>CCOtf)T;;qETG zUC29VOI>S1Oi{zKlDWZl|F2s~AF_cZ-p>2{n{A$`J<$OKgL9vNV9p2$FF`eC3OJLo zVina{zSd<`6s8yv^ND%nw%m_f@sq}6TQpKn3L&3zvZoI^ngB#3vz172JtY6qHhYhL zF3vHB4{+uN+9EQo@aM=uag1_GM-Ypjq)wLrWL33C${A6W0LzUW?KFF808JSpE5FCa zo9i`-F_K%yBdHv*)8GSJxY!tXH#-DzFHR3ncj04e0!g*|6-G!Km#Yl4_9ph?Zb%FO zE$BmF;khI#duG<)_THNwe`Z?S@*4h~H~#jmtv4NHeZbP3^oU$|z#4P!fy}Z2W z5x$P4BUo=WOvUA#x{VEGAwx9_IrPkKm@{u4g^Exx+|~ByXLW3Oy7b@F9ue5Ka)G zCyUQK5e4+JiRvRHSV)bw(y$@M2+g(y0@Y+T%O^27I5-kW*H-(~Rgjx}>g+|LdK@iL z5Q|#K=meoMh(+drD6`b7&uwkf^dz{0QL`h`yVunN-uy8D}h=V$qActS_XV&$uYTP75l!((|+HW{*zy8 z<1?QKDa~u%SLCgxU=33NzmXX}!}Ywu7c7h1C=M?_1f&ZQOf2@*PuitVUShx?AK-*R zc}?acU>4--ZPw2QRK}vB>K)HYroetqPjX~aM|E~#BRcmsq_8#VwO_^ zb^GDoE0?&_2Bo2ejMND?bs<)s1vu%|UQgkIyvhslJ*~ZSc`?o~M9u$bO_fo5usiu) zY0+g)_m{VZoaVBjibvaxI(cf$5poUiM|LB9F^h6r1-((%v&^;42OJLnsc?15TAO^j zxwF^bDAv5*Dq#BM)Kp zTVv7gglKx2(;fzswTJuhFm@c-oWj#;ER0qdLEOkyzOzQG({JH_gK`saKq|(bWRm9idreimb7{u#2yf{sM;;m+6osGe8(N! zqr$cAO03b2(8SH1H}6y*vZju3OcS&BpJWAnFtVa<*sP6lu&F5am%NtT)9*!72fk2K zF{}2>p}=7*OHx**w?Ccs3)jjE_TShTyT<=@rtN`0*Q@R9M)~~a`xVpVvc3M+sJM#g zqF|LyW6_8t&&`Dxy&E(Z(6>Rv8i-aW@z46Y(0~(M?J2yr2qbm%y2#Q>E;mfgwJ{L= z$j<`V!`?zO%CLg9Qwg2n2&|G79&Lubc1FKSZt8YaORNn#D~-Y>6_d!P20;*GDfUum z8Y6NWsC0~B6d3e|_MUwYH^M^_`~Z|)Kga`$S~LI<5?fRLc$M2M4G_) zboe7cVJzXQkSTLfS8cDE%&O7VIyVW)92g3h(If8#_f+Nt|7-hQ-4MMIZg;5M&|Xg| zf)kfmHEO!rESgsK^_H`Fr|xRw1(FQ0`Rin|LJe>1O)AeU(KB7DfXhCbjx^eru{#-g z@pw{DSs(eT!WXJpfMaF|UsBvu)T0Cwcp1LXmUrmDrw(-dzyvb1Bg0CjHE80}R2Kg& z`GLe+XT4J!J}YmH*|2FuoB|1rQ+@$nh+`?VP?BO8b%d|dL9hQu`%eOaAce`TA5-3w zz&HWbF-7-768x#vJ*_dWO?1+upAUv@g8&8~&SK9WE8 z0j3ieHk_sHwTNBsg#sKz?vP8EFyn@us!M{02m1=8^c7Hg1dWPqioeYP4eT8Op8nTI z+bdYUr9$iT65mwYa1>2{GJE6AATyuo)nkh%U&bWV(ie*wNb=q@C>2I@_z-E8>lkN| z!bS($D?q<-hIwO$Z^@ieJfWq32QB6kB5Tst7Xemby?6bnf6s;{G ziZa9=iZ@ihjV=$NoLpn_@FCL+#)VM#&0C=JoMU_v^;2fWD@Z{AB5IkgG_Q^XLDWBj zQqrExW%wD*?%_oF+PfJrKE;-w08HVu!NbmkhVF9Knwh2SpYh$e=n>oIMPsQj$GL=5Sjv|6kbU5U-NWAsTWxE4Vd$H|Z6*JqLBOZ&bD3;00zE+n zKF83Pn(-@2k*Wj0FZHX{Ohu~P-8HQw#2{T~R)1aO$n?&O9sh5wOuS~!OP9|(b{^dK!9y2(eMswC?(;EcnKt5$yK(+HdKebpo7l7!laAu=Lh*EpKKrapU zo=fNmvGv)y_Gy zFEQI6albcPxC^{J=ivx(QK#UH1A~KmnTaC-c9*~HRnPu5Zsvrab^yUih_Z)!-r?ak zJwi4ATK3^OCY)F_q)zmnDWL5(pQ#O?ECynYr5y3p?+Z3*C^Ljc*qIjgg=gEtQPdFt zEtg81u@S#2bJOPL$$ys3K8YrAzBZJ{UVN#$HEQ`h7++HdJW^+}9$<}qMaG$ouT#wg z0PFeyMw58CTM$ZVU|C^9=hi4U9tgo(B*(Fr5S-NZ6B$7+IAtsBsX1@a&nxWLjeHEO>LejY$vgVN^gMb@QKLv zZjBN=zEY#VtCU856Fy>jNei?b6eU3j#aA$694O_dH&XGJ@N>u&EpY;?4`|J-ly?s)uE0!8voj6fcmjB4t8bH3{&O|YU zQ0L~m%A`%GJ#j$Vo>Ag z!UJBrP*uZmy*Jp(LwS`cv_t_t<8<<$JZT~;2wodJIiGKpNj+Vmz*+%{r8>)T5J5^_ zQ`4G2@0G86Nu6kfDc4BV7sCe%{gKP0*BK712aE$k%B^bld(sG_^sv-6uFCsfO2NGL z^GdOCsHXB9R-c85m1pEY~-ahpMw@Kc5Cp6vi@fcsKJ zuZf@v8+~-}__0Lm>0S2N`2c*#g_dMmES3&4L|`6zc*@XeZ=LHr-utV*K7?rTmv@Ez zzxNPv;Yq)_X2#KveDM_affx676fS{?fsrt60UThA{-0nPn;;Nk2<-|-U?3OmXE?#y zNV|!3qgG!A;~ruA1@+J?l?uz7P=KyDxD!SpvkwNYpZGo2c{f_V($T02hyPt%=?%Dp zE>Z6)l$F=cG=3JT?i?Kq#}a*JyrL5qn0uK@&LMLN>J~WG0LT9-wTH$Gni1##2B)Xg zwgwI_)OHDv)3An9!|mXkiN1Zj17%cAOhYaCoG(i8{CUvoz!NcQ8Y|)-B$NWieAzxR znKH`CrT9ao4+Qy&1knCJS@av?;$it`2dN#3{N1Rromk3zL$^(+Lo2|bfcUna z_IxBuN>TUXg4>{-$rcW7=z&AFyGX$C2DDGmD8y~sQAYl%|I9VRx;{ity}Ib$sqmiC zslQJGgwmAxo>uKPhV~XmVbj$m8vqyIqxSZGW~dEn3x14|N7 zgWlLzUc1B6b;^yh6h|8-Og%Ej@VH&vZDjwPUKg+ef0-h3J&c5ej_0ogOV(2Gm}v7y z7N^#bPyL^veX93Sd!@Ie^W&8Bcz~j*5xdAE;h#K+f?~-$7#;4FhpWpCw`dTNE~Xv4 ztX;X4NpAcGUwY4@tl*(aPgOw{-RPt|Xd2CE`U)4OL?hu4@szCfXuCXxbs_;7u$nUu zv#UtE!P*Gz2GcNgY@9+OyCV(&LoDLo&}ASksEi-UUuc%7P53R(X(8}i7s=S$qgvv2 z(JlM?)3c#>TzK-H{ll#+?i-V93R8?lGnFm}f!s5IjwsyDUfgc?F$64<9-?>QX>bF(b!@ zie{2h0U#t#;+u6=wV$c$Ys_dn;^d&wcTvd|83VYgn_4&RFVocyZDz)im9m&z0tlE8 zGlofNpzdtSInsW-fm);)a)iGQ=ie5C{Suw|8hKpH4_hZ3R>t9?F^~aTinzOn(cmC5;)L#L zhQ^8yL+=DS+g^|Cz%Um$>Xn{f1xp1Z=uOBOo&ZFc+CT_-lTHXtT^+hEYK^b5SnIx4 zW|+d4=-$w)Nl@1}^ju-W+ycK}O`q=TGh-ck&vY9lbX*(Y?tjR5qxjnvhM zu|k=Z0;@VEV%44$A6x(Jw5VJ-q{ng}C2yV`y0C2~taamEBwvP_sp|7C9->MQF!>CL zu+12PheRn3(Up%oD!})rz>S0T1t5%A+M~tfMSoOy+3(!B7#-5S%W(ipF!+LoQ~)4U zVh3%c>jSUm*YzPx7kt1o=+l4uu6@*9RIItsJw3oZCFj+j)j``Rk`R1ST&m}{{rrJi zf2!!HdIIA>FQ;b`j_zv|S8y_gc--jEnS!b9AIJ*Pn~-9uHCT?am6m?iow1~I z90CGtLeKX55!=nWrlRLZIVl>+V?t z#1dRg6D3pt#R&3*#q_=0QHQm9>n9Pm013`3&=EbM3$=-_t6d03`13BPv+GG&mAV-m z3ki4Wd{D8cdr4s*x859$GgDQafxzN)_>3k}D|Zpe5xoaGC4p6+UN}86Qn~qdY4;AI zlmGiPI32$E(cN*U#*@hbXD``!!g6E?kOfvJ`34?kaMGE0Ui|s-6lPMG)C8#I$*~;P z$B+TKP}}N%@WEJhGFu~zkhpp92P@paA^-29v06K%YP^AGdSPZ_^e9OWJ#r#LbV)$% zA`3~RO$w%)YHA=V{m>e07$g&KdgX{%Cb>^)1mc{YBmQ-xQFW{RB|)YC*^gv(84{*wq5 zLNihY9Jo6BT^_f>G-rcZ-#d8>KH@Gc33b3e|9qszlwqeWkLN$;72ynVpcIY)4)2bU zYiN$S=uyeW4NC%Kjh>q0M_2%|5ycCXpE@n_duVJFKVf?@i2L84%y85&Nltra zaJ<@9>}U{-cUiR`(F&2|JcDAP3AIg&*g5PUCD&nFFsCbptvwSuHOgSfo&>cX#wp7o zY1Tt}L8OOqf_0_ZD1{XG&XXy0`#7l|9-5m&)wiPVI@D#UC~KY+%~@r(oYNeHRyguj zmPZnR=t;IA)IQhzI+h=PM!^96UzA&+$^_`#j0dL4w=~ucWSRrDO$|zjkdH37?~Y!N zayefXDITEmEkh44QXWWNmxU`zYY_1yJdW%b0Cqfyzp10V^9A+S1@q4(z|{wDMLbWs z!4(QHQUPfGXq?RtN~F#f)NXr#zfngtfu%)NQSWoSbEw3^F*kg;?V+Zm4bdFP0#1%S zkS6A*A8rHX8`$+S)Xu1TWI|3=@<5@Eu){&8yBOp}6g(UCXix>&?xGo3hxRhP;U`a@ z5)6UBPh1ERs_?<0D$jgltM7x7-ZLNE({Z{hIAY!Dv1tz%251+EI{p1odvjJunv0^S zP>9_4va*S$+XFc#2K`*Z& z$3trI;)!sl+{4|sYnLyIUKb4h#3eNn!?zZ2S4NoNf!DySA;_x|cD9&lX5}y;-`f<< zUnDhlJykAicuR;J(oKubTW5QWF*P+!R-9EPT2)m=Gq`x(ih3!iXb8sWJMzx^%C&2C z5OLv`&bmHt#lxSfsi~3HsIG=v1xdd0S1waQ*XuOEXc@vBKJO2`& zn6*Y?^gZ z&mFHiI=E^-I;w%h&lURXuSmnB=YWM?;mY(tZH1R;i;J|TsmTvtEY@?@`P;YUfCZ)o zHcCQfFlO!AwIvcddpO^|Y>l+(MB2EkELsFs)8xO>#sBx4dq@2k5I{a)VVXpfx1uep zN@31oC8b<|h+Utrdvoq3C$9lTk40O{W{-#9Wj41x1A^?@x^r3zC7qrVCQLYS;zV?! zZa;Ll41dxjP&T)Fqyj{L(F3wloPE97Ew|i?ky#F)@%`ERUFRGAv9I)*BIq z>xaV|aob~Gk+$~shq%AWG^_D-Q7t}28XEEK?YqYa6FeS|-dHj;0FlM{tJyu!kbYOC#G5w}5R zR}lW9n0meTa7r^Uf1({%hqMOWU}|Y)hcRh#7kpw}Pg!r+xN$Wu4E@^%bGurrC7~3* z#1?3K@A4SQ_;oxUdX8H3f1<5>BpSMebTxN81c zSVUxZ?BGHf@Pv<{mbTroV=gyhDU#%)v9YnPBSq-bBv+X+&fnK}$#Zm=xRt)P30kVG z-FM+?oBKJ*+<6pX|NE4Potc*&ZdiD)L}JhRkdU(&0E$yDEuGbkDXMk2nODMi+I6h{ z-2-yxTiQB19|8WUt*MdXh8ttcEy57HE`Tfr{}}w+vVPMh9VEet5J6%HQnaTRutHRt zzEIjmdp=nDaaLS}BQ-lD9Z#*!JbWBANew{KoWc8WPX%ox3=~WMxlqYpc>Z@swZ0$3w0dOImX_(4z3W>_(UY7@W9Xi_D zKBr^;mY6a{YU$F+$S}^ci&qqdY31Y9*4EV>$0^$mk?EVPBg?Ea-EKTMh2UEYx^=CS zlM=?E`+#h#MT4n)n8V+HpMZLx{d=WNV`&FB9GAvz*JJP6ru(MU-MdxY)~!^s&Y?U` z|6Q_zWvUMzNJ>$$^}9C#)k*s+r_!bOZo0Iz`!eL1Muj0z9wxt-B`sZY5TO%6AY61{D8nR}v5A6crcSx9s%_0rMCS>LMe(IX6Fy8<5XB72s+h@zq*4q-T&RBEw% zqG2)Xdb-@t-+v70+MZAS}tTX(nEiXamBEkE2b2bQu@i*2U03!79% z=*dzDM%U2#s9hoAiq^Ov?>(--FuirVcFB&PzP!!b>nlX-jb*nd;T%1RjP1(6phge| z6PNA(5Xjc|!|Aa@e_M&fb|Ceq5q3A)HzolYdHC$v2DQ~UH-)N8fa(>y!VL`#fLoW; z{Q0p3=eQ6QiH#^t`Dh;(4>r-(R~~8D7W5@NQ0f3XD~YEIx4C?*P<4t27dlJQ{7F9dwr>a z)@+p-mnQb#f+dTrReF-^$lFNH#DY4~&nbZ7mh4|w&#jV{|`=mLqqJ2$+-6v5|ff1BX*cf)F zS5?Ksn@?U3X%A|NI*=krdmg=6fAs4(huoYsTbUd1ztbx%ZE*hmcbDSSpQ<0yFU{wM zJL5uIzka(x$1>ulP*xgEh0MriA!0xux;+yqJHi_y94 zVl|{iX7~Oc12S$Qca=OWu+ITWvIB>n>OGikmXD&z2ifgZv=(gt>mAL0nu6h4t|R5> zPQ}f49E+QacY%O?kzKO<^XJdYk9=Ez!)6kf-|+eKN8E@{p+p_%cF1sTI)<7Rk6LwXeu*3MNfLBKYB_fTL{p?p?qQ?}VhvA2R$^ z*eQa7g4+NDD=8`Iy?+rDBTN1q<}xDY1OTibuu8 zA^`ybpg{$YE!ghc_ZMnEGjnrk8JSVYh_Er{wp8bw19@G8)|yo3Ph%Bqvd=aYg>4*+ z%`GaLfH4bu`e$BWh#W$A;zViOjSxEc;>p+BM?XQd6&4f2gB*ZF>ugQUwk9Ee$O(s| z)pfmn;6%8^9O(hYwGDr(g@r}abpJBc-sEBPrf3HEl^Q<(42CQ8*Hv7(dUZP}-^S`3 z@4JZj`o-$r1D5+*&+Xi?$^ss8aXyD%))=1AAb3dk88;4!;`*P=#Q(C49hS5;?Xoc_<3RB z>hyY|keB9Qa9sId?GN zC9(~$D|pIa5+7yv?%j2(9KH<s02TH)Z|Q1J4I;Eln4M;`c!ygE0Tn`vGQ z#{zqLMg|iLi{WiUK0e|3CaGUh2C)%*BQ!HS7tNc5Joi zZ_4h*OxWzTYvw&i68_TJdH374s-q4LA#feuxOr1EC43cN_ioJoh+wntWftT2*y&}g z<T!*S!Irw&9yHSIMNF0O0oE+`Qx{m6mKG(-`#WbXZ4%I=7k=9C>rCz&JI2b z@Ai?CmuF&UKiIMdi3-z5p94 zf#znMRU3dIQ*Lf^?-Vm}LzQmC85yt1?c{8rkFy=*iqDiQe#bZ_ z^VDH-D9*-14N2To6^xls*SANx=%QF6U>iO>jg-hrk`QBK#engUNlWo3&90ebpo=g7~WyFm50Ebd`P=}#gArtSmv z*_vvNo|$|UemPUIh^8>ZGcN68+Pmk|E4<>bU%wtK^w<#`5;8Yx$HT+3%jlCOzzVwD z7olLB9kT-p^g~BK@rI*AbgOUJp zLx^U$2}j{lP*Bi6Xq<_~udMJs;CQzve&!jvFbRaRvcrSSw$>il|lw!L^!~Hw<`KJEi*);wFt-U}Ca{L(_Nb1k|%(hnCBoL4VI?LZ#66oR!35sP&MznfAJT&wi5(EJXJ&|t2l>^5xm-yj=a2+Nl z4vql455WBlXz_{AWx+SKwxG2~@iw4Fz%Ap$kD z>(sfOZ@Itn{X?*j{7wIqurOGB=5lMuJW6sdyhXclo9yt<@7na!o`JL-258{4fvJZK z+CH@*A{LX$q@f1rqC=#ICBp@k1?dVH8XYYKhDmbnW`rUu0S`pp)2EgIkeu1!mH6Vg zpSUUK=yJ9-LWkhUoABE6CQ{s-2Maitk2^=mc#O+@llPHgdRlhz>1V*Y&4J-*gyTXT zB1jtvBa|YNM4_1mMrJJu#;vT>-I+*Yt59BDudY2vN_LDIB-x%z_VhOz&ow+c4hCU) zPn|wp0;Cv~6P}6y1a9z9KxX2=+o~!iL?Ez}S}EacmoqSwU=t=wJ}SXa1o7nvCg=-* zQ$2^U+t-psNCm$-tJawoxa;B6;&5sR=#rvf6$TPaSNN$=bV17iOWaQjoUH)DM~Laz zg}gZr-^u9BZ3um7M+xhw@Gv*G49XVl#pgjnzbM%?g8ziuKR~0APePj$3F$&`#ds#N zNjJ^J92+#T#1gR&rEH;}*MI+Ko**i6hq@iQMd{f%j%InM=KU?;>pci4!^jnJki#x? zz_ck9VVjiEw$PRK<9Zj&Bj{QAYvl{R2ZIrZYBT9}BoLZKU< zoaB?2H=}lCfQCO0boLdpKVTB37Y72wzVPMEVrJvvsh(Rk$0s4dMDkWl%sNbF3;>Pt z1sn(z78Yp5Wcmjw%Duh41x+4rfxZ+1RXthkCt+PNLnQKyyhG==ZryaXn>cJ zs6#K}n|%cos@L@Rit^=#v?EVTOUsw8t}6&Db`4g<7x)zgzAbLba0%2|zHHgo7qiCk zkd9@%r)6%_Xl)Y`kO;DJbB!!nXY>$vu=zI7l#Ru(RFG+3AYW|nozPWNTTG5{_VR0n zRV^*Be)hX}Ey&W$1!Loj(Ht5!wtm&fGB^k`;faUXu9o1nO>Ot6!mDqBi}x0x^}1fjcq3Z)sLF{T`n0IZ$;jMJQ1X#g z&rFUU$1$x(zVBH$$%f>CN&we_9f?>witDLTvjS&@<>a`q>!N^c>rDXA&LgQCA2WM; zT2+)J%5Ld1XU>qK;=$ppO=e+_! zDCyyBDF7w*UK#c!z3Anl9Z1$<1sS19y*R6eQM1_?z?yFQl&VFXQFq^@M3mb#|w35xF!BHS10^ zSGru#f?~7`r4~?=EkJGkGR~t2*n*fV<+6BYC8P_q3~`!0J0tqjx;fWw2?|kG!#Z;^ zvYZ`4Kj3Y|VMz%IprarxW8Nv{Kg(EyfM5Zk40=)aVsmqI(!g#t@`rV3y{wIY&=4A( zDYx0ZV3Aby{l(HYtyx-s*7xuK`V77c4`gRIMX>)4pcRbQnn(x+A}QFJ7J9JanaU6r z5E2Y`-O&XMp9zSHVufEU1i$j4u1=4teqY{whys6w-~Ia{(=#&|LU#o+ou?2kzhv->hZZN*RC;Rs%99jb9wRHmzUWf8XHkdpw{G1p}GtxQfzDo zx!b3d&tsjnwKWcg-y4b1;IJ@8#3DoLMiG(axD|oGWa3PKP?P4;YK}|$2;T`twG3zf zJ=NqI&hFwDFJ9DhjIv$7e*GZ2r0~l9o<5ZYLtee$%iIf?8QpDn&XDWHI^a{g2y)6L zaR1qv$sHIk3rz6|%JNWm-Nv33QREU_=n7b#m&l&Ly=q|InK(IxY08ennBlWtR+a-o zkjRIQs<&?ue^R~)Pl{l5i9`RWb_|j7Sby6b(}NNF9!Zl-Gam_LJ@RTz_5@HO)H|k_ zee|^%bsIm zq7%|0a$b`xh#vJl3x4=RAf9h$_t}SMk7^h41zHXWF>iWLe;3O6Ch+sPnuDbF6(+TosYKzrlRyxXS~lUnz@*mb{Sc1B_@F?rdGRQs{DXr_u}O>+ zM&KJDk`w_BadDYH&)#|sniHnIi0b%aQr@mW;{gu3_8nbv7unFz5R@%^qexgM0+J)L-<(&t~Dr{n=x^D!D!{O2I0~DE`^bciwmRwH*PtYML`u3sWYXHVa6{Zc$1h5YrFCwK}jEXV}$h5Jtx`03}d?&c|814dJx_tSy>h;Rly4`48G(PsZ;4Cxd z%K*yDBhY4J0#LFdBh|Tc1*B54Y0y6^^6S&5yU^|MBRl4O=llV0oDvGiWXYw^(H#uQ z9pr5W$v^O*cp~BvB^i#m0HE3zA3mT?6>-{7_3RKvq9TsMY%rt{>c+Beod_*n59sRk z_Z^&&z!#vH+5f3;3-&CoMZc*3K-K5ii4%cP%s^hKl6W?IABD#WXe8u(_5Q|z#>HHQ z_C-XJ)wwMw6-P%W-EnlPAxgv2as%YFO|%W=FAKL{_daYy&eVT?9tAsaY_vB&xS%uH zWy-hcKglut1)QYQ{3Tu-V3A? zkQzZ=#2#1I)vb+-U4q6Uc4)<-^|=Ice1FY~Z$qe=RP$m5LPD}e*)al=;o_P^!!-SR zp;2)t9SHhM)~zGKptG+p2reNl8(UT|&-R}lEyI!krmh@DFM%a^ysXEMuj|xl5g{Hw z6%;-zys`nPQMGLZjquhn?@XL_hs0i|;da6zY=fUWQq0Vly4z8Rg<%E9wuNYG+y$R| zdFJ&78m|=;r;ysZJN)kFXfC{Y*rj( zhtil_phDAX6# z)jHJsrKmE(5fY){&&?JuXA`3vNRF3T!Nr4dh@|a=>NmSyUY;8in)}RTu1nxyJwX=m zjqK>RTVh~f5cPKHiWMrbS86@T2tyTn2~Y>8Svw__=st`da~E;c>{|;ae$UNeV*xWE z&@a1SRP3dgW}GXGv%~;^FC#1a0$u>HNS8qy#VY!Qn)}SKhVd%S&YUg7MpTX2u@`WO zbn1Yp(xLhVl0s_f(xpncu+Sy2br{7GhCN#lwLBq;Fk2X6#}30-z0f9GV4j2dE<%6Y zBl_On3b5v01epbObEUMj^zEH)IyTp{uvmmUuIDgLMm>poIta4tP5EsldJd1W&!4#=|8>}HC7z0AXCO7R<(k-*_zI30Y6GMq(60RRYZ1 z0SuUG_Dl*>p^^+nFT<9C65PVkF|!^z*eVrF=+(064*HjP!g@+Wsk{tnJE{ioS^40> z8?U>FuCf(&L6DaF?28^0Tm~0}Pks;qzNt-67W6Btwv9#xF6z8~b z(HA(SDirT9}3E3jv%QpUHK~%F0b>CVkztf>(hHUT5JrNNY)hSO$L_wJ!jkd?S1J z?nO;IPhDL-;-8Y$RcCG9UoXI5i3Ziz-~Uk~NSI%zH|U8zsrP3e`2SczY6;~2%#HV6 zh;(!DD14~87&(t<+^|B6gOkLXtEg^it=qPhz*D^yt;Iyd>#8l@3d$9KT^%MV&?#hf zfsf728vy_j4o=Y4!Dj|eXT74Ld4{vA-^Ggy;1G$AULMf>8L+V(2;xd{v7-0*R|w4> z>PRD)1IXJyFpzAJdI^_T24G;!A}CRyqTy0MJ&sG1o`!1#z`HqwUIJ2|lSvaumC4sM z{D^%M>^*_~DYhAS{!4y-q+t)dg#+L{MK{gI_|e6uHv9?A$K_Nv4CVlUTQU5}hc1_mIo1iCva;rG$Sh-Y`ycY+ z^uWYdiRmk*m&DrYzIS$BM(TYIN`hVjs~|-Yg@u$0EPT0`LCAoSwPG}7>Nl+K4N03- zq_P1gtKGF)XfL!x@}~Y+S`Ag;etC%t4w58Y0s*#w28aeXUDUAWGch27)rs#Cf^l>q{a1Lm*yZTC@gq@tNu)0R#O5{-i}EJ23ENbMrbJsWnqYdtMXP8vD=^ z+6&g~6`~C~caAt$kI=rI6>|1#+98Q@hjm{AU?7FCW#&vnw7QnMV!Gz z%;e<@asV5C8Ozgw#XS+1F#y|aD1y6PSX8Ogbhw|-dP|NJDa;obh^MN?7!j4~O? zwdGKb3cc2S3*H+$Wb|rubhOL-9(I^MNU?(sCnDFe#a;bC_-Jt8>&n<5Xk2;t@L`jugCQz9E;QL^vaQjpixM;AgdqidakS1IA5eE; zSP#eqp%UA-mx3#*Mb{i&jX{R-4&>b6snR3&)e!EF}?AIs#>YI&j` z4N2viP8|nEz&!_4BS1d_oYe-q#NBoR4(a( z&BmV~j%Aol=%0+|q&70#0#xWe-0p{CGvR*d>qCWAbWZj^mLciov6aqh4}WJQNgAHO zeSZnOlh`*`b8rnEuB&FlZ|8#)pUkYG4irYzkvxxI!m}fBbI)PSqXwjEpu`TrrSo5~ zao7RISF9M<6L(m?LhPf zw}ZcqhL3{8R{ZtZ@IfKz5uXL38etNFrd~oeA0leeCYlQj%-fIGFGTl(68f85s^eOU zeR%Oem!hND;D^~jOMHldq=8WAEioBB4^~o_P(kD=QZTvn)FVJ<;MYiW&Bl!;hN-&B z)Fm*mFI~A3)^JYZMg8!=Y&mKtk_3}E^aoL`>jd970T zsSsdFAhRYLbQhzb%*MdHMP6V2v;Y zJKTjK%J<0=Y47P_b)=x(RMkFo30lIFc*@146dB^wNatRxAj0O{)cjP4J6{n21qB6H z_dWHT*apxu9|#`W@kVj+ed(&^1)dXYu=_4TAR@+eM70itz4}9Z=vKM_0q4|BQ;A5> zM%Y8;KvTg;ZJJ%vn&`7IH8TTmcx%_4=fwVkZ^F(##4e4Nj09c5FJHgjxqb+E!H~`( zd65}UAZ-3rrQm7)T~NOS7`Jt)C_Nu(1C!yG2xx>i{-$KXw#}DhwQT;!SQIPc{!{3a zUou~@lCM%S%?L}_Vly^-LUq|*SFbP;UmE7@60pp2T(9|I%DP2v$nY$R9)hj}Ay z_ox7TtR%a!HFjqKjFvPv$6Qe=PDGrtK)H+FC&na$+5LwP)9rs;xMT-r0uW{d01zXD zP96KdEg9uYSFI`sW(gX-K|GG&BH%7C(qo-j2gGXsIiD4jaHP(L9U#lf(9AUq@ez8f z6%H<(1y-;`>I$;d%X&C~$zqo|72mCV$#6S_uM$k3kvRQLgQt5g6iD9*!(945KVyR* zPK_w@YvyG=d7=)NF;y@Rj& z8Z(Kr);;olv4J29d34~i?H(_jPn-}ÚRW6;AAf?o3r#IOP`hKL-7d$6Nl!eMQs zkOEem9Bm^7;yG#~5dXo02UdfNV0R*o{G>F&N5hWJGO>Pycef6AllQF1O*5$C5^{32 zv@c!v;?HmT%Q}KtNs__#dXoIFU%yO5 zG<3`00aUcK7~t0g87xjypL>olLF95ES&-_C=p0*)(iw#P+3W|u@iNd%vlt9d1wz;* zu!kEkOy$-4BzwdV+;y}T45}_FYzX!*Al_j8E+Id=#A=ZkPr`1o`V4xIIoAsdGvI~Q z3k@CtuS=xk!-rwrE+-ob;}1SeOK;*!cw+L0=rL5N08%QRofK(PM+(%>K`{)Ew!Zx= zWG|TTME~KKQd9FHv7UkU@ZsD*vmc*{GTEt73MhB(fS}|@P2U!n&K`TMtgVU>FUAvZu%fRvca9*Bu=Seey zS3m-TR&iaHQ?~FDKo>UGqecpLTZk{0D*799_x^*_S}|XB8o8d7?)Mcp5dgCF~iAX za|vh+BkPMCioi~~Yw!)uV;2(!0Hzo=$aHXLQXxlI#mUYAs)lA}^oHXR?f_nvd88}Q z2ICpg&v=P0AEfT_^pqnI6I%my2Mai(J#h-$0Ko6^lNW+#P{ooxwPzr%>>*eS;^Bj! zpU_>Pht+UO-*3ZRjI892CgWqsnmrdWVZG%2dsb9ld?V0oU{{z2Bktdtvh0r8pza!` z2sIhZF^BVX1;c~V|AnNRN@|tPuN=AeqWrZ6Rh6Fg9j!uf>mm9rEdss9@N9 zaBDftWk(Yd6O);7a12pfuLUgt0NTDqRP<|S=VqGnr~n=n0xg+@0(;XH&|5z#ruv+) zFOv2m#3KxUkz{+wgg-Hi89A1CtMr`12gf3`y+CvtLMdPYOH!}N-`?Hr53tw$J;Oz4#?k#e!kLbw+Ynu}1V|IAyt>W~N2LP5)fd|;FTeN4xi6@D2?WJ_2$1q1 zU2otZZ$Q{0<<3?M-w)!WfbcKyMRjpEEf9mVt7{oJS#m2QI|qj*n6rqhSd0Xy>nCnv zbf4y*W|<|7yb7hLkxDybZr&ug>93X?807YpiAgVF6F>h3^ul9Nfd4PkLe8``ftmTw z&!^0NT|bxFo9(CW<|i8(Uxa=Vl5q_T2Ypv6Couu_SG+u{X?^p?jrD?pOW`h7-oJk> zc`Nu8ZJUVeIZvKcK$Q(g*9nqU$>+~z)PU^}N0-6R?h9Er5u#kZ>57W@Xc z<<71Fn!Q$y6tKg|+4&_{UUEHS&-mhe!ctq(Rh`M z-3D3hB~+7Ij4&ci0Q%=~Gj!_FRfE^iL#7{#Um@O5`&kT3Mu+P9zey#}{Rs=8|0}F* z5_3ZdgsR00jsCXw{;BEkzw;^Sw|-n^cw7$sleiq{4yY zv<{)5lQOubm`_k*g8< zw~?;@4j7B5#p%xgO*FK$cH!bAM22MeW;9eAawEI(9PVTNH~-|19B_b^*mYJUc?@C6 z1F8h*FJ5?AYc9@)>S?@5)MNgfT?`v{x3cT}=V4J%x%HyDoL%Bw3+iY-q`sha1O>RT zFg_4)Xn;6`!i@ciW1E_l6(2+;3p+aznkr`!>`$bn4dIM9f6dZYpjpY1ky z*uJfZ8=$jZRx43guoe?|$lMo{ii?SS5-Do3pQ~d?@ldN4lP& zF*T-j8A2u_hXRi2Q|+b8TyT$o`1PR~$3t#-83>WsONL@%V(1!OK$=isqN0bjz%)A{ zJyc6L*$vx*uw>D=!-^Li+Ul6Oo|L$f7cZ3U73ldxPqTaW*$v_z1+VQf+_`@V@483F zP1XKa=I!1$-#ALO`^xuZ$;cmYgO_2W{PB@%ECQx`bo0)g4ga|G5XF}OZ@t7RbXWnE+MUJ|6yB`_bErDsd- zeV_msGq1oE6_34GFUxO*fCt`jBd{^NM_Jj~5juR6CP++>)=9f)9Xg=U>vRmo6Ou7` znPB)Y(`|Y^zEHEjVC7_-+84s5<9b5Y9H2YPs*K^t(W92I%y>Ms*W-2VuAPV46e^;e zd4>Lb=z(Mp5={bd|7kFG=WJ<7$$YqdR8bM34o`O0DusfDv0X3Vh*{0dynxvCHZkE} z%7HTdF+h*5Z>FeVOvQP4xY|)65bJ=>%*M9-iw){bM7hitMGfr5nvv;Yi6Iv++59}8yq*zb10oz!Ne9` zm8^T|^t|X6K~a&tB31mXN3spNM&-MX{D`d|Q#CMn+aj#}P+!7rPfL^XN4IdVo0em3 zyfdK!A`u*yYwQ#xpESGTKERR=odX?jJ#U;<ozmgc1_wNlT|Wbe8+3%rfa}E=oDb0nG=wdI?!2f`Zri%NRLG}=(F*U%-PLw27m8&R^3}G^Mj*N~LXr6n0 zplA&=l0A=clTTL4>E6D+J_B`1I5%dNJ;?iVVY$9dzfs)IWbGEW5#==c96d~5`QkP6 zJxWw!^3B792V$<8?=S{20L!m#Y58Vn-a@6mhnNjB-jJdYMO|>U*=KI1!$xuHQ16PS zK3wa;vrleVMGhANN}xR&;c9p9rZFYRW$oAErjK~`8pH)+wwf5ep@BeMAZ}zWNAKb~ z#few@+H)HZYtu$}a2mo4bY%H;N`31CPE3bo+Ymp^Lnw*h#FYadal4YGrn3>xrq z)y^$Cvfm@wC6Dd#9Dm8HLyKhX?d@%cza#{Qi2kswtgLC*W;J02>u7PV2_f$UU5v#I zvXo6{FiWl!=yGgQ2fGWiXgjT&Rrg^ov#(=W^zO2^5=O>?y z)@z%LN?&>MswP0TSW#}(xUOC=#_iBQP07ooMMDR54o6WFHRUJ1U6VlZ+d#&UhU`CZ zfGx9d%$ThI@LS26QV^V|z_`;MHu)jF%HXm?VumAsK&IV)BOhX?>)KKvj1J5^3cbSP zA^7Ti0-B^y93132*Pre5S}3Iyzx2bRiYN8{{UDq|3CyHB4}wMuGPw95ZG@|iNAGlk zz(bTGWGALp{;us`8M>zMz}>JlGnsH(mhJPId`I?yaaF|;5OzUt#GY*t%kNGgmz(!; z`J+a6$7HAuTyX9@-Luap5TvKT0BVf@6rmLm?%L6q6J{MMTi(p@>=C}r_<*C&I*_2D zXvI@;aB%2N`i9=KwQOcCdY)qs<3h-IEm_K=^h@4#0p-F?9dlNZN>se-%arleLGjvs`a0 zrL_ZmcqnRE8~eV>jbU#q*HRvBLbsa#p!e@*uf{N+nZ0eI+U@E92F`6?q#i(Na!}_v zd!zt^@X{p5ZUrg47d<)EIq&}t`+}&!^q?1U?i<%;G~J{ozZzG=45s*GuxtSkRCdJr z%ucvt-cmb;+xo*fl~R4;{pr)E$^IVX*)Z9yuE>cmrcGP)>=DWocMNeOHi6;xAn|fM zaRNLiue@i$6%(q$8ittRh%nDhC=Hl!4@3a`Seu)_6vAK2jrrvEa=0fQD;bPo3};}a zN_*u7`PCW|1Dr~k)Cn1HjTs(JSWBsiRda9k5`JsBMt1vPbT9u8gpoW94Y<6h>~2fp~vw1jt(~#&+fo=6~Ej85<5Vd1cMmskAkAxf`Gih3KE6{ znmgI$+)t61ifoX7V9a)6{{vGF1P1dKL_5p?b5yZAyGI?vvAE8Di*WjI$foR&4UH9S z#$MV&B@tZ{6I=^5tX6{@jfPhS_v0?sno*=XNy=#x;9mD8Dy<{xa9_ z{(Twv-40xC9sm}&9H#4zj3=#u_wL=>-1Z3(#0sVq3D5B%w8g8CKlu9f>sy{ne6Qch z$=QZ~wvtgj;PclD&{bVH_p1pPBb!ZE_)J$EZky+O{RpZxB=}-MF#S2^C|5v(1VhQ( z{1Jm9ZG}TYADbXGB%<_(N%A`NXlCV`s(`0qJZqPX9gq2U^xc^^afh2&c#B+5IgcU2-_^0pCKhvbE+-WXwA~Vl zbV&O9uY_Owg`PVm*jfG23{iomAY%2z?7Kh|Ddzy|<%LB=$Z#rvAUu|!uy7!n+d@W?;0PGi4z&(*niQ;Si@}$c z!}RXq+TDz02&4L4+l?Vnw|~2~FLb1Or#Ok#P+2r+3qu}b-yh67_4V1{f@lPH@VrDU zR!7i)60qam{rlFy&rHKUgA0NJ0~0_glkbTzrj9nck5qr7|c$LFcfVH{JVJTjc{eJl*XC;} zhq{rML$SSo{G!3>REC+Txs7g=c>bGPEq8hTe%7}4u_C6_jgLJkrrGl%0;S22RCK7o z-KoELZkEKZ5uHKK-z}#s$d;pjY{P5z+~Q@NJ?n)H`4Anp-7quJH)Jr$=O6-00d%ba z;3S~gk+%4B^S09pjc+1R9hAbXUosE$(ReZd%pNVpLW)KX~=DgN{%f;p)j7*rcZf;ZXzbO7;wJ^beM z=p|9X#azMVyvK7ik(XTPl~O$)2PYUPT)*Y?8_{!KDX={v=(A%ReC{)$)UNp_MYF-q ztvQAbLd;QhsBkt-;mhw8Qgo$I=tX}T^VqH1xBY#d#UH?T_uc%Yus|%<{kTDag3Y-t zW=0&%BE1Ru`3elnPbcI#oOBU(U^b(6s(X9u^cv>qy6*L|Z!u*yIn$tWR@KbVXs+#Z z-@V@a)Qp*8pC?&cr9XY^QptRw{P~7b;;UU^n1{&BOqF;qSIkVn!&A7n1lN;wvkeM4_5chp-BED|F@3( zMh(G@+4I5JVHNNIbf9G|6j!E;5G;g)8gL?pSZK;#EaByXWi|}97Zv1@4k&V=z=BOL zC+7Knma=&63m#C(6gLoMW98gICDLOl$^HQ9*GDyupk*8c&-PV2`?F+vQxmO_cF8$E zB2OtOCVzpZ0F6a}=AsXE3z!rS*^Vsh{hKljjRh}{>eSPQ^;bdcA(Ea1u4JZznQxU5 zdSvW1E_bC|MeE8Dwa_&KXwo|D(UT09Y{TKU`M%e`AYtq|6E4Wtj!6Y>ptC8q5^|qe zeLvS<4O>HV-POhJV)2XssJ-oVHd5tKJy|o~w(vBcY49Fm^gSl5C@zriasrF?IN_8-j};(^8s4QUk0vj(rY3*#SHc>|rKw`kGoH{n*1vhjAd;u~aE z?fR#nxm7UMrXBm;v!*Q*!2{R9mO}QkCT&M(PjQEcErt|^**e_^~k)L{j}~g z8G9woV7Y?bp6(W!ERTktV<(&$@M{F2;ElUW=AuLNikur6kG_2sFkTsdHE;ag=Z=vS zS0{F6itXc~pC5lXO}(_U>TLd=W-!)-W`i44Op}j4B(h~oFuqqgMCQ5gikTT1A#SZ_ z1%N`>NE#y90qxsXkdm@-Odw?%5UaGjPa(ojYFgSyyDIRU{vh21MMQ!?k-E)I`ph)} zi?n*N`@r0l2quuHgpso8Nt^dnnfKJd?|lfOq1=Ps!M`xLxfHbpNp2)p;2dY8V)P$x zzEcKpO!7F=oEkjRENj=QVX@of3l74Z^wpe|B1GZ?NVzpYhZE6rp4e5{=sqQdB*Yd8 zT!^t6;gI||)C1>grlS3ey<%xdKA4UY0d58U+hFu{yR}u2wf;FG5B(0WQyov%fsqlU z{c7M>2C3>#=6$_fShRrh@dqw3!bI!9BU2a+eu(_Bj|v!OZtx~8Gc$7^_dKN$wruQyhi<34Yz#0XkY_){i%k>cpbB&@#uNR`pX~U&Gb%k$tHPmNvChuQG9H` z^{H6Kbq$45RasERDluEGI^4x3E!|u3yXO$QbnqZEsk@n@=TWwY2#Gs})|toBsMcZF z|K!~zqLxo1!)%Rdun?=l{)yQWq8KSN5xZn3;EVdvquQ$2^pGW!S#%`_8_0@l5-G;({Fh*}f}p5*#xV#!FLmoI1O!CEBxAVWIL@Q+y4* zNAJHMe(xwA5cs;B*TpRV-nQzACr{eH3P_cjHS(}?YyG^HwVGm46GFYWMQ7(-1G%yO z@&=)ENx+&=nK)BoJx-9S)OUXh$})gN5b34-cxU7j&Hm)p@^SjfU$+Y|3Ax6!Nr959b_woWIR=Err5iXmWrz+WeW|gS?Y-r1om!Tl5^ zDPxHDEjU=O#vr$K;GRblDzs{OD!)-&dWyGvA?1y1{Ra?diiK?Pb!B@9NB_Scu=h_aMx`_B?@RaflEgW%x-fZ;C;r|FR$hePyn@uI-%qR;_1zHJbjYYM$Q5 z?3?vss0)mPqf;D%_U*gPw#0k-SKh##9ihz1m&voonYVD67rP!0p8c8L?ObwS?@YrR zz3H!M*=+%t<$7Ij{U4Us1PxAG9erzN7(r$8-IC*a&f&Jp@NM@auMvlS{Ty`|Hdi!# z3`k7jOxRabk~j4BB>6_b@K%Uk|JLjHYQFm|kZL)aJx~U0d%TG9u^qRqhXn?@)U16v z{qs#Ci~+C4u)W6a-kzNF*k`iHA{wP|4Pno2fU_xd9|U@-9V0*TO!KcN8UBu*KF51k z*w!uPsTF%rG`*V~RB}ic8$WnIXjt~!=PC8a_^(gyHU_^=&gH#a%u zM61TU@kS~82LWN`)SY*$KE-BNO&8pD|MlXI#ORmyV2Ak>&u~_|`w4BYGS!S+$Gnd> zna@o&5{BmwjQ3r&iztZ0hwZzB}bh(RH+G5z?J0k=T~ z2zAgRZkdkrl%z0d#}!sc@sD~5C=KE0iXivkC`#xD@e$UQ zR1FrU;qn&l;pDmBXI99MgxvV~v$N1}nUa*r!y@6(VvGH1jB8X?8n6R=W-Sh>NzbDw zXbhfQ`;_rGE+maJ-$dD7~pH%n*#mw z+5<(nHsR)06k+16m0xwf{@ z9ewxpyOe^m>|Kv~j!xek4jB{;;bzS}H|ktvX2>L9x_#&7nVR<0jQfrWyC^xI>y4s@ zv&G*AaySlX_#lxLj+56Ambd0VTa<(Zox3Ra&iF;V2(0={dfwCJSooW+0j&YQX&n>E~ z5NYdUS8#6 zl=!FQx{ibdzR$n?!?<@!5xSpLo9mfz`YoafPw@Wz`!va0Z(nWPS+2m{Og3VZL(qXA z!67Cm^lg;x=O!jdJ(wN-$$q*sX81~%RC4wC^oJH7t7V20K4zaVdw+OhVs5DAu1rt+ z$86Vg1Nhf@wzI7_o^1@BD0zD@`^;cL=5c@ZxQ_&;eTg$2e#(=^%vnXq*T0|j21Fc? z`4+x=TMkBu)VmMlHg3yVM5%(S=zcrE)t<-Zrlwrr{4_{L2p1wCR2y?{G-$O+3T|4_ zBw(*RU6I*{1>|eb;AeIEbkw=M;Z0}h)u^a6=k+28X6sT8O9^~PZ+oWBci7#_?)Is= z^rlDenG}6LbQ0+4WPXcd(Egqd4GI)VE1y_N zCs?w&vgrfvn&=C5n5X3Ig6ry$50DT*FsOlAxkd=dBY`-d{kUEAzJb8@n^(`Abt-rI zlWHr?ZBFi^QKo4Xam_3XDhha{KWFoi1kk1QQ0m8J)!`3U-+B($h)6!E7-oBWLP}kT z(lmuC*ZH>RtJ_UEg;K7s&lSizs`oBL&=3@U8?ukqB%R4{GvS zb_OAwd;8=cQhYxgCsqn544ddV0hS0lzOURw_|s&>p1V4>+u~%33?7O6e85Pl6ubYy zC|QRxt2|MiKR%hEZC%=BQ=b0h4SCwpl0K7;A8i?Lx;tY=&Xi`G-~R3;pd>Ox4%yqL zr`d@KXURdQLx=g4=ZX{4J!S|~WDwr}q%N4~69BV0J{sqpvV=ig6d0|xrRCJim3oJ6 z{+Pa->wg*qkknOIrNQeyN(U zVkw6VO&qJCeF|q(j=Qv_tjBAGiEtaR-@l()EuhZw<0-W3*@fn_KchLC=lgbAk(Y|Q z!8SLGLqUQ8eiKQwl_an=C8PSrOI>qxV5H+x;u|{LI%qcHSuHg*cOOwW=Ep&%iweVP z)8C`6J2$Y7mEQLIF7f@lizA~p3Uq9Nz(sGkHqW;`?(N>zJKiqc8u}@JVf5e`12f5! z3n<2!AVjXI9qAg3&Lj!_Kc6%ZwDe|c6HL+ZX=rFTV$Vpqb#dLvybT~5uMLE)lNQ4e zhO6|L@Qxl69@`)1V0^Fe-I_abFE|r$Pw{@nS@t$0)3cwONodjoGFWmoe=e-gK%f+X z)#)vpO*w)U@VhM^*~aCEiv@dQCaU7<$0pL4DU{h{dwDH#&DMV-t8I{s1#zKeR9IJRR~web*x9wqN<35qig_h(o-fXou^nO(P8r zRcV;3VD&!#9!V89r0mWCGLI>Fd6hPvJhX-&mfpzE^$)d`$-(jINn+v#o)mCZy9goZ z-_@lYA-4&4Tw>O#Y-+{*Fwxnf6paA_I>0_3nIbY8oJ921{pZ2>x%f|9i(?iD5!5Dk zR6km?JbExV%**na>FHl3f8N-(dygL|9FBXo(Y5@U)XB7fYhtn7nQvWgEM33ueWQAC zv6Ehlr_Gq0zjx(}0exV)X>FR;h_&rpdjrSHPC_RA{e&L}NPX4xf#_&pxNDktC`maW z-ScqE%GH5r%qxUpo*sUZ+VSU}HLM9;!;Kp4^(T}u_#ws-lav0uG5jVI#9M8RN6!2U2uCI>_grOfwuWj<=*xZ71`%v_dby0g$^9Dz-|GeKDH~QXp^mIIKXw;ZeeZKJI$m3fL%jW7o z4CFffAa|NU)`8hSOjs^7@fHEnsTIRYiSeYK`aWh5(z=XJ+e&x$QPgwi<_Sw#xK)ul4y*_WJh zMz6-;=;y`68BKaRyh=|oa0BWC#l)H|w|YM7K(E$~r`ih|mMJmc1n>);YzZFk42#~; z_fj-V;MUYs1})0fsWWP%{f=VhKHB`}#aYMg_Tq^5yPxjuY!F&`1{-g@n~9q&b$`9D zw?m?t-k8_ZCebG?SO2S&JE}1Cu}1Ci;bTQ^`8bidQ0oUlcz4l3v4yDaN2b7&JAIEj zK+iB5qEoTk<|(N;wBGh&^qD@F7$!{cVwO5J`g@8F<(BSV2QN~?IhCkBwECWZuR*r< zn?gh4)}JHb)B5$n-g^GH?^q_zb10g+$hY|6ncc2jzmpFQqnt=H;QW3on>X-w=Zx5D z%KD$Do!fmGa{;m~hYR2hC@4TSa$A6gI+S(Nn;v^&Z!5)^LtEYnzUyVK5c}knN;1v@S#-`>$5cR~( zK|fK>UvTON@87+<8H$U6O@Bm3*cLh{9}+Kom`2qp_B?reZqQL3TNJPNNGR`h?j;xc zdilg=K9r3A_-2GSZk$^t;zmFbtD|U|2CZI@9Q=U;yy1Wq7Eibf%*VL-1N{l{{NE}3 zEzt#mf;gI=AsCTb?dB<G(%TAWKZE({mw)Ocr}Z@-g8+*_~R_6E10t>UQt`-zVd5)}=B8neUtT=DF$ zOl#Q2Ihq&v79NLOO56|v^tTzztElkjZGI(h6XsD@=nj>7yPL61$!a;Ty%a zU}p)CbZaB{MRNK#F4?JtuX-d5ym(&!Ex+LaCui$Em@#B)ZDnPd<_52Nfg5XbMF|`r zEgm{K*}zW`ZF`t`GJsh;mOJM0ha{cjk@Z&##z!2klsdiCGDrc=I#}~y5g_|fu$%w$ zgfJq!=~liNH~mdOZ*X1gyvoyvsCzwZGa-=ud*W?%2+!b^Tp--a63Rsq5+&Tr`}b%$ z``E`G2{%2}UKZO&5BIeSsBuSmUEw@gXk%nLnc=5*AUc0x{P)S1&N1yB(QgABcIJ#M zwN9y@c5fe3CZrnu1+HI zuB5$_a_?}qZAMeqqjYvAsdex^2zA$8iL7hCmDgTuCdZLt8#$pZjQ#bl10uy;o%3qX zMs6*zjth0r#~Z|X4j_3kH7x_dv$nluuHx75D<|i~gl#){1=}DV$xQ{lkgz|c3H0Hs zCbFe6r26Q`-xJjTdqgGSuG`K!YQMcF-^Cqs0Vu17aM%%h?uX`Mb4Zo2N$w-zy|#t$ zUsLxoYg(@i@_=DwSY8kVY@gG3eIQrjSbqzF_QY@ri9hG0!*~H@P$VX7%}V(^ z8G=Bc^W4u2%j*ecb(&;#wtDyB7Pg^3#b( z=dqJ7#1B*)cyQ=O?v=Gm`rD*p^%zY1|!P99hpi_PX50=8Hzm_ugdA7^o$Nk_jV3< zNtNBPDdfnkZjGfb;_QE0N9%|fWb{uc=|3ksNo1;5*n|V$bFuAmKJ0Z%_lJlSNDfel zb15ovFywTdNeIN}UFVyGmHGFx(g{~ltH3=`KIRQEvS zOo3{B4lUt9XueXkJ_qw0THiU5Id$mUkwCUT0p~RWj&aiYCD@k0xpIX2CR8Qrmk9FW zn!+N>d3`)ITm)Ygy;LEvoRCKLO{UkVi`I)Ye0X0GJ!hxf;!$(2K`7+R>k4XloVV0g zkv7M9;LWO!qO||}U*h)n}q-WE5rZgJu?@zaJs; za8;DR9?DQr&M)bN{6T}&&<-_$!)x1f;pn=0hNt$k@q2X@hrM1PuGEo~8{Vrn%nYWi z{`G4(EN<_So)oq!eNrMgqGJZYop;WrxROB7h0h$mef{(PG}&sZ^A{*)R(<42ES3|A z&GU+H(%#mtelL+<95Wn^ReJ9FFSGcc8 z`$Id;t@Tx9D^%}xSeHWy+jNAH!fA&c>jW1oib&)sxJ&75t!=fO<$T|@HecpBkc|6? zA@NFdS%;$RCfCJ>j@TSEOK&q}?vpmE2+WO=@bW%eKs|S^Kf_j?Krz(g1*E=iulAr>@*3GSf>bk8EjgJYTW@-&a%GjRv)HT-nQpo1wMKrEq=n ze!wQ%u?M(F18lq;hF7VQ_vMD`J7s1s96IFIv}o0UIakeRNf{Bw zskbJkOuX`r$4F`K%AoWx=O~?Z?oU_HaGB`xC>4LOvsRgp5?>}_H%Ly`-;a{DDb!$a zz)uI2&*3^iYdA1T#<)zUB4XuaKYBxH!kj0uKf$hxo;4uMAZu_nr3jLESF7ap|M+_I zc&gL)e_YcvK24LRQ52y)El7)f>rcu6=xroNkQuA{>9Fb1`+*|o&hM}(eL|LBs?_xohTBm+e z^OsB5-gWo5{p3~OMV@{Bw>~=~;5u=6;_SlWLw!QmZ$y+yQ5>u6b^OIgXWqxB;#=c< z%?somD+=Hry^AaG?ACA*@~>FhtbgDVYCCqAoO-@$aWjqArpd*N zo4@vMMtlArnP@J*)*F1|MiIIim?a;ZiF4$72-Fe;B5xyAm_*Kd_2m#@htcFP_W9@M z+KSvR782i6%=FB->1VjoUNSrVq z?w{wU6Y*H5J#)_|sl?WOA|)Ot_tVX#&F&jpP%kIOF9e36so?#3Vd6hH|nr$Z3o%t!H9NLuk%WW?JB)+unIbK^{hDA8&uHjOcj9 z?*p}m<_73$-nd_J@+Q@_`16$-k1S8o4i2Nt!>sEF^f}v?=*CE=O1wI#- z+|0`()=rKS3Eio+{##?u}36#xH}VT3!Ku zj>D^>)VA_7iYOVL1H~r@zXC$_rm?_4TdAag*HRJuI@-;l3bPI;ot;cebQqtNdUWDG z1TO>hUP(%cj#YW1v|B;Z=hd|*gN3P1AyoX&Wk<@_6GxoDqjw#kHQuRG=5bXe1|k84 z&xgxOOHuQ9$i=evFoB2z=7{qg4CW7#^fMG&Bs9|OzV}lP3~-E5edb&Hi#{y}^~ky2 z&9pUB8jar0E(CxWv*iF1IJt?BSp(0m!}ahC`>LuGtkuqTb+&0X3sJbItKj@BXpOzt zqUej3tz(OLyzgHR4&k@`nA*LLsT%!d`W!cdhvwh6CqhLTCC;nxvK+(wp+tMC!lz82 zUZ`$#yMHk+k{%IUh?h}IIKM?v*rayhZTk-QzUz_$HDY{0Q~5Tn;wP?|&fC`I%{VG8T< zK3`{>(xBfq2No)J*yTIt5rd7UNYmx{^78KJ!1i9kC}gGR5ZUI_`WhoVZ^SVAb18-b zBc)&+7Gl1O3zRo#%##9@-6r9H@j@yZ)!4;q zhkZ3y@8#+>%t4RiPwn5ROR&T6gU?K#^i4G2P(3q73X%4)pvB6=evw| zA&@AZ6EY176dQecJt{#P)b*;oH4*NcP{zMQ`|CzAG|W1jPpLn!Yy^4aNK!bNzFYR5xZj*Za^7pbT3gGnuSKO_mK@XLoul_>7AbooyHgZqxq$2cE}^ z&Sc3~fmuc9irVJO*Z3VK7n_>5m|rZJF5~&VanBwCp7K+W~1Q%)k)_v1cd4vLwbQcg@#Lb%KGriJxd&h8X>c z+YMNNhzXYh&g;r=iu0T2=y$Fh35k)RP!J_Np$%)+u-y)|s;&-gg{eIUpjIpQi~}K5 zIGfJKSiE6D-byMmz(B|#-%}bI+*WnZJcJB!xt{LNQo{c%#C%I8AR3&##f|YvNkQO6 zNF&z%em;~Oe&JLndET%oz+e7tiA!Iv0(lNLf`_N2(nmA6=!GVqpPy>8veT|pQ;xNz zoaZyGQKUPEi`ewh-lMHRs!)V) z9C<6xOPe%_7Z0U`%bpJm{k^BCGVVjY4MWLKYRF=0(4;FguQzAUR_k^isy5VQtO6=V z8UO^iMXvasv)Nzs^!#s#OiLmxZ-3I`l~SI=trKj@pzOj>Q{35Aif0U<0a1Ct$MQ0j z1+v=juA!)Amu;?Y;?Nuwo1|m<)rTZv7R;Km-$nr|52O^gIu&VbXd5A66wtnN2 z|4gFw7vnUd_sGH~DLq}r4(+@^#$IOUfg10CsinYj(6#4}!Y329$qd309Q6MK+zE<& zHf-$RXiN7eKW)o>opWD%=l$&aDiz^!syCD3w8Fj$_?R}wtz=$7vRC`DKX=bi9j)%l z{A4^Q8ZAPzpST(9uP%yNQxW9mSs;lW4|6*h%qbrk)ztm1^{ZJtoTa@D$7@TpsERsEU0l=<<56UrR|m}l>a-Nmg!6<-&1^b=v!O7qu=C7KiW#NM1fvEm=>K)b9{ zrV3KHFdt(Rd>cFNRqQ<4T--%q^S*s&IWy|tf2;TTgDS<%}m%P2p5ySce7ynCMSxYE3MUYK~>)Sk=H-27EdX6NUn_d8;adz~&Y<^So=`U(pox0n=<1v)d*xy$o`mV#=5^=igUc z!e(DknDT!pJ(R!9;e)5Ge#}Z@88{TBp_ZT)Z94wGPx|wP9wjx0zcGt}Cv%r3?lHDL z`YG75L|^EfA`OJy59bhxV<1aE`>ys* zc17#MfE=$3NvChNG|0y|`y6UHz4!6+O60Uezji;>)Kq6g81#vIa2bJ!e%G6Y=SyHi z!RKt+;!u$3@V^mc1B_x!8-c>lz1sa1L)E&hZe?waV(@w@yWx8v{5 z?MsdnKX6jxeBCUcJms59t9I=D{VO5ks9#pqeEoZ5;V(i9b^U*i)wy1m^Si)}Lhj?ovzy92X4(DwjX}sl=xP-=2UaU+pD_HpS`ABp9VTieGrM-89h33 zwO+npQvA3(vap#}39UzL+p5rz-L_@t_$~)skjYPbHI^YXbCR zj#b~e>ice_?6$7n!P^S6ta_fAB?1b`*>U9cIBRY7aH-;Y_N8U7&EHx*-J$0EV)X7x zTCNH-b)$d%eCGC|k!}%oZiFo&FP^2ATW#6q+%#U;PdCa78Yv)l(5LcTHZU}GGB~#B zc0zM}Z0se}nd`uamh6}XQt*Ix(Hv13QbiCe7r5bl0mwx-3SmCm< z$68@m4b;UJlt^iKhAPa=51#2+w>&&Mdbf?qdV9pk)qgB$zrf)m<&8j>v3b?`HVJ-)2mIf1Zz41C(pSv_XJ9T&HSgM2` z_BCvtg#VgJDp$Enjg8c;G|SE~etgpCvckQF`&z~#ykTYw{DRN?5AP#~T;-uds+Iy0 z<>e8Z%kQ+8w3#cE4DhC*7{YUT@Q!R*o~kVK?Am>y9u=b@3ZVhha0bo%S%Yj~Qiw##~~KR)@OH)^S>o7nJf z+m}fl?LB*Ej2}V~qj=89X}>+jTYn7Gvz-dfT77ozEujc0)S$j%NlO*vE$36n6TkUT zTqjI#g+z#8p`(jSz_}4SoF1M??Gp`kCB?LfJTd~&JEkh8@q?i%yPRHu5>Yps{q`yV zng_sow;Wo{jVU;9zt(Y>!oI*wGzYi)x4TBcx0|?P1L{nhCbw3Hk!TeVpDhR-aTEXQTu^v9xGH;b1K(j zY{v=UxE8e5GPF>Bk1p?>&IPF165s#W2<}#w5Z4oY5aDaiu*e;KB3X6BPXo0FcCuiB zKX1eVI;E7I*L}*l3MptiVk) z>96_EVO_;NtcR6PxBhlAck7YhI>+GAf#1&0(ePZd`(`4_@~y@t!vSqK#jj??Zx;?Ko+k;L3W%HF> z3-FA4auQ<78)f{1`+5Z~_BC#DD%Hq1R-c{OeqTq=^2s-}&jVeYzAD>`_v7>**#3Dn zMee7)y1BB}s5UJv@n14#^j+5Q)7S(pQ@zcm>DEF?$}g1_Y;U+lpPF7Q>kxDZw8Qpx zUk8#x3?xhDFVuc8w$F2-_FkhrdCY#vM1OM1S$^;AKao=Xcy{XQZb={Ld91O;Z^v45 zucO-5Ew-V8URjB|KPlhc({(+dFTX^fXt#ahk6|-}3p;Fui~Y=Vism_6-Gl`YkT4bG z4L!KP%gx>ZOVu>-7|UHGbJniQU#Po2Z6iJVber0Ze{Jf%GIYY}tzqq=;}^zV{Bsj@ z*;j%7mC!;h6L~80)Y8V=#HKDm`fE%51j=2-=w`awjHEO+{>vJ-+FbVWiFWq=xx^MN zebEmd_%1rtd{Ot{eq3LfOU{YHh3iM0{PH|sDmm>+lQ?7`${QgqVdmMmchQIP2M?A@ zE*fw!adgX`=jM4R&n^8DJs8`A0t8_(FK?^OyFLx&gK+xA@M}TSkUFZ2^0MHinfSdr zgr_|n>e;LFRMA!`4)lk)_JWHU@|d>}P~}49T01d8zB+p1TgR?l<@9D&>f?#OPC2tp z$;+koU8<%Z+*5jX=JG%Vx3fx99Uob1)g<=m8ZDgZHMFg1{Nm?0eXE|>mc+LAtuA<0 zAE`{oywn0-L`3BDH`;4)F9T0(e+7j2sam+-o`@_1nAk`6J?lMCA3q2v~rLO9|Y zvzcYnn>p8F(|lReSJE0Lne@E7Y73?|9QQ!y&rF$Hf875(P}pnAev@Z>Upp?Hop!_F zll*2_1m(LkIbNkT2I>WeUiglQqHc4qSX(LAcKmZkSoF>n_J^2Y4IVQ`1(6MFcG}hC z)y%rPav<EV5-nOv6?xQ@k-Tm=%3}s{B|zg z*I2T5!ELRss{zrE6E;;$lxxOqK77uqK~73k?6rKL@*^zYYQ03fe}u`F^`d7gHqQS( z`TpJIfhv|~$3LHMnz;Sb{(|zh->)dDpZi5&R2A-%d9j2weDVpKpDu~1okF)OHRvE7 z!GLqoAf=B#?zjKyvN1L^k0cG?0msjT8{Ib9qv_Me1zAP~Dr`LOA)y-}e>~$e0j&2iLpCW3Y5i9dlq4W0F zVGKT#D@gBRv$QiJ*Wx=>uMpN^;d1q86`$&&h0N~lfWo z)DGfhp)e;*ffKD#xCK=M=nn1Y?qX_%!g|J1jy~a9N*lG{@MHrMhnkwW%`(2T{L0uD z+*Ea7draW&`||8Aaz5*1kV`i(nBQqSrRy)Ms*07W&k+bN3i?K%NY(P;PI&a&T7`Rp zPy5dotZA0kWEKPu7vTlNg0`J-xSmn8%urMCG!2LKEmU(Zq3(%?PTl5EXPCT#8_x1X zZ=TNCsaLzD0?_7vm!ff}FfImI_vE2s#&(lUkI)Tw)@3 zxD1zjzrn%*KVg+X>weA_EOZvR%;9d;t@q2Rt& z4wU(2zMvhNWHQye{O3Nr`*_pCObfI&*NJbseJMop{UXD#JTNtcvaDXfb~p6v#FpLn zI}!RwCmr9B8C|E80}&$epF@R z;e2tC!=Ey7o2`zu*HyAR3qFfKc%T=|BiwNPWPJ2UoVv7^t`Wt>FaoQa8{|htU#MNaBjb<#*2M%Vr{>D&7tf+AJVsj*f~Gc#wg*=He7QUb{CDm`x%ug_(N*r<{2 zaxQ@4p)}@ca>FBjZg}+QO8Z;&Cdc04foo42?rYaak~=9lLmL`PudIgHbv_gaCwsL6-epLKk~$*ZsZV1w>zhTz^bO zY&EDqi>LgV-F`DQ_*86iBguv&w3uM}Ln!*)jPhoy^*TcJV|5;63_3N@PR0%81*fB< z6{T=MGgmnKpBqM0YjN)E@X*_VkB#dQa%ebJ>@+S6Gqe*tBhT42+Anr+(S%f($lHY= z1bO$rfBw9T{UP;!Non;$xSzXDe!rlgVwc?77xK4<3^7ff)^V|Al- zayTQo{&)y(5{ZqV;7wVFRgha>)|z|{+wa&2<^eB43+kB^D(4RE;Zxbgl;=+EKKF~( z_{h7k=rO)M`Y|?ppK5shU@)v5+lGqhpzE7ak?5tW*I=b4IqmFUuRTNn!Q}#Q>Q|+j zn`X7fUXEX_lD9HY(O%>Fbu{P4U6GKnU6j;Rt33S940Nq8NB0gIDTN!2bZX7qY#FvM z6GHQ_gh1R4tcupOoam#{CX%DFQB$5*>%j1(EcE14MEMxTSCeS@0dK`R&fVyxb7a=O z2r4N#?SmLkD=g*rTxBOGrJ=4AI>8g4p6wx*qjByR*#5Kc>b>UPNhq({#vfbRch>dD zxXrtSP!WN~bdP9PC-)Hr*-|ET!@Ey466cdTP`ms?AA!+`o<3n>=;5W7cI7A;wtDA9K~MsQJk2`?7|3jKn#M&w5jHrDWuwi|d(uE} zZ%zMKmrbF-MWPt1JiHWPL+lDBhPl>ZJ=Z#1w$S`!wJ>AK3Qf<#FSce>f{bV6_+*}O zp}xy$pFQ6?+TVItU6ABIlXqcJaGCPgv#b!iUOLqD!Qne$Wx%-sLtR-rb5Gl6oM?Qo z?H^l9P4|%J4Ma}7!D*K^c4|L{3NHn(dpaOgOLTycNijl{u<8)vzcieTDFXPIa#qm0 zM+g!txzP65DIBOW`i|JKuW;hMN2imMl|N~;mb0Vu(YIf>w1w08;FgkwMb~%F?o7DZ z{2&!L9U8}_uYJA0q3g|Q~L*A^yhT6pAcqt zkcVd9eudB@r!jXhg}C z!;w7-o?x6~*RN;_r2hJiQ%X#N@W#s~quF^Nq;-6Cw~IZ*mq_UV$K#QM0SNr)6d*Ya z?FI+xt-T*&$MtvlACGOMjrnnQ>-#7%8!0TBA9Rb z6p@2WTlCesq$x;64T6glX|~?XcyURn;tEku=bg0UpJVs5U8z#kjK0v~JY9r}v;)b= z7eglG(ETF>wE=5n{r9vV=tJ{)33!cuV8c=23NP=2f0CZkc0T!)@v`v`9Wtgdtm#M0@j{S~*F#C)G!vI;y$~E#toL`Z=^9Y`N|Gfw6*d3~9Pnuzr z;aIYIplfDxwE0*uGTGj?%G%-?F#<)QXD;|GJ&%wR*~9C$+qE|-m~_-`Sl%a=Z@!@2 zk^q0^_2e5vBE*4oFE;*$mvmh)0oJVRu7WkjEHIKuz@Ha`C>iI-{QlB7t=0VKkPQHv z`}j~F`b^qTx!(y9tm8wHJi;Xin%OC3lDos^lROe|B&PW;He>n>9aVI(`C(-0_{C@K zoWb#aMCAFLQ>Hlj*@3;nC6q$;Dz>+5tje8rFL}y4PWRI`*t=LmphiLGv?Bzh^3s;$ z&dwEiY|!LBi%D1VRUi6=sZ@2J<7KG1vB~tAkC3T)Y2CdD#!C zC*Ehjb3CZ4lVmXh3>^c)A$Hj(ZBUa+et$ni z1De(OXCn=8j-ydipFdysz=1_j&m?71uOVyZb1u(;s=FW<=+0Pqy6*BhBUkH5&1~)i76>h4!3|^U!7uOac0Ts(Z`%J+py?LQ3*6vhHZw8!G1+? zdi+vYYq#oMj_^sYwH2E=8E^WR`-!~?kp#K^+(A9dM?b>>7D3I#9J@gXLt<^KBU*KZ zxD9hlV;&;|p~Ae}yU24it5o9vc_ID_lu39*=c39Q zB^5+chs1qVScRcciv&%6Vrc3-e{fS%mV$DQK(T#A_hp6X;&4wVqZh_|??5MToy{FF zou-ymd@VUByjqc&){NM^Vs##}%Wqk;3DF-vaaebQ858+$vA!y%f$dWF-I?k^=xL46x6?13on~RUpO-mqpPUix*ZU0 ztc|HbsB2Y1rq|Ug(y=}}r6dB{Dk2saStG(>Jv(kI^f#jS<)Th+nj6HSeF4qLZn~{i zV-MkLCE_{3q`b+=8>%s;aP3|N?yg>aOV+c{GuGy% zkI^F=x&K7nQht8T-UTsBUL#*iGuXGk=%k_h_vWkN=)RJFJ5OgrV7_35|ErXyB`X__ zmoWfta#>*cU#@I=`=;7RWAD&7ThOS$*uY?+W%!xnB${bdF!zZpCI;V~3$ce>-9sCtE)Kw=(YYUD~ z$nZ?XVNL;p`1!y+cTuM-vVHT%_N^)mUNYr3edyj&x~t7MQ_I!Lp@MJIlj6(IcQluANps_gR_^Oyh%uF3e@Z@*;|mL9fE0#kXTr*V)+ z+i0gSigppNnEOxr_U$`1G>nFQ_T}w-KA>8x&35Szug141!~JGMs81^lI>u9Fng-ie!#^I zH^z&&Q2dfAAh1nm-VV!eJ^b-=R0?P86W#F|h0ePY?7%~|go0R25DGF=G6X2d&63!N zU1jT{TcwT{aSArz8kwsqpL)$1ELYTQ(~#$E|B|FLUzVpU3qj~elcP=#C>}feq`Ees}r&{z^#kxfL${-^|LA<@@+D zbvK&>{g{SV4Fi8}t*g74xFP7A4ua&|EEHk5LGmQw+KT77+cy2*%Y*3^?McG2b2C{Eofwoyqe(mG8HNT?|s*I{JJF`18syH_@sOV#!Pmv9SOH#&PriiNxGl1%gJyB^Spfq>bbxxSc@<7GY|$!{|jWm(bBV} zRFF^6`XE#7oh9R&HMrY+YKDGWo>5xo%n+2wcZ}N|D9P;VN&Kq}G`&#a-xphk&Zj$) zLftQvIAsF(yowbrga!9S3v(e5x7!MD*OQ%rS=tEG#rUd6;nSXwuk_gRVw0-1A5XO} z%ol9gvg_;actnZpIK}M3)#tNhwYHooE#*`_i8_!SrR4Oj&E8a%wLTNPS^@JqZr%mf zhLE($t(nhZ@;Pcn(-v}ic`{Kbq^Lk~GNi{7*Mgc|9Z$Z84ZLa=!gwm zb?tc}x(3XFA@3nGrM9*G*^1rtZr)Rgn!$f?-p>!gBbKTxz^VGG{rVS(BGGsO*1$j% z+hPQZu3B{K#XR{&+EyDGXQH@@>47^a^a{y5E8H#%pDx-c`B%8lUE-rFkoze@Gqri8 z@`zT=UU=$)@wZZKDDVeS-;M}RRxGLoAWTNk5LdmJ@eqOpNu8OAC-z1!Y|JM0Vjcdt!PMnLmyppV-6pSrdKUU|{Urd6(@D+9J>=p$3v@eU<|%0TT{PRY$)A*%E(7Q3+{;%D`N z_kV!xxOYWTZt8NrCHoc}lBC4zFTTX~;giId_~+|c3Kbav{6t~$&rU^AsK}Bousa~? zor*kGIY76;pXiwnI-FhCb+1%JXeEU{{LzRpnMbnqFgL|H)wIykR^;GdFX!?aco*9{b5VKZ#vO2@1F`1XOcIrO( zGMK#d>j_AGFs|8Z8aQjuq)PMcH8wXD+7$CX>qPI^s}EvCAbl(sIB5FJ00(pqyA~Xf zB7Vd;=a<{b>5n(TCZ4W~(#=)Kck9V^Y>@i5PvLprOAElKlHO_qkw!_xmkq^d{a1Y6 z4aYIOEg5ppg+Ma(W5zFH>B^)}$Q(xZdE6%*$(PA_JY1Ej+v}N?bfV(UfvoK1PT#aA z*rt!yzWlMaH-w(_`Q4>#&6$4eiFz2YCmGq(+=%3dxdaJ}x6Viv$*{fppB;={MM&Zz zSvwPuq3()M+czQ7r0Riu<>VYS+YcackN{pABt~_@K8i^~l3fmz8E%lKT-_IQoryxa zEe6x)Mo(4YR&(~>xG}$f0piUW^0xSY+wQsjAEtqQUVkS~+UsY@5k;4+RsBsSzH)|Mj3*n^4v{MQX=R8UVtm?96DK5?7{T#*fFLfX>(+u4z(A{!fAC1NZsyW(n(m!J!e^YGqQs}{crbUeuavd+ zgZ;yN4>JbN)d(2sImp1z#_867*B`h`jJ?N5Yn!B2Au@_*>T93};S0Cdl?sk+9* z-#`+veFWzrH}Hol9^;t*UR~Xhkkt+^%_MM7;zy1zUiHh|-==dpCdZH2*XUclkf|`A zmkkCo5c|M4^KfB_LwRom9)EI+vT-389qJ)BXAz<7A208NeNgxGN1Z!{(kCoT6XSlF zw$-q&E^ozR4}8M#c_JL)01`(FUqB$lCWQ;`%6!ia9rj-QPTpaVHM_M`e7=nwE_9nu zV@~1kZnb^VDM|Xd>6-!-EH$*wVmiQrE{J?SSakX=ufw1iIv3-TSGcA5#(1@^LV@M) zpq0DCc5g!div4|1dX{&>=-KNK!yqR}*b#ol^R0`877jlI5#14j-_`y+4};@ z-Wfp$+I#NwMP@CdxHG*W0nfsI%V6|XhQKtl%m04BAbUVMtnHRq8quBZS=^}V58m8X z5HW@PVQ6oC_5;pyDa)cvO+i95`RCaS2erJCzq93|GlZA^@p?2#krf6?4}jSshbRUU z{)ADpHN@Dd^-kYD(I91R&gV)mQMAv;=}&G)N6z>_ke5G*9I}jE6uuR6ok<5o2&1_c zWEZT^CVaziUy*;%F7Rr@UU5kV6$5SO8p#t*DSqcTb+<|6!m^PCNs0c^mAAuRpF3a~ z{^*R7+^LuodoL3&@1L*sNED22L9lp<6H7NvKmQ|UAJPLir#hcLk4!9d;#ZThBx`Z& z323xA^dy%sVfNt_)0w{0i=CQ}_k?{&^zBFhyT?iU={L7IuLBf|)|RkZbW`m0rfDty z6N7?r`mww>lhy@ouec>pnU_ovVi*{Q?27dneoFlx{~bQGZij9&F~Ud~mv)b|991XY z>zG5+oDr$zedD$kVx9yV4+IyCuW~At%|_=98wmFvCY{z`J6O=S-CNR=VxIagefw*C zjd$m=z|U0+yB-nj>H5+6qBvu6a3}c9>@>m@Zu2u#%KKav?&DZCC`!e=oD^7ob>7yC>wc_k?}4rzr?^c!D(N5nE_=446}L^?u_bG~PxiycM1c z8E)25xg@l*^sn;}K zU#ouv%=rT9loay(4rmW~t`|MLLycsIR7 z7a$3Mvu~LP?!*R?q${-}_aHH*u^<>e(0UTLC>c1Jx`RXSgy$H^C(l#i9B%LIWC|OH zS8V3;3Y=a(RFw6TAYSD_n#wI>NSSn_hHE75r>{y zFDrM>NjpCFzvyNEjvZp#giyVnr~GN}5|<_iT-B#=y&{C;HeooE?%UnZz~6#0EKOA* znRT=e>UFwDQwl+|SWaLh9TP*OO!Hk>+W&+(A+H}hm}zCFIWly;FQ`3tUn9d$fU?F+e&E-Z zTjo^iC5}?|9Ldb3feKx*P;WodwZuEg9YJmK)Z`cqgg^uyuRL70f^hgMMsRlFk+C#1|NQH@vo;gh0}ZW0)Hbk!M5v#xqs9p@1ZBuk3ZeXq zy7H$>1rxpYuuRoN!Ua3^a@%hJI z8%@Xr4FHJzWn2rl-0g!;k;BKA^~n#LHqP(v{Qu!R{2BgmAX?e@FV4gCqPybYgbDL( z1EmDMIgNON?^+AImOu=h6rWl0YRYs3Fk-@qw4IYtab?N3TA_p)fL;(4%$N#eF4KlD zN0lXGEaN+j$h(4ba8O{;s$Xoz>UBek#WeaB&HWbO=sTUt4L)s^5sR&N0}kC=w#WVK z&Lu7_{^HN8ybNXR8#kI|CAsxv?FLZwubov>4t{=&O(MV;t_KgOLAyp12B>=`HsM8i zfACjXmNbFp$qe4Yt+ginG;PI^yTeksAO4pliy8Mbdm2hnu<19o?u`9CW=@&j8nwJn zAi)$z*tf_F$(H72@P>1`U&-~2-A} zBoZ*EV*0bP_^?)8GmJJc`RVsrRVbqpLeaG(GSIF4isn&NUHve)OWCQ^r2%$zF7*_! z9Mc9DD$|=CKF2wdfrh+&cW~7cqt9jpYGP$~+TU!f+MFce_q5`UKzt1Xf!}Us^#;v> zXrSt)kG_C!yPD#5<_z z&gKACNiy5Tv)6=vkC6_T^bqulHMXx^-}Ypidh%&?)HJMo2r+fM=(WHgD@$_$k=hUam(0Lj?}q>= zD+>~3o+>bKe++3wDqn6GGAOQ)y3z0CaVms$k3vs?v|UpsYi;*Eod}hI@xe+>ESdon zF5jAlb)RO}ywZ(Q-(8EM`q?DI$~|m^;_9f!P*FE5s@mb@d-ddFw{HP3HdI%O@^f$O3b*8mbRsBdy>QN%3E z&~v;Jn$ebdG=+pF6=;Br!>n=doG&La;i*7ClsZb#{!@=!PoC-edg=1B&JzBDeeVTq z9e?`%ZS!L5sM@vq=95vVY^~gj;KR~n>l(XkufOODJ*KAS*A8-8PyW45{N!y9b(UaG zW9y^<%9-eLw>K~{TI|y7WY`0LE)7W@T=2lP>(=>Ft&W0t3yZ7)lXKU!71lB){?%P> z1Z*|?O9Tvtt)iXrn2LA`_^7_MlVZbtN($W{TSi9K%%1Vp>`mgnOP6k16B(7ryFBVU zgAFXJ?#DXab$Z4w>b*;A_N#yYTl2d8w)gfwsM&wrH!-bfozvG%@ffi^IpxpGa}N(4T{Z@B8_hF4jvbTWeSF*&3-j?Ybdx zFj-kU`-EriL`wy0ZO?XuwGMqjH;a|^(LxZH{(4k4NYlPs=*(QDeca0Hm;E^wj_Ozu zDpA4+$aaN&yiI`^wYQNB98EXD&PYH;{$VEACT(!yK5*0$P8FhKeJ%yU^OQcQK}wMU zhav?W?ro;Gjcselu)C#jB%`HuFFJxaQ>VKx3s!1v@O{d65=|zhH}kWUN5f^MZWiRN zaQb%aNxBFmKSu{3 zvO#`R3c5j9>%tm4i{^}sTneymZ5uCFuBd$?uv&=%DW$>uu>=kpFf?J$-8U_6KYK3EoMOnSVe9lwjo>t!j*3jcom zENN;K9iQm;3IZVsK{*^{8yhDeN37UE!*%F8?-2kf8B&HRW zV9pYg274cTVNpp>KQhp|@d30KY$ex1A+@J?8E;Kc%o+jp%8CH}n0@sPLlzF~S%YnF zvyAm(_MU5TE7&p`rYdDVWs;h*+;iaRu=KDm(+5TG_2o5u2Y3w)9g4=M)8GJNAp&(I zt0yiYu_tV1&vqJ^vs*H2B@MwD?5xxY(_e+r@xH_rC6*=gj990>004@yMs{7lHaDbH zt5Iy%tE1u<2^m|Zk~ zm*$Fqp-$ozJWFSOv50+<9cibpp9s-i9t#2HIKe5-o+F>+*9~6qk-2fbBsf2B>HYGi zTMFkZj|>PmM)#j_G_N;?Hp0H$IF`5Mvd!Jcx_PJBL0>kLr_Pefl4u`rH9_ag6_o!K zEQ3gzPFv-3JEx&GUw~oF&Fq;)L_~lECBUtO0Y92`g{~6@mmkB2SAe*T{z;hD@1{A) zU76?ZR9EOmm9NSHsXgLP@9|LAk9~hEs>?x_+q%Z=Jf#aJ+2W#Z$I;08;Lo)4s~r9~ zGkCQ64#3FjSCO91TKV^OhmPDpjq$IAGCvGw_4M=*2azznJDAR{5VMQ4+=*_3>Ov8Q z)4&mKjl6qzCAD6HC-1)|+;zE=cG@_mefg4>6sqf7aNxV?3T#*AFU9gzkGA#ZtpBO3 z2C9HhL{Ef5z@fEXLc6;and^<-4T+aFCz&h>QW^qj@4=h%hO(MdejO#*b1kS|S1=Xv zxyxJNziYiZ+GSWE1O(C-+&9)*gA{ZXWWqsG&p0(SV-A8v*UCsCniPexdBhbp|{Z{DhU2V=STg7$QV7J(96Fsh+j)wzj z+iuII5JAXt>hR8{sX8F1JwL}BYFQBD>2kzo-SZcJW*^_vRis}a;s0|UuK2%AYV1OY z`YoWtM?H@C=D0NLsHQH5sd#M|@aKY1?OQYGX+rEZkhuNC2?h1!75aNzL7Hj%V~!L< zu~fUTiJPX4{ahSi)oS`Pd{7*}_qy1KkcIP_n^sk*CL-Bhw>~M>-_J99L*MNb#Gw&v zDV?MsDKGmY*KNvPY>PT)+)g)9y?+I6BJ=$J`VVW}tXZ=LFiWQxaiSo`qwWgRx2RN| za%X1mp$DPp&Q`P3@6zf~3i%#G)EF`rY=(a4K4bJ#P$v@8qsAQC{bLVzFr))k=C}s> z$yM$@P5>8WueyA_k+j3Um`slUIhZS>GwK%ZW7!rCjWhf2Yafvnb#*s&pYSb8Hn%)J zY4gPfSEV|({nrPi)ezr!^YIs#FsutEI0Z91I54wf#0a9&38rJ*R+!BZOSfxg*l{ZY z<(7MbsICEOWY=9Q5ULN5@Ex^LG4Fj$j_U{>iJb^F9MkY|z6m-s&x2)(itN5CB5fb- zMNtnaUAKOPq}Z5-e|C2-Ywh^Ff;*2DDyE*lsxt_`tty!PxYAFsuYZ16!&}D8{I#|4 z*+Y~+QvH=Q?Qz8K;XcvKD2(IuXOc9>!v#d-1LwyLz}7Mv0TCi&yDMy;?Ob6QevqM24K~7L27y!)(fj)_oRv4? z9tP+|e~@qf5MgWHv#?jsa$i}d+y0^;d(X{I#h&pgo7kFDL&r6OwtM_0t{R?`q4`)L z*7Lv4z#k)(AGtzwp$%ht_5f?7VWZ3pzIuybV)E*BKJh$)@q?5Uaf)U0=hGa%uF%R} z^!NFoQ=tgVNTwL$tx(L(*L!$Vtp8L7V@ty)QZloPEi*7E_Bbe^A;V+%w&y^O3p+=4 zLy)g8Yt>k=ukWRPe-nWzr+!5WSMExQem|8PBYtp8B4fAz@$8pIJ3-F(ctz-9>O{fd zsJj($H=)Zz6AGCzG{`gy!OYNKvn^~3>L-*KQ*L~YxU?uBJW#RTE02>KbNIFPao;#R96PZ-k5nJ;_btWt$u@EDO;Rx2=8hXEM32@ zEh-{U)Me@fJPgpbfkwOJ>fkcA70l)DiuT zrY``xS&uPUHxy=f{Ynuc4FCc)oMwFDtIa2J5hhm`Qx%PD%-)L@Z{E%zv*`VxRC?Ff zJr=>CPCquO-gjh`J(fjA z{*uK{1xo_M(A?2=H?gtI{M|i2c9oYW^>je^7B~31^9s@X^ z>ZmCrOqE0%rw_^ESH}L^t%)eDU7$Fhm__7qNp7I)uFwt4 zhoX_lN;nNw2+Dzw!uwlp>bLTyPf@#Z<7RcfZdC4tzVKhOd#<;I6!G(a8y)EY-RyO4 zo;4kdei|4*P;k<)>$?ANO;=deNbVVF%jY!|x!zbP?OFJzL-Pn9TIT7^{(3z+q}coT z^-=T@IKVimJ3Ajg6dws)2O^ED(>N-{*3a4r2o0QmSV^NQX|^Z10TKtKu_jpeNRgDM zGl3qyp zY-=_9zTY1D>sPPb%*|2`oa)GR^>{n{CEnI_^8K?_4&=+fR?Pe`zY1^`jXGoIy<$e_ z{ff^`C||Y77JS}w8nR#c=({Vy?YpKhd)P;vi2>5kT7|gcttVbCrLqz^ zYw$i0qtk*r9z@VbJQAzRe=R=$aBH)NKN^mzvvy28_mYcGFNlO3He)47EPo|;)(vZ>-Qyjvy2JNuHtlqlh71U5e zOEYnrn7yWuSWzI)?FvgXq%s`^WtoU-qLDT*-|`4dq@Wz^*V` zB?AM`isoV7^a=DQ&=6H-wQ%;7ycKQj`Y=5 zo%lqkKFRVp9si!BRz!h6Q#Kyz{_#069%8hA(b-B;0KlwCecXX2zN2THI!T>s%&K8R zXaY5;FJ3-4Qq1x84sxj0p_RwBrQ1mbee^A5Ef#w%F15z#tIKLR+l31W2l*o~fU@B( zr+d4_S$4h<{@G}7n^CCi@8g`> z+^bmqAExsP1Y2{@p1j`sz@yE@js2l!uK8&HX2+FGPde=g^YRYrMk@yci_ln3CJu|y zfQGj=E}M4?z(=rxH)xQzO2<56uu?n z!uvG0_`WabpD)s|<-Zn2ZLTopi!#G1K{k=&yg7%v8cR)`2$rLOpfG)9% zwZuJJ>i7j=u`B1bpwpv^)ARGCnI9e5&vWLOAMPjJ4x8>_Oip?q<=S(52(Z&_-17Cs zdGlA;nL-PtVN}FTZG131O70P`r2m-9;h#}aI*{)ULROv?CgC!61HH@U(6S>%>$)^+ z!>$dRv;bmhLAmk5JTXyHAONnVQjGBs_5~BpU5{7N^iPo2Oh~s2vD!5TynFD%K$U!I zWT0_IK7h8Z60uO=ja?INyW(r&1^4}?9 z&2Em~i6JrnUHcWxiZ4We3}!a)BcvJt-MxfH1CW^~x%jd2{;;mKXs*DRMj0Y+p1|p6 zc)G}6iy3b#ahqUeLNjg{n)#qZkZX1z!ok$>oSGhNy@y@zej|{DlXLJcz>Hh&yKCjl z4?{h}U_YT5rdccdyll|ZlZV`VQ^n-(S2@kmx5wO+EI<4_@J=d6-E8K(Alit(Up-QU zte_qnxA`g!({4KbdJoA^(Xi|`R86?EAfp5hpy8SVU*;lExtS(!jRU*k>KN@_CnY7t zL^dGvn_x&haO1T1_?TnqXX6+)u6LgG+Z;s<9@}5mq2c2l^nfsq)>o?}N8hLT3v<>^ zV;s&m3{g-O3ss2Gux-?xA9E;OJlx%ZB3)tUj%5Sg5hC-$2WS7ie*E;v>o$xvSxhI5 zQxuF7#)U!^jaG6%Yj`o}iXt$JyTgiA(1sz3dP^XgC>m2og*D>ER6N+4lA79PeQ509 zI565EW_~kv%3H{s%f#!-ywTtHW7r32Ud&5=`pwN{-a%#0D|~&T6*UMq3vO#dBEKFQyQ z3Ja*{yTWw4$!-&tK!qU8=`Dy3mKU>r%3MMzg|*0!h#vb;fd`h4pix zxv>XGtc<@R6%>n#|=%JRu`L9K_%{AkAP=3b#pM;?c%hCT%eTb za%P}r2=P)?kb1^x{g16Xow9EqLr%X`!G_f&}-tuhs=-T+nEIRAFIEt28%*7x8gQ$Dn&R(lL`Z<*LC@F zD!)&U52k6hTTZ@O>9A}n5fKH35s&@JQ$@qahq|icQaAlC66~Xx7EMZ0Ov3c2HtQo3 zS+b7oZUxc(NCuz$BTv-lwl@JHiFPn^_Rn-8bWhl&@37C+ zj(%=T8?=08`5dQgcCFZa!3c++{%dxAKwVIiwi-)sfT$3YjG!TLM`P{K(=S{AXJ=<5 z&mf98&=gqW>XOuASK$ORA9%Q@p7gs)@ON!Rf`|M;jJ{h@Do#X$D=RdM4GTuApOu#G zB7ll#?AI?3L!cm8!s!pYG#ijxW;|O;rvlf9T_RfmD_=^m3Z0?M!5GaQ&dyzTD${@Z zoX&ZbAy}wr4W8V--4jg-u7_A_I}2Mz%KR7@H6rAu<3 zUT%+uz#Fw=BKG%-ii&zxS*c@kr=H9hCTR`ydrc{#Y&!90BelsWNSHgJ(og&%YK~c< z$Zz%uay2|#zc6@?__fxBA9^_2@%+R( z&Fr{i%|<9Is{!xu#ItOgoN~m^kcFZ(S=a|T?FrkL7wBr6xR!S($LDTx(!QbefshKn>&|XpomO z*tf4R#iERwL#YMSoiho9k*0~0(WT;cQ0`XnQjQF?K-;{(2AKxT2~X&%|Jn?2d|$2Xg(VAyPNlGO&A zh%M_*|mLgrlv>eW#Y6`xm3y^fe%Kz$E{^)a1{P#{RT zsg;b83k+2wE z+F1Kg35SYh#BigT@(duxQutDJ936?eiYC6W75q%t&T}kt*~Fca>jS23*1=F^SS+Kp zW$64|X^!HYwj@MyC{jIFpcu$xJkCv!T~m_EJorq;H_@gx0^KpQT4pQzEv~ zN=vY`74tvclTzPNXzJ3uuz*tpfdXDJf5c{+>Ac*Hdsvs{Xi0z$(;R#LU=*s7l-m@} z14T=&=h0KWPMl)3#2aB;!QMJWGtD%eaoBVRN&+PL%FM2%a&N2!) z`lM*keB!?8&WeJzp!l|5tj#LxwnaU>$duK${K!OpcvJ2R69f>eP=o2Mo^e=b&-REp zNH)N3BhTv!23uQCYGojHbj^cv*}q}4shVDhZ@>@EP{_9BcpJ`lUv~Da)3%+sWL+=s zZ#!mj?;%f@FMpuz4+MDM5!)+;vR2-vf|cKRxNXZV_{}CFT(J+Mu_vV0M{U|Xaw&>I zMrb6J z#g0ETVMWLt(fcz2Q8KV78H8hBPa6cy@&}30J1&C6$itF8BwiYXr|Ca4l;l|N9vL+PcV3lKBrMIYx#2dEkaw?NdJp@(kGjL&ZzheHFm!q=5jDEdUZQjF zYM2*hTlZ9Tiky13%mKBB5_nQJFlArNB-;Yf)%@V@rJF@aVi!ufMWn7k5dxwb4T3;7 z;2ocde_^ej_1bQPQ5+IZ#dad7^485c>r@%k+21|?VtN9Y8l?h~tpXELcf{grdh(7$ z0Yu;oJC(6-jwo>^QaY1S00^S&PlQjM25LA z$Hmn;ddHKNs>JPPgikaq2|c5eZVDs`l#ZqYlf!{R1-<^+jJ1pI&Oy=PRE$rd)+ zjx&0Uh@vC`Bf$WJNRFcjiX=fL2`H$DBvHw!XB?G`3WAaakt86X1c{F1C`itNN(Nh? zX^D5&+fA!9eBb?f*ImAA9qluA*IQxNu3bAkkHfR)v4qwR4HWyGBgT*1?<_%N>pwp8 zc@V!tDKNev($_zhR8LGmq{|16h9ZEm-;QGAh`XDR_J#vFV!Z@YB3)i4`W2wM@NRnl1f$JzSly`W{U~1H%i2m-Sj>$mb&Sqw(>LA8- z0T%Jet!*goFniuoV#a6EWJqZ8mBo5d?zx*LjaQoT-)jHZSIBRvL#{%U1##UPz~Bu4 zsY1}&0TKv2z~x+s>^$VkLY%i3E?n?xm#X7LF+AkHK*hpEaDCp25I9gs67j|3>Ua`6 zu#I8$ZY-&x`&7jG?Q2&YI=SE|0$&6aR9=d2d?<%v;AI^P{oB7 zKP4r5#J|ECl?}sx=>gZHH)6#_Aqh~xCqqzPuhj#JU1!)}#_b{Mk^ZczDFLi&;$0!Y zGZ|W~&30NkG*pv8QXIjZUNVv5_Hgd4_He1(A4@bdZOVptgu`DmV^Kp8enJ_v3F2_`{N!gjvAnd{l#J_jKfCpoaFcXM%ZouG4kfEEHJlLJ|`>$kDqVmMY= z<+oePVw$2UDPxL!E8qu@=1!~sxWrOU_CPj;^D`}9d&0-|V>P`o|G<4dE%vEI?)dN@ zgz5mH5klj0M;oJYNejIS2d7rO1Fa4zsk=GPHS#;#{x!Hbj9zDe^0E&=eQ;?rloi(G zxyE^n~L4qYMAZJ%}a@YV^b~8gp(jLgz1`O98#Qq8jJh}?5 zsrcEmId$04DO1VQdWKmgC!@D#>$G-t6&RXMqm;xI(!eDT!qEcr7sraY}>0)mu z+{{X==Jueih`dr&KvC)HiUL0pbEF=AfSN`%vJp_IZ@JUz6kK-3;UK@Wk&Puf#9I62 zaEqW70%`mrz2Ln1_zh0o9)I0f0jX0y%3fe?O~)45i4sU5?cL8g4!9MEYK1|*Oxkda zEA;b>*Y5CMxT& z?D~84GiBr_koudlM~`wUIZ0dn7d_A%WeM>&=>~ElkV)`#VCB4@!P#rw$X`ptsaJNqLQ3@2=6e_WFx9yCvKoVSs=zaEZHsTd1@u zF%b@(V&wHl{C%>r2v-gH8<6`JW#x6akP=WTJiEiUs*27M_X?Ib7(pfMSZ>;)a{N4M{(`{O#F{ECzfUOjo;e6 z3uWXL8h7e5>}@@C<6aEfC+YeC93;POvGae&N(qqWWLrY_9wSD8GdsZ*;`ebVunx8? z@{Xbd1)0NOo1nmU!HsH3M!sBQ2Dq z%Lpz=Pq#&NlFvktbyO8e_BI>qG4P=P=Vi&Vo*+Ndc%(*MQ(ZFlSPub#`GBg~Bp za)z>`y48r!AcS8CJ|QN6>-0gHxB%Dnf;@r^3%88|6pg^-r@8NURfmrkjS4L+`k2tA zH*Ix?6664a4fWPSn_f$6ezNg#j9L6D{^9i7HL<|KwaDvv2-+eQYi8S8K1lU|3pv7O zx=ze(01eUyEEFhtot{3~d3K7_m^ZgIDf_EJHn_}@V;sdlTaL#a1Q|h>Sx7#uzH0%v zgUZ->G(^E+58tSn{^S6=i}}$3PnG)AlL%RY<32eei@a8HDz@Tqsl7C?<5U3Aj!A>IXQXWTP1qYw=e|pn0N$H-ks2?Cz+}tE=^J<3Sf}(Hox&z^}IXY>GJC z*$~+t7IlGWm=~YphjpmhOD<9_aRu6u(<>>~>FT!GXhBGC0?Zi|tBV0ez;a-1Qa9O( zE^thigHR1=rFWrNj!@Try9OdHi!dcZcJovf?O8EL1IYgE<{^W6Y7bP zn!8~3xva9%Ya^SOEclosk-q@^AKZ{h4)yu6m~#{Q3#rldSn@^5H5WU3Cv^Uy=~cYo zeE9045a_V_EGeR)W{)%%FI$cTlovJD9prNUfVUm;Hb=6t*kEG*47aqS2*SLy8M&?z z)M9C~)n8!3qhtcWWa2>5ATM=RO>Hwu;>3IvX^_p0at}~iZ!(;qvi1FfSL?XZx6yfu z_?X0OMi3^58|17ZmW@a~$p8jq_(=shY=XaVJKna>-38_gDfLc0B{*${?w_m@+w+z6 zQ^6n7c9Nj%Akwtv=#-#OY5GmKI~zO~ToUN24QD61i94Osa}pI5MQZH|IBrl?4*HA| zF1n#u&kJdf3wPPJp`op$llaqWAM{^!HAVNW7rIg9Z%cfr1Sh9@ry+>b;~rK>s)773 z%Z~b!k){C`BC30&a~)ON91NpN5&|BgWY-@a{QB|ym2?FU_MUtY+zwVrAEf#`NOeOM zR)o~}ctsS{MC4p4V@cp|yl9l#i`*uF+T#H;OHLn*Idg6m%J{(@sw=;dUf|1T z4uyG--Nl65ws>8gx#{bh-21sK9zWm!c7Xw=F-9O! zhb+seRn;x$)>4{}$?8xJc_HsTS`VQ8GOsp_v>te-+{X@j9tbTwgLo|%g>^e<{P@hz z;Q)dQy6?~oz)|ovHAk{FtD1ImZFi6v_#Iyz)tS7ypf2lm@rrME z+@zGOtqVe=hd1rctzQi6g<~F>%$s*YwC|rL$6b&JU zhkQfd@mA6Crc(Cn7kjLV*hOZB$`6f-ErXyU=N;={c zx>#$cA68_buMy$nVxK=VNoooIDJi;Z{)J6+jTPhPkm9iT`29(?D?O75-i-e%I&o{K zG2V3Vzvr)QC*q2j1lAb)KiHIgg7e<*Nhy2n{yzU-H>W6N!dE_B|XC?d;qi5}9{%4!Olu{}2-w zN6OB4_RgIERd9Wl@3}U*j+%zhZz&ot z4}Ea8$@mqaGcB7Z(RTX9(4uqWv>Tl8MaWs^N8GA$jvmGQ6|nq2`#{Q3x^u2^UXp<| zkLU~U7*6P=^N!uJ>S8snZ>w)rKS!sXy__O*r?5+v*Y;EH(oSFhAx#K}`AaTRGy7_q zo0&m{A0HGxeE8`rY+<5B$x+m;U7GSXZLem&^$iVFgyh! z{Fj;gFpLCM*9?M!yc>SNrlCKIbW#40_aW^*TVFo;<{@^WvZEVn0{R4sEl@6?6u zgMBbnN2IR5je)6(u6yzRYL5?xi+c8?+0oSKad!`+_1^P@I!`7mIbGr+6ERLvUS1y2 zIvLLbQ7c8DsBdT=d*{=Aw^hF~)bdCblb*Xtr{pe&Rrx%^S7i7@n{A!Xee=H1tZrZT ziE)FQbj$U>JejnEXjbDToNOqNsMdm9$S4zx2SMcG`jp6QrZSK1zv^W5?4LJQA$o4H zo}4f`mM7-J{&%kN`T0Q7?1tVmm6mDEquc4{Cr(eug?{{Lr;GgNh`*-hr=JLZLVh%?wnL1%$yvCJ)rqyljUf3O|t;5OfLD^CLMMO z;gL+^(?q{5Umt%n?2hGAc58{aCHuW~^l3a4l`ZSRdiW8ip%eo7bJejKyS5J_(8l2| zeVi*ACdj)q2TJxlt+1=^xBO7|7kZ0=l2XC5sZ#z6H}i&giZ9jZ_7=2EbIQJv-1YN2 z>`#GAp<8G|9ypB1G8MdbVX>R0Dn>LX#}i>WqEuaNyF!yu+iFiX@mu|eA7W05S9QIj zEx~`bLtJX{rf|wfptO*wbkbNK{E(KA^8O4#apSs9$5ygqosf0xO`s?V6GBsufys37N(s8V8$pt-X}Aj-=d zRB<_PlJ~K?q$0{w7(E0M@zU3RxZ2~xv6Yn`UmW2M?qzp$*O$|LN zVj7eN7n?D*gG3%uL}Sn07BNF&vGXRr5wSqYPfs_nsCrgAnVy4j|NMmiCIK}t$Wrzr zu9o`pcgDvDC)LQyA4k!^YrNS9-7~|c{+g*wy_*`Hy>qf%R7}q2d3os1lZM0jWqNyi zYreXAM%x7fyOb`~Q@W)7JT+e2T>tC2naMn{dy=0vFpJ0OI})q-VT3cC^BTdNpSjec$kWH&J~a`)N9 zbB`PJAyJ8}mJd|+g0Q7ZvK0HK^7K0TfdZ^Ek-)JQ6iib)52EYO>#f96@MQ`TOBZZNVeZ*+HW%-5Tm+*iY#kC7wG_G6u|WbMLmD8t^5$rH$361B?$=u zJtM0_eG(Ig_Dc48gl%UOc(%TRR(v37HVt7xJgUuw+)6{ZJdvk{n~|ac>6*V*4u~Hg z4?TIOC}*q)tfxiKz5;NAkc~X*ne4Z2p(Cc>K9>_}?#2!7sCoSMB%yWxGdZtl*F{a_ zTed*t942>nlq7^6Q4thbhRaTv5wY*a+|-})k@j+snvd)osnV;xvG%qrSMD`)Pj;<< zMMpST=b-u6y#OjLY9avgp&O8J;;*auVt@v?ea(?)Z0~XJGC(K7kd1c8Iy(@LhR)mRH?<3MQ7oV_z_kRze%Rs{P{n}8V zNji74<``vxidwG3wqtMQQ0Fd1qe>_7}`! zqO&OdwmPGOSi>q`*xnfSQ1a(+DJ;^T!^6WU&gf_TMAa3*0mx@#cyRqi${ee9s^!3b z5;VDTnD4P4Z38k0Eo-PPQy@yxW~42nFT#VeovN;;u151KBRV+Zoncd-c4e+Cafm0U zJNv}SZk>bgBNI%iiFzppv=Dc^0nHXxTl+-5}4xH?2!7%ICSBX$Uo!d|mT^p!8`ZdzLv zx6?^*s5qP0Ky&;rT$ET9YoS^luduq*rmipy1f`^}`Z^RS$v%Mb}D5u&!LWa-3{yMo}&= zb9uXmbuDLe=9yeb?XzHhSArE*l#p7zgfe=8^5jriW^L}s>p=s^QzFZH3g<7Tza-*OUV|Y*4&K4>YlISx%&01-JA!BH5UZ#J>7KFYztxPgN$h;~D6Mp-+MiV^kF z0wB#YzWldtp*iv%3a@TzoziZ5-51u~>e3M?8P&+JmfkBYglV#hHH21+Zw3WX)710` zlX)=BDKfv0Ec1O^<~}#S#RRL>hP^Vh*2G=#cGK6cOv~Q3`?ONJF9mXRQO>u*G=lB{ zy3Rkz%J^X!IT9A9t)U@Xu3=NyJ;7I0W2oDF!@e?nMIp()=Viv!QgXlV>p*-GN_tdl z5fl_WrLP}G-r@=rqvDLobX8<>_=il=`+27wAQUWcp`Cg2Y^*y%cth2qs}v~u$B@WY z2o*7EEf9h~iYojm9ju^qu(rX-y0|!xbY%P0!HUq@cw~6ZeW?*H%+{z^r0jT%KB1ln3yXLM4N&;NppJ|By;w+=nYqdz8}2maa;37=f9+c zR{14H+ysFbLrA<@+{LRD!+dN1w}2MIx3I=Nd1KeN8;_QS-cVT2p~k9j5xh+!+ewqQ zlkTXKkdmj4))*xeP&!GmZ(^9_Te7;P=bLlko)}8v>uhJ#b?Vu6N>(;l+V1>}UitW= zL(Vd^&6Yu&na6sxBcwJL*eJUHS;tG!ny<)O6Q4pHs7WOCCuzXgEQB=&qZQbj@P@Low;aYopND!^+508xg3$%rD9BdS(KL=TO zBgiwdgw_|3CA2ns+&7XySIyxzDs8i8ZZ2~-VYauWdlWnxNmkZIDkp7-k1inrW!P2y1LrT!cXRu+9NQ9-$oQ?xc>-%+SNWXiG`RW|NKH41=UKr!-K z$R|XwpY*i!YJ;!S^PCQ=Bx6!j#r2Gx4(bgKL9%UP;)woKb7G=v*!;+#Q)rKR+`)og zX?|WQhhEWB>b^OPZ$o`2TUuIBDHYGKK{C^Z4I3!SB1c{pu207uG_qerN;<4M?Nw?x zUEFw9#RJ@6v`S+9FF+-5g*3S6mll9FhSHkIsz2_O64_Ah8#E7cy6iX_WMRF?%?~U| zH4P2hpdwnun9-v!CJFw=+>Ec{DBcLC`g?B*n@&rMq9$mCmd?c3*p2+|%uoJ5yqjY9 z-RtURzSUzAA6@t{c?lcFNfTrf#bKg!4{S4pfDvU9E-yGP_;?t0N!blHgX5G@Y*DTv z4)+wj9k39dzO?xH?OGHAwr@YDcRz=Un5NRICwA_LS$edkdn zmCDOL-S+X(Y!y9i51c<}7|S%6^~bK<(-jbtGLoEG!)T(xcD- z#ZAcD*XcI-M0j`0JmagU?b8d_gQY4We=b#r36c;L7A}SYU$qv<{?t(n5<0l>bKywj z7nGr65=h|{5?1ua{H}{U#JGGuD0CCbj_v&8)6WlbFo-a~8h2a)cT zAZC^l61Bjy{9_yF^Nhl3I(AP;B3wKjWGhOwXe0YbMJR6Ox2TpQ$T>mivhenDwi0Z< zvA8AglW1XD)A^#DAh?SvKgo8_yGHWDTpEHX0rB^)-g8qXN4t}&Ls)y2SnkoTPX?QW z?VoU1tF;sw@cSRodO$v5b4xJw%59irC8qHECxgB&0|^qrlHf+?;~f}Cqo;9P&oVPb z!P^l~8wxyMiXmcxl!dxavG2v;^4xma$Fn|+nIp0)rkqC9ul=`?U4ltTNeR^}?rT5HYu8gYk!w2wgM!o-%>~66B57RCyCG|8{)oX)exjV_DEV>+j_X1w zdQ)owKv8)FTtu0J$JiXG7G1rX!YBhYTL0mjUffj69&NmPiN=KLqlb8$>*vp(F_nSP zTgh&Kq#I;8)6`9fmwneNw?4t^)1;@DPrIWv@;}kYhrOb@y82LOo^+I?%iIhq1*V9; z7)A6qu=jD(kNc~c?HmbqIP3Vqx2L<}L(~xFtN&qAaFPR%rd!k27F^5wP~p4DL^f~y zUVS(^JFqe5gK&q`fxvA_p28vGe=hb(<7ARF^PHW?oq?PWltfML4B7A~Yw3Th(7Yu) zF57M@T+?R0z;?25iM=x(xN`MI*^?(vDrBABR|wF4WP#6@UYHrBoenEb-@Q>4=doH^ ziuZH1=zf@R6d(WT8Bc`mR}5HZ>f~jD976Ik%?OaSa*TE~UA$LyhbX6%U27lHyK2Ej z&U;+=6cQ9|ZEdxdC^a7Hroqiol-lW#3(@sOMxTAWJ6}89T+gmatJtrVAr=hcXlGb$ zC{)OxOh!sC7OXs$mD7y{{|#2TU*ce9-7W8z()-ge;Qs`xAyM)7_xH1oJ?#!G_fIiV z!Ml``O{0As@7@%W`jmhtaZIjQD_R`Y+5Gg3DKR5St<>AEm5pUN3p;Z+!yBe1+4ftEO$c76F`s z$DZ8F`8l5eofR+B(ux4Z5nGgPe0ssy{>M4QY(hPo> z5SeCUQ&UfDI)KE&;QMqil0^)ka%1k}-F#@o>e(oh8bE2~W{>=&2l{b#&%x-z)x50a$n)aGQKg4FawM9T9H=UIBw}em z-ZZ37oc;G)D_T0e9yyc^9Bf;K>6 z`+bJ=!Z7`mf8yIj`g-ux!Vs6$rpbgx9_;2q2YG1o7_=3*FOA*fYr(CAReF#A0XZ>>Bdb#3# zmX~kO{PB9{i2%#nha+|ziThpgp13=VNIo zSc|V&ZYujG?31&z&t1%_xgwj@&P(Zx|1zD)2TLuobCj`J>c(fqipt8Z&hQ_HgW1dc# z_?~4Z{trm~BZIur>ml3%7XS|E~d z&Z}O`s=s!U<*->rgTPcna<=xm8!v?ObpFZ4n$K_ z$wFCG!sewnhGRTX7PUt^xWzZ1(ui(76!rhwOX zf2ZjyZGHg(^>4gLu2m(MnT&VWM4sQYu(ua$8MclJLSK~;U1lAhzzL`@SrsDAC?Fv4 z&>S1vCs&#%1Zsn88aX+3;7-W?bz0^&oaH*r4d5Y&XgAkL!)|nb%k^ChJQ0_4fY?n7 z?#)RlSY$SQImP=9O7C?_s{jYL2Z(86FJeeRF?7of6&NlfnoYf(dVw>}JvKHrc@*^( zH?eCOxoUwrTt{H7HEb8L895g$W_9&BCRs9)ZcC0@rVun}PeOVJOL;2*vqA8jWN^R& zQ>YWmjTarTj&M}+i;Iib+DwjiasWf9nWB=C*SId~-1+NE&#=r2RM`kg`drFkQfz=u zITf}hBrFW_7`MARk z&XaTmdwK0LFTa4|=#Vm90L5vWIh;usAlf=MKR1l&+Cze)7%yOot(}9 zhiLot;|bWLMX<`j9Uj$SV-mi`wA%V*rA%S8LiFf?=DIlsEYnHQwb(t4p|15WO zX$^|~*k9uFYm?x9sRGa5<>|Or7oOoXy6>w`=K%P5nua*9hi2%IR0%dmucxW5v|F^ulD2oZo0ql z8lTJ6oBH>lmVVfChs6U?*z*1I+9VgMtm${f&@gg*&7xQ1wjBFzNuFobnk{}YzD6e{ zGgE77v0EGO_QRbB#xrQ)2jlsn=aic~Q0T|N@tUr^NUq4jB;H-UE^H#Do1U&tr!@{!PE^Ow3%{zGSe z7y|yV-bVfJ0&;bj@V?Z8=8E@15Z3)^vQXOrs+iQZlnrS2Z&^IiOad^B+DCA9Zbe@OkdAvOa^Lc8r9e7aUHU`q#*gYgg^YgCKO$YoOitMIi z40|(r5>Lr`O&7F##AH0V&SrSd;O2Ni%&8;mi?}(J5A(Wler5__vf9pns(8~@hI?%E zvNCCxjRT)$Re6Z|`kwgb{>XrRT-@limHvG1SYrINe&g5=HFMlHP#ej;e_cR^#DZuF z71OwwWWE6ckBpWUslN!y@X3#=U&HfwpMh5su>zF;LjCK?Wvo#Tf0l(kfOon0rn`mu zTk1C%@USRlWf6OMRViByzDfLN1C-G(dbn}mtM+?%?4&Tzc#t1_#9>2crGW+6qyAuR zJ`CW}rJCB;)EBDyU8eSh`n@akPHgJ%E`5pORwkqzlLeJXGvU zh7jg4>MyBHzWg1HTwI_xOLk$N=0F^kl1(q^4lFL1!I3-K`}P|vU~-ZlnNyGXlQ^vw z>mA%5K*fVk5$Nd=qE1bCjAEF{_pMH8AUq1d9%PyyC-1OYP)Q5{lTzmZtC8AE@(28H zK;9tJ{Owv*-1m7p-4T?`yX@4KA>fZF8dAxM zs-nCbAMxkB?}p?Qd-Ww|1CeZA>Q68phDv#O^7SvKKCW96^sth_0$e=zI7Xc^mg?F? zG&AGHHX6~GVBqum-X+@Vm);yuy^qFx<+A$a=PDuZ_And9QF=lBOXsPrMgGbinZR#f zx5kTjcRqM4Juk?tg8rpr1m|bQXSA}R7^?7@PQcmNEkf}+0cB{WWCW(iUcQRm61XR5 zLU3{B4gTPVv{g8vcy$0C+QMR1RMDJ#)656)X)86v9wq2)>dbU)#o^p5t8!YODK|Y| z;pCnUp^p-u^iF+Wu_q^>{-EQD2DOLe4|oGK$jSjgP8#@EuKd$=LeY2?+INA^Cy5E_ zT&8Ek*ibX!P3xJPq^$nCJp9V!F1f3LV}v`JDcQVMa=tIkOcYUQ`N!w{NvQBYpPJTg z-HJiXd&*7sWDO#5Jlx#1qR_!^mR+0?re7vm^nA5)O|BULUF4-6os4UmILSM?3UcI$ z4Ic$zE}mlp{;_HFS-~Clw^Snr2>zsoGgol`F7?MCKH(?sZ0Kh)(`M`p8{OKhxIIm! z7fsRL$hb3{cR1?yS`~GQeu^yuYISz_00eoxGM`+{7Dn~I24`fzGM$GL}M zJNfJqvhL}&{zS3icIl>H%G;h zp5Qi~?0l&{-j=qn`P<5=mtL*K<0q`8z*{cDmv@FeQWoHCfGBU#qpAkF_{(iiCjMQA z9xKB1eXGplLtnec*qNK55qwiN{bH}nCp@p^^rMc_s?|7d#`g59TUET<_d?F~j7eaE zm`2h2$sv{yvC|AQfEp0~LTc93P%$J&3N{X)R`RY|&je5@i(VW46n0P7I%DvUB0O&^ zxybAG zOG5nG$+%~R)9$t-@+%D+`Cc7tdJIb`mN)%2uH=)N#^LsntWkC#o})c#u??2{0=Dl# zkbWpq;|;ZQLdq4NeWj6;wc4{&uxfj<(wiy?f~z^X2}TVQLtd2n=`iXGT)%*4Xg_)&}*2pw7TvWG3i00oV8^ zq&t11HKIUVOM)8CG~14QhZxRm(03=A1zB*%C=HrAjt)o>1}(D=4?>#M!REPJ;zdvO z*Lz<$Dkj*2;9ox_~kcIp&5_SD~9 zRoG-QCD*(08|$sMG@W=-X~JxG)S6oc(<5i>9C$(EX4viRjZNdKqpGf?z!4$R7k*34 zh&ln34}QUlyaD@XTe)!Dt^h4^3_@7yMu%IJ0*G!weC?PZq>|vgAk5yCc8hk-lej7@ zba;R{VV{6yEq!};+>Laf+0`}`H+JH1`UPLl1R2a2di2Pv9Pp0XKfp5K8QOZb@L{hh zN2Kx~JzHz9#Yafr;odN@A+t|1J{9{_|o{$MSnPGfXA zo^t)okw+`$XW38PuS8%;SA_P*3m2v)CAfCZUO1CY(6g%0KRulZV(ZgjnIFp5)3-9K zh;Y~1D%vv}HhqV}tZRmI&{fv<>z48f*iTJfiucaCst2~;|8O-YxUWNLNKW4>1(3YFWnqG$E@FytaP(q^Kr%|9G=erper6t zoKiZVL(mT!OlelUIigB0nU?52m(wacxNpBKY%AHLM+@$~@9-!UXoylaP65UPltW>f zGtsaZoe4C$chKDxO}nOtQdLg)Y@YqtcoNxs2Nj|>ZcXmx1w9XF0J6g^7Y)DQ!XUVV zubwPeS6*fS1&fG?N{A*e`rYy7x)nG-|63cyxUG)(!W@=qzK-~g#PacslG#zm!O%Zo zu0CT-fj>e@Q%=G(u@16ygS;pseT+SJ6Cu;m-gX{BPpe8i5P*Dg zF?$fL?z#wgCFea(pE*w$9x2c*p}rL^BE~{ZyNf(rcvo zkq8(-yz1J(znodqMq#o??b?bd_PxwH>tdB{g*v{CFsvX1zG)5Mr)bar{OmpG3kFi` zZXEYPlzyL(*0S&F)vIdJhf4)|Y`l8t+V@dy_`_vc?;8u9jg-B;tUeL8zEI@cqW(R*rOMdl(g9_^74eJ-7!t}Fc00rQ56rU6n_9s)ZuDZ~S?f_;XU|*T9>%PR=6Ca?$m-SZ!kalz|#*4+tu!A&)*C2#?IB^JH1Wp=O z6|+*ipMSZ&PN-l_fQk=x0W6I-6=FrCUo^J}dEtZv);U^$QE5!j&QGl_dep7ew`1$81L^5hyo6*HbXPv8QXa zP3Xb}31V9c{A(kCwjrt&q!oUC{Mg_&bhy+wI>aArC87G>?mHZge$*W@cXxhlbbohi zPx+V=5m1REApA;w1+}FzWzK-|Pipcw)z>U6EQlf(A*r62mF@Psa{)WuDv+Avz^w}gOKObxX&ONOmpf<9sImWnzPS63Ja3uvHk^#6&0L=1@ z%J#8HbM@~!^PnmybkW8tPvH(7Uuf*&p~pr64Zag zq&qas<-x*2;J5V+WPL77($fwVi);o~Nm0u$Z&p(W{=F5G$LDwhPO`0#>DPhMh#?>& zIHjQxAhwrJEG@~E&P9Ar+Nd5C0S&*cyEt#=FmL81N050n=)-7 zD;)0Ag;uk4FQAb`noe+Vpy#zE2X$(~Z<8wbm-nR1>*n5)rKeBtu#f+17qx5T5BT3o zK3>l}H}F4P*;@p3iLNgLp4o6?&~ve!6uFk9Ono)Cq3^RqucOuTI~wZiqLqz>06)$K zB?Mty%RhLEu$IGzV4Lo+fZ9_-1o?*;EqUw&!c|&rM>QPef*P8sV6J{o-~cL^Gg5Zj zTRsTdHweyI3{4N<(G)@!`#0Y0($vK5u%O`8!{K)oP9D<8t##DBqEnXVDN|F zu-hcB`={U>$=qtd?{YoDDTjQ2j3RS!MU0HceI+)WjGZx{{UUHn)JHhi!bkKNBrF8j~!IK}DfHa(ixN!!i8(Ik$_`LMIWS*QTY-eu~%nd4}*2UXvx zt}1Hd=L>bd1cXSJg#im!1Yne?b3uL={P|J@iE|d*T#Ndn!$QS&kD9->`D@0m1+#^* zulc>u8JQMwCiQjKF;^x6m7XP}ia%S}%hZ;x+&=^}7a;Z<{;L3#J2ruuj|A8ZD+RrY z!FtXPyX)0`O}V?Mz>0f6ztKPFw$36j1UAa0Lyv6%GNdOa(tD|uy`;Vxry9Bnz|!=m zTN**3v=9Bk+6^0xy0O9wB!n$5ox5HhT*v%}CFFgu?pZ7#$GI0ybrnRui~!i3oPaVV zd%8YDxBKJn?=GhB-?L}uT0|T_u1-#T2DO;;2~b&51blW8kN`s!d+NZopPLTgaAl1E zowyzNnXF;HE$23*8cekXQf&){OuF9sg5&^2Gx}Syh$k2F&z9(71zdR|*&+2wj* z78M!I9)p{@2lJRo_kTf`<#_`Z@CWe*>N#mra_7Vje&&kDeY+uaG4oz>&$wsa?WXPBlQ>Dn^_01^LN)8!xb!EEt*00?nbt5#Bu?( zAB)M+;SkxC61x(|?Scr#O_FkitmINNt%u|ZK^p$w7x;gN56cES4OeUvIL<(C+37UN zOtZq=yB3t{x7G|x!}Z%m{=|3?qqJU{g?PEl_lGxGTq~yPmpz9+d)x7k+*eUEVyJ+F zbsOA6`Dk~@7Y)?AE6lJW-B5o9_Oj{KtE}DsmPZ$Z6jJd6@0ASG@tU5xB@5Wh9zaG) zdq3&2xJc102aCbd-MocMSrHnWnz*{fLgKZ&>HAk_s1Uhp`)Z5=3Pl?$J^jC$JqP^C zVyMEVKYC~V2^z(h--%gHmzV+i9GzHISA`=oT~0f%6_#^u0tfg zaQ)_EGmXV?R=tkZ~*;Fyj}-K<(`d=Chk|+!+XQG-t9S2sB8}%;z`} zf_wj|tmK_k9b-rAH)8GC&!}t$>w;iO0bQ(&R+-*Mp^43ab7G3os|WdeXtEd!K2I`fkESt+9rJbCPK)Et%rQ3KRTlf0#1Vvuut3Gf#G!jHB)q(xI4HpvXiJCNXV-@h5wwIG!I(9b;a}brL9@lgW0i>;Q+C^1!#Wk*CUV2;-eF% zg9eVX22P!f-cSd$VPWqX0Fmlymc4x6}9uv+ab5*n{TxVnE;st(|iXw42ARoMI=EOaMC}8ESfpG3KnOuC$Ss zea@DRcoE0WD(VtxKLw{$ch`+hA2^BNWH=3Yc|D+UJYXM-)2_RcADB!ymv{ha#5l8| z$P^~6&1nB%_oGwlJsri2)Z^rerId~qBW#86!VR0@?t%DB*3(3L{no%eiXlqZx_K|q zK8A_yc6+UqnK2`Nqo=~;a#5hw1jep}=1Kcsh)nX&bQ|+q5vS^S{tyOGCJ}(Aqdg(+ zaUqe??hSKs_S`Od$V%>zk96LFJ9Fh9ZAaf)QHNfpJ<&2Ha=EUKd~5t?`m=BzGXkBY zxq{-pF6_+nH-t=^Hmzp2JrCY*pp}1M{9cST-KU>TBQ(cpL8$O4sZ;YCHs=W10h9Yb z;ys=M7zv#sr|-g6L*v07yaW)p$kYT$I#{EPb~Z^bL~L)YfOk9R$TU&8Ci5tjh8Umn z;%enHk*SDS0&&^|O*+DM=F9$ayHq)oZ0E{vV>cjX?i0}rs^R5!yN zn9Lpo&be51_y0O>i4{~^bc$M!ycb#+piJo_AtR^tdA8aIG$8^S)rEKp;N%50j?j_>wtN}h@6Rzz}EzwE_$&ur2ENyyEJH6>T-v3 zOHNFGvaGTaFg$7o?%jU|fhrDxxg?L~PSaj#!*R&MIe&5j0uTts57_4wL(~q>eNnb@ z{5C$>4PK!QH*QfnGOrJpd2pi@<(-?o;IVxVm__bOAFJyglzviV#Hj`X!A58XAd{*a zF@zZ2vGQ6o-@<2au0y@v?udn*hD_$}ez5qIPXH_5u29=Czqc z#SSaEn*O>cSRBh!>c(`*W%Y%!V}_2^sSU-Y8cs~9QgJ6j9>@v>d4T-3_-8cd&sDS}B|ogNrWz2mR^7ME$GOgDdh3zm2!~k=WkH;Hg9m$%v$iw%s*Ij7>2@V_?mRNl1Wu z!OKIBT~mDq*$tEWx9HfIJ;bPSp)28~aP2P^v~gjWoHej~`O)GC+~!Ch=vf3$}KK zu#Pd-KT|%j&$qMy@tiXOa{z7A?pQ8J6(V5kBozs(8TtKtE4Piuc|0M+Kz07Rvn2Ng z^4qwNR(S<j{S$S3XB1v2~m>PG4FkH<`O5bxM5aCe=S?& z$>K7MVj2xF=vCq~socqT5gD^@j$xLl@^zSKDEnp9IA=*!t>5Ru-4)LFGBw@+576#> z>_FyN$FtWE&BgFZYtQnkCSGu>QuW+i#Iv-W?6zOuqvi=<+N$?5+y<5`0EJzR$U~_o z4fO@whmi2;SXo)|8x*+O0wS$iw4a~uRGQbQOR5DH8KEF9hu?114DfK7u6&U3Dc8ra zM$J%m9=R=@fq}9J_AgcVscqwTVQCX*b#>X0za0sol|rfLw-R$~A*-BPsKTfHXr6ud z>xp8H;{Wy*xz1^yIdevW*kou~#uJTnXxDs-P10Xy8zC!0R}-~ey^GbC7K&rs$>n-DkJyE@jUh9R9w#-weNqMBRs`qpR@c? z+`{ z17KiB7_WC)S{le?w1%D5Iex?AGt)!r27U7TFn&Jtb>?)7d4eV>--Hl0Ur#@r%;e$ws(#+cfK?$6hs4C1mCw9P`)JtEJ&Kb6_qe>om zC0Q3`J6IRC@3$#_^0qzphW%5(39$uNBIZ(|F^?sKL5>uP5FS>UA5StA*g^jXch5Q$ zD(SP*>(95ngMfTg6~%e#u4!XaU|5|^KW{mi2u$0vAKd%fH^6O~-I??OAw(>*vlJAd zxE^6^h>3}T>GtZ)O8Y{q`NIbiAB!HCI?cjGu^c7mz66AB+Wc&Tzt^YybgJINJ1P!`(^g<#&r4rGyX1*|RRRKbO5* zKC36$h*;d7*S3W&v4gQVEBHVTBig~}70Qwmb+k*sKo3jo_Y|cQ0g_Gxpx;_4a6-Iz z|J=ma4}^*84PJq9jsq0%nef$6-`|i+I@^|YRpo&56_uHh$zpY`tq)Pq2(C0+p_pn3 zRev9)LzP}NF+m_T#{m9lz^@`EzO-0_cl-86mrJ(6+WL1)b@qRU@%EjxabiN5WA_Nh@}gTf?Y;j@I0Sl>e* z0!30vscm%$FbF2uHmIjtys!2(G2Yx*wDzXs2{_(gY zP@{VzWDe!h>@_`C4I1_y?LOH{=l;VocUAXE)UxH7I}4mmnss{aZ0+(g+i}P1EOm`b zDxfnl!g3U91|9YDvtu_H3;AJv0|V~hMi#?TQ+W11N#x{U43^x%D`j*3@SM|ppZepI zAr$|{-a%W9oq_sdOnKT_(r1&}IjWz#?BB?dd}RCri`dO85)f@dXbrS-dl4NGBmrdh zAwS0IRR`S=OH7)AC68w8(FK zx0_A!tZP8)#$)A0w`#^~|GqLc{I~6e_fJHcnjeaJxjursO$ERZ0guNLuRMib$%g>d zJ$PSphk{8~$CI6qvWwA0{MkM!yUR+BUoEa0{Ff2P_1$g7NQiBuV8dwchEk@4Gok#Xs7c9F;JuA*VHGi_LG zbApa|q*dz&=^683&&pPDLx_c$>^#ISbFc|2xldF2p#!hzw$7Q)!U(i_6-}T~q`zz}fT2RjhanPB_|rR`9e@&ZgC)RI zFX%hmI1bbSAvJ9F00P2X=oNWg;7|PKOOQo7r-0y45YZQ6OQP=NJvWP(jS#@FA+)%} zs4rwfK8NZM5MVO^-W=k!|NhhK5ELl}gdSQy#yxc6i>v_RBF1w6gC4inG0Fjc*TVUQ zQ+@!{r=&M@&YMp9A8-RSLh4Yco!)fm_K_#|#D2r2T!a=ZAvB5sUoQAszwBf=d_@(h zKz^%%CC<|?@~GeU1kpVVkv0Gg$SBZ<9iw(Z>UWe0;qSkV*3UdHLVfoD*p?pUyjcgd zb#$oP_1bSA$G(w>>3M934+%cg_Wp|tTz&9#T1G}jj=kcY*rB7Lq4E9g;UC`KE$%M# zK%B(ONbn>3@&vO~yjpY6LtJOrV)*Z6T7&C$-f$nOG93 zSQ-H#dm(^Sq-}aB&3|D>+`x#bW@#UkD#L=r`2_;nSO&1bAVx>3Y}hh_5V$#vWO9KM z?-7l(;W|>!LBNUoSQx2*D~!Uq`p1{(0ehq zQNT`cSr{q)fiR@&WdQWC0kEo4dqthQu9aZs;3R<+L4qDg#Js&&b2VAO?jYj=fZC>< zmfR;0IYFCUZwOLMRH3G}^W|?ek2se>2M9t)3(!ywXujBShmIqZI&N+hRUwq@_CaK4wCi_IYhm}; zj(W38vLKDFW1hJeq9NZe<;9S}Wclf#Mv+;1`!)c_qs|C*`n!%IrR9Dab`YX~Cd`hy zNF#_^YB%HqCG4)x^vO%Rqj1*3yik9S_eJ+&hD^YJDgwx^?gkwTFSrFgtD-D_A3enQ zdr&NMe^T}#hT^zwFCD&(XU^Cx-LZXgq$>q ziHX!-bGQ?Fii;8Q1EkHlk@Gk9ll61~v*q8DkHGt4!1a&5v!Tvgjwj41^nusLp|n zGJ0W(smhK*}o4Rz=TccEa{+DVHIzW?)Wc9?A_>IR>$E14lax(qAZ* zhjvCI(C#3~z*U_E!E1qPD1fvxcEBj74rQ0Rjt;B9Gql#q~+Y&Z5<1TH)Shsj^;+QY(cAgdTAg@E3XzW|JcfF;^0hqkV% zS=rbWgQLKQSK^8$VZxZo&+P(r^m598wF4QrpC0LW%0z>MK{o*`l6 zu;04}pHvUQmc~gI!N$SDIuLa&1Z)|@-l`Ccei2N3MB&iV+G+@CFqQxjTNg`iAiovP zP=vt7Z`oZSf->p=1km#HV?)*R40Bd-bKgbo2FK>37Kk|RD9k!?~ zZvgxn;;&U)Mv8w4>aV@HjA;B)H@`IMGNSS8T>N$PFC!ZGU)IesGXu8gF9UAbx%p+I z{<2Y*5sqIr>Mt908PWLvltvBBERTnv7Xfhu;C>11|4nFj5J#Af#jjldwohDIb5%J$ z#OsW;LC^K)DPCH4T{Bh;K3)HS^VmL*dl&NMK0GUxX?e_X{lkagk?FYqXXWhJ572jL z!81eRf_VZbJWY*i91R@YsdY5vjAkp`6VRh&4({Re(Q%PQ9&c7VwvNcbL(@e3qMI9NuV+xWd6JJ?bD{W zx3}G%d>mB@nde`=`|a~i~C&F$s6_J7YWhS>OH z`CjX=lU6*3E&dn_^h{&huEu}BvYjVfe7b{_6r;h7Ygdb{>i=&DJxu_M9)mOO ze!pAy#hc57dxez7>|GbOTK@Zd^t0s=8fRQ^{JN?t_^;G<6H}>PwV!W1w}$OqoAzEA zc*+b8P_X*&tJtsmtaj#BUJ6=NY7^( zMcwnly03oD+Ba+UywLvhd^q(P+bP0l+XkKZ!8Tu literal 0 HcmV?d00001 From 950b5cf9c1a46cb8d068381405ee078538b8c770 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 7 Oct 2023 09:49:45 +0300 Subject: [PATCH 034/175] Create drawing.svg --- files/drawing.svg | 861 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 861 insertions(+) create mode 100644 files/drawing.svg diff --git a/files/drawing.svg b/files/drawing.svg new file mode 100644 index 00000000..cabe66ec --- /dev/null +++ b/files/drawing.svg @@ -0,0 +1,861 @@ + + + +RuCaptcha2Captcha From eeabb5f535ce8081e63b8fcc16c56be38a1652fb Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 8 Oct 2023 05:07:51 +0300 Subject: [PATCH 035/175] upd docs and image captcha --- docs/_static/Captcha300x.png | Bin 288097 -> 0 bytes docs/_static/CaptchaESm.png | Bin 44609 -> 0 bytes docs/_static/CaptchaSm.png | Bin 487890 -> 0 bytes {files => docs/_static}/RuCaptchaMedium.png | Bin docs/conf.py | 4 +- docs/index.rst | 2 +- docs/modules/main/info.md | 2 +- docs/requirements.txt | 6 +- files/RuCaptcha.png | Bin 487890 -> 0 bytes files/RuCaptchaLow.png | Bin 3751 -> 0 bytes src/python_rucaptcha/amazon_waf.py | 8 +- src/python_rucaptcha/core/base.py | 4 +- src/python_rucaptcha/core/result_handler.py | 6 +- src/python_rucaptcha/core/serializer.py | 25 +-- src/python_rucaptcha/image_captcha.py | 173 +++++++++++--------- src/python_rucaptcha/text_captcha.py | 26 +-- 16 files changed, 136 insertions(+), 120 deletions(-) delete mode 100644 docs/_static/Captcha300x.png delete mode 100644 docs/_static/CaptchaESm.png delete mode 100644 docs/_static/CaptchaSm.png rename {files => docs/_static}/RuCaptchaMedium.png (100%) delete mode 100644 files/RuCaptcha.png delete mode 100644 files/RuCaptchaLow.png diff --git a/docs/_static/Captcha300x.png b/docs/_static/Captcha300x.png deleted file mode 100644 index 8c9c1e2ffe5005c1ed7dcfd06e86fc90f5826b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288097 zcmeFa2RxT=_c(spdy5dEH0|stdnC$8gNBt&R!M_~w1`5b$ZBX)8d4fW8dQ|hkYr^h zA>wzP`|W=BHtN&o`8?0_|NdX!@2UHJt#h6GT<1R5I@h^xyB1oSaIuTBBZRojObx9O zqLan(T2^KpTXbc5G(s}_Lv5D?Sv#(iTod58+QZvbGHCr8S4r0pkJSi;ygq)^W39vW z*oZ;raW@$s-3w4;e9|cX^-JH4;y4HE__y*`Yo(_v_ww`b`A6z%&+a=mc&jzP=ehk? z`GYS$pQ`Abx=*{Nc2Dcvu)4nS8#hmUf9zWR%7~TuZL(ou)4!Z6sQ=pQcHvm*hobKM z{PvH5hc+%6Sd)4yf9{g}fmIvdOMZJV|8-M(#yF!}8t*xx+9Is``z1FjD9*k5>2pKN zzN;6TJA3>3j`>v2J;{@K(`zuVxNY!B)Z5t+ekaDuMb!2lvL29?Y|O8HR=cO5C}xI2 zxq4S{wX@}1-(6h2XEuHBb-S2$=6GHH#-|Eay}cEFPhWT3Fv&NWS=46!%h}yer>lzj0+pZlQg{ zxf{+N73u>s9nx;*Z_7_Q`_8bXr$sny-FPYf^I`!SjyuGfH@(|pv0F27Pr2D%|DvzA zUfJxKVc? zEI46uQ#JqD-3=bHv3|2}@f_mYwcpdTV0DJs#Q^!*1rL)ZB+A4)%*#9;zry&iYK4RO zxtv8?YP>UDU(P#oF6W)`5uL6#<`-^uy)!vBDVote!OBEz(_W>iZJO7=)Lxyca44`a z-fl(Vx!l)HUT3eH9ZOpGD){Q#?#j-B1Kd6SO&%wY`JZ5#6fbL^<@q?5>&QXd8xP)Y ze0c8a+s#EubJM?ZeLglY5OpfTue@eY+=|N0#!+oozJ27^TVpLai(Y6sw_)CN#>qjp zk2dmXniyFsbu#pr%VZa)9ZE{s$#=(FDnV>>!IQ!ThU2aeE`H z-yHk+ZL!ttwA3Hc-!k=mPA{;Xc;RqX=iF;erN`cO@8P>YP3l6%`>ThG-VD@U`Am1) z^2^NR<@N1dJ8X8Vn;(pN=$w>XD(iL4;O#i)W3RawCVWmUz4S!eZtabkkrVoKUcG)C z_&(^~>8Zz;_nA68dO;soc+xjs`*V_1W#)%w`;xt0UM9%kbMvHe7ua1@edJ3edRKeB z5qSA%>hgC_?rO`=G(MBTt^dx!_|l`(3%p-_@jU(M)|2rpJBx4FH`>iAPO3}1^F3Lz z%S`R2{lLoR>SJ?OUJz^i@uqsI`K6SwNUJNeoW_-0`&e#T7nkkrCL|cR$2~mL-9M@@ z;ceAJ$C=K`b1F6pHw1pJ%xU@1`Xw`k} z1Q}nQ$r;ser^jk&s%^C~&)zSvZvH&qQkespZ@wKm)2wZpV&~ zlPiK|IeKryIe$!fca@u?^{j(@=KQm4toi2SKTqkc3enV8J6bR!Fvnxr!kaR&vU2Y= z)YK2ns`7it*Ow#2^mKuhQST+w6>~$cEjkj%kiUI=Uey#cHIr)g@OzJh=$>ToYZ$Ve zQr*2dj(J*?m2>L;vLp2|8gXICCE6=>zvf9F=VSjmOZ)ij*^4%mn5wt>C%rQN{%nVC z!?a9KJ~6+o9G$Uun;j+|(DppOwkmz`v+dgNWO-_tWbe8AMhj$Hl%XzLUiIz!Rr%Ad zG9?dJovuDod|h??adcm-^NdsRTey;v&!%g( z{rWugmglS_HwWuwk3J&WnV=iJootXF=EIUFZJ_bx)LqNvPdvcZ+Z3(P0v zEz5oIGDH2N(IR2}sskYmDrZ6zFXrs<>f7-)>)?%0A?_WI{Nv|**z~&i2-n>Dn+y9A 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 Ie%ZhOf4bnMS^xk5 diff --git a/docs/_static/CaptchaESm.png b/docs/_static/CaptchaESm.png deleted file mode 100644 index b8661b8e6eb15831e59a144ec26ce6b2c22918c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44609 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 z 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 a@bIu(7WOT8<5wV?e&oz)a}PiJH~$X@ONVa& diff --git a/files/RuCaptchaMedium.png b/docs/_static/RuCaptchaMedium.png similarity index 100% rename from files/RuCaptchaMedium.png rename to docs/_static/RuCaptchaMedium.png diff --git a/docs/conf.py b/docs/conf.py index a5d171d9..4c0c4a8a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,8 +44,8 @@ html_theme = "jinja" html_theme_options = {"index_sidebar_logo": False} html_static_path = ["_static"] -html_favicon = "_static/CaptchaESm.png" -html_logo = "_static/CaptchaSm.png" +html_favicon = "_static/RuCaptchaMedium.png" +html_logo = "_static/RuCaptchaMedium.png" html_title = f"python-rucaptcha ({__version__})" html_show_sourcelink = False diff --git a/docs/index.rst b/docs/index.rst index f9af11b5..57ed7a0d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,7 +2,7 @@ python-rucaptcha ================ -.. image:: _static/Captcha300x.png +.. image:: _static/RuCaptchaMedium.png :align: center Python3 library for `RuCaptcha `_ and `2Captcha `_ service API. diff --git a/docs/modules/main/info.md b/docs/modules/main/info.md index 2c08d42f..965a925f 100644 --- a/docs/modules/main/info.md +++ b/docs/modules/main/info.md @@ -1,7 +1,7 @@ # Introduction -![](../../_static/CaptchaSm.png) +![](../../_static/RuCaptchaMedium.png) Capsolver's Banner diff --git a/docs/requirements.txt b/docs/requirements.txt index 91e9c421..0a305ba3 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,6 @@ -pallets_sphinx_themes==2.* -myst-parser==2.0.* +sphinx==7.2.6 +pallets_sphinx_themes==2.1.1 +myst-parser==2.0.0 autodoc_pydantic==2.0.1 pydantic==2.4.2 +pydantic-settings==2.0.3 diff --git a/files/RuCaptcha.png b/files/RuCaptcha.png deleted file mode 100644 index d2384acdff78f23b186807374f15c870da358b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487890 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 z 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 a@bIu(7WOT8<5wV?e&oz)a}PiJH~$X@ONVa& diff --git a/files/RuCaptchaLow.png b/files/RuCaptchaLow.png deleted file mode 100644 index 322627b91a174995b72c6db3f97c9697478d544c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3751 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 Union[dict, Exception]: if response.errorId == 0: self.get_task_payload.taskId = response.taskId else: - return response.dict() + return response.model_dump() except Exception as error: return error @@ -108,7 +108,7 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: if response.errorId == 0: self.get_task_payload.taskId = response.taskId else: - return response.dict() + return response.model_dump() except Exception as error: return error diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 67716a04..36c0ac09 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -25,7 +25,7 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r if captcha_response.status == "processing": time.sleep(sleep_time) else: - return captcha_response.dict() + return captcha_response.model_dump() except Exception as error: return error @@ -45,7 +45,7 @@ async def get_async_result( logging.warning(f"{get_payload = }") logging.warning(f"{url_response = }") # send a request for the result of solving the captcha - async with session.post(url_response, json=get_payload.dict(), raise_for_status=True) as resp: + async with session.post(url_response, json=get_payload.model_dump(), raise_for_status=True) as resp: logging.warning(f"{resp.status = }") captcha_response = await resp.json(content_type=None) logging.warning(f"{captcha_response = }") @@ -56,7 +56,7 @@ async def get_async_result( if captcha_response.status == "processing": time.sleep(sleep_time) else: - return captcha_response.dict() + return captcha_response.model_dump() except Exception as error: logging.warning(f"{error = }") return error diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index c528c10a..cace15b8 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -1,8 +1,8 @@ import logging from uuid import uuid4 -from typing import Optional +from typing import Literal, Optional -from pydantic.v1 import Field, BaseModel, conint, constr, validator, root_validator +from pydantic import Field, BaseModel, ConfigDict, conint, constr, field_validator, model_validator from . import enums from .config import APP_KEY @@ -13,8 +13,7 @@ class MyBaseModel(BaseModel): - class Config: - validate_assignment = True + model_config = ConfigDict(validate_assignment=True) class CaptchaOptionsSocketSer(MyBaseModel): @@ -27,7 +26,7 @@ class CaptchaOptionsSocketSer(MyBaseModel): lang: str = "" hintText: constr(max_length=139) = "" hintImg: str = "" - softId: str = Field(APP_KEY, const=True) + soft_id: Literal[APP_KEY] = APP_KEY class NormalCaptchaSocketSer(BaseModel): @@ -80,7 +79,7 @@ class SockAuthSer(BaseModel): class PostRequestSer(MyBaseModel): key: str method: str - soft_id: str = Field(APP_KEY, const=True) + soft_id: Literal[APP_KEY] = APP_KEY field_json: int = Field(1, alias="json") @@ -93,7 +92,7 @@ class CreateTaskBaseSer(MyBaseModel): task: TaskSer = {} languagePool: str = "en" callbackUrl: str = None - softId: str = Field(APP_KEY, const=True) + soft_id: Literal[APP_KEY] = APP_KEY class CaptchaOptionsSer(BaseModel): @@ -106,15 +105,7 @@ class CaptchaOptionsSer(BaseModel): url_request: Optional[str] = None # /in.php url_response: Optional[str] = None # /res.php - @validator("rucaptcha_key") - def rucaptcha_key_check(cls, value, values, **kwargs): - service_type = values.get("service_type") - if service_type in (enums.ServiceEnm.RUCAPTCHA, enums.ServiceEnm.TWOCAPTCHA): - if len(value) != 32: - raise ValueError(f"Invalid `rucaptcha_key` len, it must be - 32, u send - {len(value)}") - return value - - @validator("service_type") + @field_validator("service_type") def service_type_check(cls, value): if value not in enums.ServiceEnm.list_values(): logging.warning( @@ -123,7 +114,7 @@ def service_type_check(cls, value): ) return value - @root_validator + @model_validator(mode="before") def urls_set(cls, values): """ Set request \ response URLs if they not set previously diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index b540a479..2b881867 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -25,24 +25,39 @@ def __init__( or as a regular image to a folder created by the library - 'const'. img_clearing: True - delete file after solution, False - don't delete file after solution img_path: Folder to save captcha images + kwargs: Additional not required params for this captcha type Examples: >>> ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).captcha_handler(captcha_link="https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg") { - 'captchaSolve': 'W9H5K', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).captcha_handler(captcha_file="src/examples/088636.png") { - 'captchaSolve': '088636', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> with open("src/examples/088636.png", "rb") as f: @@ -50,50 +65,85 @@ def __init__( >>> ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122" ... ).captcha_handler(captcha_base64=file_data) { - 'captchaSolve': 'W9H5K', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> await ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).aio_captcha_handler(captcha_link="https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg") { - 'captchaSolve': 'W9H5K', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> await ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).aio_captcha_handler(captcha_file="src/examples/088636.png") { - 'captchaSolve': '088636', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } - Death yCaptcha + Death Captcha >>> ImageCaptcha(rucaptcha_key="some_username:some_password", ... service_type="deathbycaptcha" ... ).captcha_handler(captcha_file="src/examples/088636.jpg") { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> await ImageCaptcha(rucaptcha_key="some_username:some_password", ... service_type="deathbycaptcha" ... ).aio_captcha_handler(captcha_link="https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg") { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } >>> with open("src/examples/088636.png", "rb") as f: @@ -101,17 +151,26 @@ def __init__( >>> await ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122" ... ).aio_captcha_handler(captcha_base64=file_data) { - 'captchaSolve': 'W9H5K', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "text":"w9h5k" + }, + "cost":0.033, + "ip":"46.53.241.91", + "createTime":1696730723, + "endTime":1696730723, + "solveCount":1, + "taskId":74708110322 } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_normal_captcha + https://2captcha.com/api-docs/normal-captcha + + https://rucaptcha.com/api-docs/normal-captcha """ super().__init__(method=ImageCaptchaEnm.ImageToTextTask.value, *args, **kwargs) @@ -136,25 +195,6 @@ def captcha_handler( captcha_base64: Captcha image BASE64 info kwargs: additional params for `requests` library - Examples: - >>> ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... ).captcha_handler(captcha_link="https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg") - { - 'captchaSolve': 'W9H5K', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - - >>> ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... ).captcha_handler(captcha_file="src/examples/088636.png") - { - 'captchaSolve': '088636', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response @@ -176,7 +216,7 @@ def captcha_handler( except Exception as error: self.result.errorId = 12 self.result.solution = {"text": str(error)} - return self.result.dict() + return self.result.model_dump() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: @@ -187,7 +227,7 @@ def captcha_handler( # if none of the parameters are passed self.result.errorId = 12 self.result.solution = {"text": "No captcha send"} - return self.result.dict() + return self.result.model_dump() return self._processing_response(**kwargs) @@ -207,25 +247,6 @@ async def aio_captcha_handler( captcha_base64: Captcha image BASE64 info kwargs: additional params for `aiohttp` library - Examples: - >>> await ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... ).aio_captcha_handler(captcha_link="https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg") - { - 'captchaSolve': 'W9H5K', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - - >>> await ImageCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... ).aio_captcha_handler(captcha_file="src/examples/088636.png") - { - 'captchaSolve': '088636', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response @@ -247,7 +268,7 @@ async def aio_captcha_handler( except Exception as error: self.result.errorId = 12 self.result.solution = {"text": str(error)} - return self.result.dict() + return self.result.model_dump() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: @@ -258,7 +279,7 @@ async def aio_captcha_handler( # if none of the parameters are passed self.result.errorId = 12 self.result.solution = {"text": "No captcha send"} - return self.result.dict() + return self.result.model_dump() return await self._aio_processing_response() diff --git a/src/python_rucaptcha/text_captcha.py b/src/python_rucaptcha/text_captcha.py index 0e127e52..65f44da1 100644 --- a/src/python_rucaptcha/text_captcha.py +++ b/src/python_rucaptcha/text_captcha.py @@ -16,10 +16,10 @@ def __init__( Args: rucaptcha_key: User API key languagePool: Used to choose the workers for solving the captcha by their language. - Applicable to image-based and text-based captchas. - Default: en. - en - English-speaking workers - rn - Russian-speaking workers. + Applicable to image-based and text-based captchas.\n + `en` - English-speaking workers\n + `rn` - Russian-speaking workers. + kwargs: Additional not required params for this captcha type Examples: >>> TextCaptcha(rucaptcha_key="aa90...51122", @@ -35,7 +35,8 @@ def __init__( "ip":"46.53.241.91", "createTime":1695617910, "endTime":1695617965, - "solveCount":2 + "solveCount":2, + "taskId":5423543 } >>> TextCaptcha(rucaptcha_key="aa90...51122", @@ -50,7 +51,8 @@ def __init__( "ip":"46.53.241.91", "createTime":1695617910, "endTime":1695617965, - "solveCount":2 + "solveCount":2, + "taskId":5423543 } >>> await TextCaptcha(rucaptcha_key="aa90...51122", @@ -65,15 +67,17 @@ def __init__( "ip":"46.53.241.91", "createTime":1695617910, "endTime":1695617965, - "solveCount":2 + "solveCount":2, + "taskId":5423543 } Returns: Dict with full server response Notes: - https://2captcha.com/api-docs/get-task-result - https://rucaptcha.com/api-docs/get-task-result + https://2captcha.com/api-docs/text + + https://rucaptcha.com/api-docs/text """ super().__init__(method=TextCaptchaEnm.TextCaptchaTask.value, *args, **kwargs) @@ -93,7 +97,7 @@ def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).dict()}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).model_dump()}) return self._processing_response(**kwargs) async def aio_captcha_handler(self, textcaptcha: str) -> dict: @@ -109,5 +113,5 @@ async def aio_captcha_handler(self, textcaptcha: str) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).dict()}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).model_dump()}) return await self._aio_processing_response() From 000f47792fa7d4f5e2afa3418e4b5ae6d06d36ce Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 8 Oct 2023 05:08:00 +0300 Subject: [PATCH 036/175] Update Makefile --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 20903bb2..53b3f935 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ install: - cd src/ && pip install -e . + cd src/ && pip3 install -e . remove: - pip uninstall python_rucaptcha -y + pip3 uninstall python_rucaptcha -y refactor: black docs/ @@ -24,7 +24,7 @@ lint: isort src/ --check-only upload: - pip install twine + pip3 install twine cd src/ && python setup.py upload tests: install From 5fce1a6b109ff46d33add67292e893cb65b50df3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 8 Oct 2023 05:10:06 +0300 Subject: [PATCH 037/175] Create .python-version --- .python-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .python-version diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..9ac38041 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.11.5 From 938a5f1b8f558bf57ede5634fac513df6758a45a Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 8 Oct 2023 05:12:15 +0300 Subject: [PATCH 038/175] Update conftest.py --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 42b28325..d9799a19 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,12 +9,12 @@ @pytest.fixture(scope="function") def delay_func(): - time.sleep(0.2) + time.sleep(2) @pytest.fixture(scope="class") def delay_class(): - time.sleep(0.2) + time.sleep(5) @pytest.mark.usefixtures("delay_func") From cc593c80d948e78e3f5bb39c27409223d586f888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 17:22:41 +0000 Subject: [PATCH 039/175] Bump black from 23.9.1 to 23.10.0 Bumps [black](https://github.com/psf/black) from 23.9.1 to 23.10.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.9.1...23.10.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.style.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.style.txt b/requirements.style.txt index a2f0707b..48f83b59 100644 --- a/requirements.style.txt +++ b/requirements.style.txt @@ -1,4 +1,4 @@ # codestyle isort==5.* -black==23.9.1 +black==23.10.0 autoflake==2.* From 0e9953ba7fbdaf28dbc6b801b2aa64052b77e855 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 30 Oct 2023 07:38:29 +0300 Subject: [PATCH 040/175] Update conf.py --- docs/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/conf.py b/docs/conf.py index 4c0c4a8a..c8f50e44 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -61,6 +61,7 @@ "DeathByCaptcha", "https://deathbycaptcha.com?refid=1237267242", ), + ProjectLink("RedPandaDev", "https://red-panda-dev.xyz/"), ] } html_sidebars = { From eefa62576b9cbf16efe6336bb9dad48af65dea41 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 30 Oct 2023 07:38:32 +0300 Subject: [PATCH 041/175] Update info.md --- docs/modules/other-libs/info.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/modules/other-libs/info.md b/docs/modules/other-libs/info.md index 4ee60708..5a5ca784 100644 --- a/docs/modules/other-libs/info.md +++ b/docs/modules/other-libs/info.md @@ -4,3 +4,4 @@ 1. [RuCaptcha / 2Captcha](https://github.com/AndreiDrang/python-rucaptcha) 2. [AntiCaptcha](https://github.com/AndreiDrang/python3-anticaptcha) 3. [Capsolver](https://github.com/AndreiDrang/python3-captchaai) +4. [RedPandaDev group](https://red-panda-dev.xyz/) From 68b2ff5899f2920e11d8cb59d53270580f4fe8c2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 07:46:07 +0300 Subject: [PATCH 042/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index b15998f1..a00610d5 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -98,7 +98,8 @@ class YandexSmartCaptchaEnm(str, MyEnum): class TurnstileCaptchaEnm(str, MyEnum): TURNSTILE = "turnstile" - + TurnstileTaskProxyless='TurnstileTaskProxyless' + TurnstileTask='TurnstileTask' class AmazonWAFCaptchaEnm(str, MyEnum): AmazonTask = "AmazonTask" From 4a023b1698119c3cdb1d8eaeef466693f03071b4 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 07:46:10 +0300 Subject: [PATCH 043/175] Update turnstile.py --- src/python_rucaptcha/turnstile.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/python_rucaptcha/turnstile.py b/src/python_rucaptcha/turnstile.py index 7bdd52d2..670b71c0 100644 --- a/src/python_rucaptcha/turnstile.py +++ b/src/python_rucaptcha/turnstile.py @@ -3,7 +3,7 @@ class Turnstile(BaseCaptcha): - def __init__(self, pageurl: str, sitekey: str, method: str = TurnstileCaptchaEnm.TURNSTILE.value, *args, **kwargs): + def __init__(self, pageurl: str, sitekey: str, userAgent: str, method: str = TurnstileCaptchaEnm.TurnstileTaskProxyless.value, *args, **kwargs): """ The class is used to work with Cloudflare Turnstile. @@ -11,6 +11,7 @@ def __init__(self, pageurl: str, sitekey: str, method: str = TurnstileCaptchaEnm rucaptcha_key: User API key pageurl: Full URL of the captcha page sitekey: The value of the `sitekey` parameter found on the site + userAgent: Your browser UserAgent method: Captcha type kwargs: Not required params for task creation request @@ -18,7 +19,7 @@ def __init__(self, pageurl: str, sitekey: str, method: str = TurnstileCaptchaEnm >>> Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://www.geetest.com/en/demo", ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TURNSTILE.value, + ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).captcha_handler() { "captchaSolve": "0._VMG....Pv", @@ -30,7 +31,7 @@ def __init__(self, pageurl: str, sitekey: str, method: str = TurnstileCaptchaEnm >>> await Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://www.geetest.com/en/demo", ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TURNSTILE.value, + ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).aio_captcha_handler() { "captchaSolve": "0._VMG....Pv", @@ -47,7 +48,7 @@ def __init__(self, pageurl: str, sitekey: str, method: str = TurnstileCaptchaEnm """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"sitekey": sitekey, "pageurl": pageurl}) + self.create_task_payload['task'].update({"websiteKey": sitekey, "websiteURL": pageurl, "userAgent": userAgent}) # check user params if method not in TurnstileCaptchaEnm.list_values(): @@ -64,7 +65,7 @@ def captcha_handler(self, **kwargs): >>> Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://www.geetest.com/en/demo", ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TURNSTILE.value, + ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).captcha_handler() { "captchaSolve": "0._VMG....Pv", @@ -89,7 +90,7 @@ async def aio_captcha_handler(self): >>> await Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://www.geetest.com/en/demo", ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TURNSTILE.value, + ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).aio_captcha_handler() { "captchaSolve": "0._VMG....Pv", From 79b99abb4b5540cf999e00d6ebfc94737e308235 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:15:44 +0300 Subject: [PATCH 044/175] Update base.py --- src/python_rucaptcha/core/base.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index abd123f4..8244cf7a 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -23,7 +23,6 @@ def __init__( self, rucaptcha_key: str, method: str, - action: str = "get", sleep_time: int = 15, service_type: str = enums.ServiceEnm.TWOCAPTCHA.value, **kwargs, @@ -31,7 +30,6 @@ def __init__( """ :param rucaptcha_key: User API key :param method: Captcha type - :param action: Server action :param sleep_time: Time to wait for captcha solution :param service_type: URL with which the program will work, "2captcha" option is possible (standard) and "rucaptcha" From 5b5bd70842b86737adef30db9df18b585ae7935a Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:15:49 +0300 Subject: [PATCH 045/175] Update config.py --- src/python_rucaptcha/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/config.py b/src/python_rucaptcha/core/config.py index e139884a..60bd2458 100644 --- a/src/python_rucaptcha/core/config.py +++ b/src/python_rucaptcha/core/config.py @@ -8,7 +8,7 @@ # Connection retry generator -def attempts_generator(amount: int = 2): +def attempts_generator(amount: int = 5): """ Function generates a generator of length equal to `amount` From 638d62c399f5dc92261864ba8192b66d653aa556 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:15:56 +0300 Subject: [PATCH 046/175] Update result_handler.py --- src/python_rucaptcha/core/result_handler.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 36c0ac09..2843cad1 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -14,21 +14,23 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r Function periodically send the SYNC request to service and wait for captcha solving result """ # generator for repeated attempts to connect to the server - attempts = attempts_generator() + attempts = attempts_generator(amount=10) for _ in attempts: try: # send a request for the result of solving the captcha captcha_response = GetTaskResultResponseSer( **requests.post(url_response, json=get_payload.dict()).json(), taskId=get_payload.taskId ) + logging.warning(f'{captcha_response = }') # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": time.sleep(sleep_time) - else: + continue + elif captcha_response.errorId!=0: return captcha_response.model_dump() - except Exception as error: return error + return captcha_response.model_dump() async def get_async_result( From 8ae92ad52e0368d203ed98a52978f579c8c966d8 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:16:02 +0300 Subject: [PATCH 047/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index cace15b8..5f08a323 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -146,6 +146,8 @@ def urls_set(cls, values): class CreateTaskResponseSer(MyBaseModel): errorId: int taskId: int = None + errorCode: str = None + errorDescription: str = None class GetTaskResultRequestSer(BaseModel): From a58fc02f3752167d3cbac106161f97982de7eed4 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:16:06 +0300 Subject: [PATCH 048/175] Update turnstile.py --- src/python_rucaptcha/turnstile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/python_rucaptcha/turnstile.py b/src/python_rucaptcha/turnstile.py index 670b71c0..bb017980 100644 --- a/src/python_rucaptcha/turnstile.py +++ b/src/python_rucaptcha/turnstile.py @@ -1,3 +1,5 @@ +import logging + from .core.base import BaseCaptcha from .core.enums import TurnstileCaptchaEnm @@ -46,6 +48,7 @@ def __init__(self, pageurl: str, sitekey: str, userAgent: str, method: str = Tur Notes: https://rucaptcha.com/api-rucaptcha#turnstile """ + super().__init__(method=method, *args, **kwargs) self.create_task_payload['task'].update({"websiteKey": sitekey, "websiteURL": pageurl, "userAgent": userAgent}) From f8afdbfc82911a21283e01074062f5c65487c1d8 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:16:25 +0300 Subject: [PATCH 049/175] Update turnstile.py --- src/python_rucaptcha/turnstile.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/python_rucaptcha/turnstile.py b/src/python_rucaptcha/turnstile.py index bb017980..d438faee 100644 --- a/src/python_rucaptcha/turnstile.py +++ b/src/python_rucaptcha/turnstile.py @@ -1,11 +1,17 @@ -import logging - from .core.base import BaseCaptcha from .core.enums import TurnstileCaptchaEnm class Turnstile(BaseCaptcha): - def __init__(self, pageurl: str, sitekey: str, userAgent: str, method: str = TurnstileCaptchaEnm.TurnstileTaskProxyless.value, *args, **kwargs): + def __init__( + self, + pageurl: str, + sitekey: str, + userAgent: str, + method: str = TurnstileCaptchaEnm.TurnstileTaskProxyless.value, + *args, + **kwargs, + ): """ The class is used to work with Cloudflare Turnstile. @@ -51,7 +57,7 @@ def __init__(self, pageurl: str, sitekey: str, userAgent: str, method: str = Tur super().__init__(method=method, *args, **kwargs) - self.create_task_payload['task'].update({"websiteKey": sitekey, "websiteURL": pageurl, "userAgent": userAgent}) + self.create_task_payload["task"].update({"websiteKey": sitekey, "websiteURL": pageurl, "userAgent": userAgent}) # check user params if method not in TurnstileCaptchaEnm.list_values(): From afe19e3684120c2c11d109bcdd65980969ba9701 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:16:34 +0300 Subject: [PATCH 050/175] Update result_handler.py --- src/python_rucaptcha/core/result_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 2843cad1..ca0892cb 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -26,7 +26,7 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r if captcha_response.status == "processing": time.sleep(sleep_time) continue - elif captcha_response.errorId!=0: + elif captcha_response.errorId != 0: return captcha_response.model_dump() except Exception as error: return error From d9f425b481f402f6441482002fac36977e62a907 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:16:38 +0300 Subject: [PATCH 051/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index a00610d5..28410633 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -98,8 +98,9 @@ class YandexSmartCaptchaEnm(str, MyEnum): class TurnstileCaptchaEnm(str, MyEnum): TURNSTILE = "turnstile" - TurnstileTaskProxyless='TurnstileTaskProxyless' - TurnstileTask='TurnstileTask' + TurnstileTaskProxyless = "TurnstileTaskProxyless" + TurnstileTask = "TurnstileTask" + class AmazonWAFCaptchaEnm(str, MyEnum): AmazonTask = "AmazonTask" From 0608d40e208e3275968cc289449a0a19d540a1e1 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 13 Nov 2023 10:17:58 +0300 Subject: [PATCH 052/175] Update result_handler.py --- src/python_rucaptcha/core/result_handler.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index ca0892cb..1753fb9a 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -1,5 +1,4 @@ import time -import logging from typing import Union import aiohttp @@ -21,7 +20,6 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r captcha_response = GetTaskResultResponseSer( **requests.post(url_response, json=get_payload.dict()).json(), taskId=get_payload.taskId ) - logging.warning(f'{captcha_response = }') # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": time.sleep(sleep_time) @@ -44,21 +42,17 @@ async def get_async_result( async with aiohttp.ClientSession() as session: for _ in attempts: try: - logging.warning(f"{get_payload = }") - logging.warning(f"{url_response = }") # send a request for the result of solving the captcha async with session.post(url_response, json=get_payload.model_dump(), raise_for_status=True) as resp: - logging.warning(f"{resp.status = }") captcha_response = await resp.json(content_type=None) - logging.warning(f"{captcha_response = }") captcha_response = GetTaskResultResponseSer(**captcha_response, taskId=get_payload.taskId) - logging.warning(f"{captcha_response = }") # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": time.sleep(sleep_time) - else: + continue + elif captcha_response.errorId != 0: return captcha_response.model_dump() except Exception as error: - logging.warning(f"{error = }") return error + return captcha_response.model_dump() From a95f050278e5110a0a56475d4e9e8a0af3fa777b Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:13 +0300 Subject: [PATCH 053/175] Update control.py --- src/python_rucaptcha/control.py | 269 ++------------------------------ 1 file changed, 17 insertions(+), 252 deletions(-) diff --git a/src/python_rucaptcha/control.py b/src/python_rucaptcha/control.py index 88545c9a..8007a5c6 100644 --- a/src/python_rucaptcha/control.py +++ b/src/python_rucaptcha/control.py @@ -1,5 +1,3 @@ -from typing import Optional - from .core.base import BaseCaptcha from .core.enums import ControlEnm from .core.result_handler import get_sync_result, get_async_result @@ -8,7 +6,6 @@ class Control(BaseCaptcha): def __init__( self, - action: str, *args, **kwargs, ): @@ -19,17 +16,8 @@ def __init__( action: Control action type Examples: - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.DEL_PINGBACK.value).domain_control(addr="all") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GET.value).report(id="73043727671") + >>> Control(rucaptcha_key="aa9.....", + ... action=ControlEnm.getBalance.value).report() { 'captchaSolve': '1', 'taskId': None, @@ -37,163 +25,16 @@ def __init__( 'errorBody': None } - DeathByCaptcha: - - >>> Control(rucaptcha_key="service_username:service_password", - ... service_type="other-captcha-services", - ... action=ControlEnm.GETBALANCE.value).additional_methods() - { - 'captchaSolve': '0.00', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - DeathByCaptcha: - - >>> from python_rucaptcha.core.enums import ControlEnm, ServiceEnm - >>> Control(rucaptcha_key="service_username:service_password", - ... service_type=ServiceEnm.DEATHBYCAPTCHA, - ... action=ControlEnm.GETBALANCE.value).additional_methods() - { - 'captchaSolve': '0.00', - 'taskId': None, - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#manage_pingback - https://rucaptcha.com/api-rucaptcha#complain - https://rucaptcha.com/api-rucaptcha#additional - """ - - super().__init__(method=ControlEnm.CONTROL.value, action=action, *args, **kwargs) - - # check user params - if action not in ControlEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {ControlEnm.list_values()}") - - def domain_control(self, addr: Optional[str] = None) -> dict: + https://rucaptcha.com/api-docs/get-balance + https://rucaptcha.com/api-docs/report-correct + https://rucaptcha.com/api-docs/report-incorrect """ - Callback domains control - - Args: - addr: URL for pingback or `all` with pingback delete param - Examples: - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.DEL_PINGBACK.value).domain_control(addr="all") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.DEL_PINGBACK.value).domain_control(addr="http://mysite.com/pingback/url/") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.ADD_PINGBACK.value).domain_control(addr="http://mysite.com/pingback/url/") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GET_PINGBACK.value).domain_control() - { - 'captchaSolve': 'http://mysite.com/pingback/url/', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - - Returns: - Dict with full server response - - Notes: - https://rucaptcha.com/api-rucaptcha#manage_pingback - """ - self.get_payload.update({"addr": addr}) - return get_sync_result( - get_payload=self.get_payload, - sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, - ) - - async def aio_domain_control(self, addr: Optional[str] = None) -> dict: - """ - Callback domains control - - Args: - addr: URL for pingback or `all` with pingback delete param - - Examples: - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.DEL_PINGBACK.value).aio_domain_control(addr="all") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.DEL_PINGBACK.value).aio_domain_control(addr="http://mysite.com/pingback/url/") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.ADD_PINGBACK.value).aio_domain_control(addr="http://mysite.com/pingback/url/") - { - 'captchaSolve': 'OK', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GET_PINGBACK.value).aio_domain_control() - { - 'captchaSolve': 'http://mysite.com/pingback/url/', - 'taskId': None, - 'error': False, - 'errorBody': None - } - - - Returns: - Dict with full server response - - Notes: - https://rucaptcha.com/api-rucaptcha#manage_pingback - """ - self.get_payload.update({"addr": addr}) - return await get_async_result( - get_payload=self.get_payload, - sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, - ) + super().__init__(method=ControlEnm.control, *args, **kwargs) def report(self, id: str) -> dict: """ @@ -295,110 +136,34 @@ async def aio_report(self, id: str) -> dict: result=self.result, ) - def additional_methods(self, **kwargs) -> dict: + def getBalance(self) -> dict: """ - Some additional methods for control API (like balance and etc.) - - Args: - kwargs: Additional params for method, like `id`, `ids`, more info in service docs. - - Examples: - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GETBALANCE.value).additional_methods() - { - 'captchaSolve': '1044.23118', - 'taskId': None, - 'error': False, - 'errorBody': None - } + GetBalance method Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#additional + Check class docstirng for more info """ - for key in kwargs: - self.get_payload.update({key: kwargs[key]}) return get_sync_result( - get_payload=self.get_payload, + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, + url_response=f"https://api.{self.params.service_type}.com/getBalance", ) - async def aio_additional_methods(self, **kwargs) -> dict: + async def aio_getBalance(self) -> dict: """ - Some additional methods for control API (like balance and etc.) - - Args: - kwargs: Additional params for method, like `id`, `ids`, more info in service docs. - - Examples: - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GETBALANCE.value).aio_additional_methods() - { - 'captchaSolve': '1044.23118', - 'taskId': None, - 'error': False, - 'errorBody': None - } + Async GetBalance method Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#additional + Check class docstirng for more info """ - for key in kwargs: - self.get_payload.update({key: kwargs[key]}) - return await get_async_result( - get_payload=self.get_payload, + return get_sync_result( + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, - ) - - -''' -# Async WebSocket method -class sockCaptchaControl(WebSocketRuCaptcha): - def __init__(self, rucaptcha_key: str, allSessions: bool = None, suppressSuccess: bool = None): - """ - Method setup WebSocket connection data - Params description check in parent class - """ - super().__init__(allSessions, suppressSuccess) - self.rucaptcha_key = rucaptcha_key - - async def get_balance(self) -> dict: - """ - The asynchronous WebSocket method return account balance. - More info - https://wsrucaptcha.docs.apiary.io/#reference/4 - :return: Server response dict - """ - balance_payload = ControlCaptchaSocketSer( - **{ - "method": "balance", - } - ) - return await self.send_request(balance_payload.json(exclude_none=True)) - - async def report(self, success: bool, captchaId: int) -> dict: - """ - The asynchronous WebSocket method send captcha solving reports (success or fail). - More info - https://wsrucaptcha.docs.apiary.io/#reference/2 - :param success: Is captcha solved success? - :param captchaId: Captcha task unique id. For example - 5034284222 - :return: Server response dict - """ - report_payload = ControlCaptchaSocketSer( - **{ - "method": "report", - "success": success, - "captchaId": captchaId, - } + url_response=f"https://api.{self.params.service_type}.com/getBalance", ) - - return await self.send_request(report_payload.json(exclude_none=True)) -''' From d3503a5abfaeb5f5e4054d4bd9172c6991d68f13 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:16 +0300 Subject: [PATCH 054/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 28410633..84bf1c2d 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -73,23 +73,13 @@ class TikTokCaptchaEnm(str, MyEnum): class ControlEnm(str, MyEnum): - # control method - CONTROL = "control" - - # default - GET = "get" - # https://rucaptcha.com/api-rucaptcha#manage_pingback - ADD_PINGBACK = "add_pingback" - GET_PINGBACK = "get_pingback" - DEL_PINGBACK = "del_pingback" - - # https://rucaptcha.com/api-rucaptcha#additional - GETBALANCE = "getbalance" - GET2 = "get2" - - # https://rucaptcha.com/api-rucaptcha#complain - REPORTGOOD = "reportgood" - REPORTBAD = "reportbad" + control = "control" + # https://rucaptcha.com/api-docs/get-balance + getBalance = "getBalance" + # https://rucaptcha.com/api-docs/report-correct + reportCorrect = "reportCorrect" + # https://rucaptcha.com/api-docs/report-incorrect + reportIncorrect = "reportIncorrect" class YandexSmartCaptchaEnm(str, MyEnum): From 24c966d95c95b61216a783b13119a346ebef65ee Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:18 +0300 Subject: [PATCH 055/175] Update base.py --- src/python_rucaptcha/core/base.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 8244cf7a..455a5c6b 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -36,14 +36,15 @@ def __init__( :param kwargs: Designed to pass OPTIONAL parameters to the payload for a request to RuCaptcha """ # assign args to validator - self.params = CaptchaOptionsSer(**locals(), **kwargs) + self.params = CaptchaOptionsSer(sleep_time=sleep_time, service_type=service_type, **kwargs) + self.params.urls_set() # prepare create task payload self.create_task_payload = CreateTaskBaseSer( - clientKey=self.params.rucaptcha_key, task=TaskSer(type=method), **locals() - ).dict(by_alias=True) + clientKey=rucaptcha_key, task=TaskSer(type=method), **kwargs + ).to_dict() # prepare get task result data payload - self.get_task_payload = GetTaskResultRequestSer(clientKey=self.params.rucaptcha_key) + self.get_task_payload = GetTaskResultRequestSer(clientKey=rucaptcha_key) for key in kwargs: self.create_task_payload["task"].update({key: kwargs[key]}) @@ -67,7 +68,7 @@ def _processing_response(self, **kwargs: dict) -> Union[dict, Exception]: if response.errorId == 0: self.get_task_payload.taskId = response.taskId else: - return response.model_dump() + return response.to_dict() except Exception as error: return error @@ -106,7 +107,7 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: if response.errorId == 0: self.get_task_payload.taskId = response.taskId else: - return response.model_dump() + return response.to_dict() except Exception as error: return error From 8b66851bce9a396bae84b3da85fb59b2d9c64871 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:21 +0300 Subject: [PATCH 056/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 152 ++++++------------------ 1 file changed, 34 insertions(+), 118 deletions(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 5f08a323..09ba16dd 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -1,74 +1,17 @@ -import logging -from uuid import uuid4 -from typing import Literal, Optional +from typing import Literal, Optional, Annotated -from pydantic import Field, BaseModel, ConfigDict, conint, constr, field_validator, model_validator +from msgspec import Meta, Struct from . import enums from .config import APP_KEY -""" -Socket API Serializers -""" - - -class MyBaseModel(BaseModel): - model_config = ConfigDict(validate_assignment=True) - - -class CaptchaOptionsSocketSer(MyBaseModel): - phrase: bool = False - caseSensitive: bool = False - numeric: conint(ge=1, le=4) = 0 - calc: bool = False - minLen: conint(ge=0, le=20) = 0 - maxLen: conint(ge=0, le=20) = 0 - lang: str = "" - hintText: constr(max_length=139) = "" - hintImg: str = "" - soft_id: Literal[APP_KEY] = APP_KEY - - -class NormalCaptchaSocketSer(BaseModel): - method: str = "normal" - requestId: str = Field(default_factory=lambda: str(uuid4())) - body: str = str() - options: "CaptchaOptionsSocketSer" = CaptchaOptionsSocketSer() - - -class TextCaptchaSocketSer(BaseModel): - method: str = "text" - requestId: str = Field(default_factory=lambda: str(uuid4())) - body: str = str() - options: "CaptchaOptionsSocketSer" = CaptchaOptionsSocketSer() - - -class ControlCaptchaSocketSer(BaseModel): - method: str - requestId: str = Field(default_factory=lambda: str(uuid4())) - success: str = None - captchaId: int = None - - -class SocketResponse(BaseModel): - method: str = None - success: bool = None - code: str = None - # captcha task ID at RuCaptcha service - captchaId: int = None - # manually generated requestID - requestId: str = Field(default_factory=lambda: str(uuid4())) - error: str = None - # specific fields for balance request response - balance: float = None - valute: str = None +PositiveInt = Annotated[int, Meta(ge=5)] +MinLenStr = Annotated[int, Meta(min_length=10)] -class SockAuthSer(BaseModel): - method: str = "auth" - requestId: str = Field(default_factory=lambda: str(uuid4())) - key: str - options: dict +class MyBaseModel(Struct): + def to_dict(self): + return {f: getattr(self, f) for f in self.__struct_fields__} """ @@ -76,16 +19,13 @@ class SockAuthSer(BaseModel): """ -class PostRequestSer(MyBaseModel): - key: str - method: str - soft_id: Literal[APP_KEY] = APP_KEY - field_json: int = Field(1, alias="json") - - class TaskSer(MyBaseModel): type: str +class ErrorFieldsSer(Struct): + errorCode: str = None + errorDescription: str = None + class CreateTaskBaseSer(MyBaseModel): clientKey: str @@ -95,47 +35,28 @@ class CreateTaskBaseSer(MyBaseModel): soft_id: Literal[APP_KEY] = APP_KEY -class CaptchaOptionsSer(BaseModel): - method: str - action: str - sleep_time: conint(gt=5) = 10 - service_type: str = enums.ServiceEnm.TWOCAPTCHA.value - rucaptcha_key: constr(min_length=1) +class GetTaskResultRequestSer(MyBaseModel): + clientKey: str + taskId: int = None + - url_request: Optional[str] = None # /in.php - url_response: Optional[str] = None # /res.php +class CaptchaOptionsSer(MyBaseModel): + sleep_time: PositiveInt = 10 + service_type: enums.ServiceEnm = enums.ServiceEnm.TWOCAPTCHA.value - @field_validator("service_type") - def service_type_check(cls, value): - if value not in enums.ServiceEnm.list_values(): - logging.warning( - f"We support only this list of services - '{', '.join(enums.ServiceEnm.list_values())}', u send - '{value}'. " - f"All other services you use at your own risk" - ) - return value + url_request: Optional[str] = None + url_response: Optional[str] = None - @model_validator(mode="before") - def urls_set(cls, values): + def urls_set(self): """ - Set request \ response URLs if they not set previously + Set request/response URLs if they not set previously """ - if not values.get("url_request") and not values.get("url_response"): - service_type = values.get("service_type") - if service_type == enums.ServiceEnm.DEATHBYCAPTCHA: - values.update( - { - "url_request": f"http://api.{service_type}.com/2captcha/in.php", - "url_response": f"http://api.{service_type}.com/2captcha/res.php", - } - ) - else: - values.update( - { - "url_request": f"https://api.{service_type}.com/createTask", - "url_response": f"https://api.{service_type}.com/getTaskResult", - } - ) - return values + if self.service_type == enums.ServiceEnm.DEATHBYCAPTCHA: + self.url_request = f"http://api.{self.service_type}.com/2captcha/in.php" + self.url_response = f"http://api.{self.service_type}.com/2captcha/res.php" + else: + self.url_request = f"https://api.{self.service_type}.com/createTask" + self.url_response = f"https://api.{self.service_type}.com/getTaskResult" """ @@ -143,21 +64,14 @@ def urls_set(cls, values): """ -class CreateTaskResponseSer(MyBaseModel): +class CreateTaskResponseSer(MyBaseModel, ErrorFieldsSer, kw_only=True): errorId: int taskId: int = None - errorCode: str = None - errorDescription: str = None - - -class GetTaskResultRequestSer(BaseModel): - clientKey: str - taskId: int = None -class GetTaskResultResponseSer(BaseModel): +class GetTaskResultResponseSer(MyBaseModel, ErrorFieldsSer): errorId: int = 0 - status: str = None + status: str = "ready" solution: dict = None cost: float = None ip: str = None @@ -165,6 +79,8 @@ class GetTaskResultResponseSer(BaseModel): endTime: int = None solveCount: int = None taskId: int = None + # control method params + balance: float = None """ @@ -173,5 +89,5 @@ class GetTaskResultResponseSer(BaseModel): class TextCaptchaTaskSer(TaskSer): + comment: str = None type: str = "TextCaptchaTask" - comment: str From fded7dbe16536249c0411818cfc1caeb73078065 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:25 +0300 Subject: [PATCH 057/175] Update text_captcha.py --- src/python_rucaptcha/text_captcha.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/python_rucaptcha/text_captcha.py b/src/python_rucaptcha/text_captcha.py index 65f44da1..b7e2b406 100644 --- a/src/python_rucaptcha/text_captcha.py +++ b/src/python_rucaptcha/text_captcha.py @@ -1,3 +1,5 @@ +import logging + from .core.base import BaseCaptcha from .core.enums import TextCaptchaEnm from .core.serializer import TextCaptchaTaskSer @@ -83,6 +85,7 @@ def __init__( super().__init__(method=TextCaptchaEnm.TextCaptchaTask.value, *args, **kwargs) self.create_task_payload.update({"languagePool": languagePool}) + logging.warning(f"{self.create_task_payload = }") def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: """ @@ -97,7 +100,7 @@ def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).model_dump()}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).to_dict()}) return self._processing_response(**kwargs) async def aio_captcha_handler(self, textcaptcha: str) -> dict: @@ -113,5 +116,5 @@ async def aio_captcha_handler(self, textcaptcha: str) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).model_dump()}) + self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).to_dict()}) return await self._aio_processing_response() From 9622f406f4b016e2b8792151a3f54c23dbd1fbff Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:27 +0300 Subject: [PATCH 058/175] Update result_handler.py --- src/python_rucaptcha/core/result_handler.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 1753fb9a..15763019 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -1,4 +1,6 @@ import time +import asyncio +import logging from typing import Union import aiohttp @@ -18,17 +20,20 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r try: # send a request for the result of solving the captcha captcha_response = GetTaskResultResponseSer( - **requests.post(url_response, json=get_payload.dict()).json(), taskId=get_payload.taskId + **requests.post(url_response, json=get_payload.to_dict()).json(), taskId=get_payload.taskId ) + logging.warning(f"{captcha_response = }") # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": time.sleep(sleep_time) continue + elif captcha_response.status == "ready": + break elif captcha_response.errorId != 0: - return captcha_response.model_dump() + return captcha_response.to_dict() except Exception as error: return error - return captcha_response.model_dump() + return captcha_response.to_dict() async def get_async_result( @@ -43,16 +48,18 @@ async def get_async_result( for _ in attempts: try: # send a request for the result of solving the captcha - async with session.post(url_response, json=get_payload.model_dump(), raise_for_status=True) as resp: + async with session.post(url_response, json=get_payload.to_dict(), raise_for_status=True) as resp: captcha_response = await resp.json(content_type=None) captcha_response = GetTaskResultResponseSer(**captcha_response, taskId=get_payload.taskId) # if the captcha has not been resolved yet, wait if captcha_response.status == "processing": - time.sleep(sleep_time) + await asyncio.sleep(sleep_time) continue + elif captcha_response.status == "ready": + break elif captcha_response.errorId != 0: - return captcha_response.model_dump() + return captcha_response.to_dict() except Exception as error: return error - return captcha_response.model_dump() + return captcha_response.to_dict() From baef51ffefa5bbddd552d9d0ff7f128773ff35ff Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:31 +0300 Subject: [PATCH 059/175] Update requirements.txt --- src/requirements.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/requirements.txt b/src/requirements.txt index 31877940..c9b17689 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,5 +1,4 @@ -requests>=2.21.0 -aiohttp>=3.7.4 -pydantic>=2.4.0 -tenacity==8.* -# websockets==11.* +requests>=2.28.0 +aiohttp>=3.9.0 +msgspec==0.18.* +tenacity==8.2.* From 4ad28b0f4335560fed0a21a02e66cbbd364551bd Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:04:34 +0300 Subject: [PATCH 060/175] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f19f6c7e..fb34280e 100644 --- a/README.md +++ b/README.md @@ -63,12 +63,14 @@ Is described in the [documentation-website](https://andreidrang.github.io/python ### Changelog +For full changelog info check - [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). + +- v.6.0 - Library refactoring. Stop using `pydantic`, start using `msgspec`. Move to API v2. More details at [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). - v.5.3 - Added support for [Death By Captcha](https://www.deathbycaptcha.com?refid=1237267242) and other services by changing `service_type` and `url_request` \ `url_response` parameters. - v.5.2 - Added Audio captcha method. - v.5.1 - Check [releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). - v.5.0 - Added AmazonWAF captcha method. - v.4.2 - Added [Yandex Smart Captcha](https://rucaptcha.com/api-rucaptcha#yandex). -- v.4.0 - Rework classes and methods. Adding `TikTok` captcha. Adding inheritance and serializers. The `Callback server` is deprecated. ### Get API Key to work with the library 1. On the page - https://rucaptcha.com/enterpage From a4630ac7fa09e9572093cf2adc3e4f100602c26e Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:44:13 +0300 Subject: [PATCH 061/175] Update control.py --- src/python_rucaptcha/control.py | 147 +++++++++++++++++--------------- 1 file changed, 76 insertions(+), 71 deletions(-) diff --git a/src/python_rucaptcha/control.py b/src/python_rucaptcha/control.py index 8007a5c6..1e222c14 100644 --- a/src/python_rucaptcha/control.py +++ b/src/python_rucaptcha/control.py @@ -16,13 +16,38 @@ def __init__( action: Control action type Examples: - >>> Control(rucaptcha_key="aa9.....", - ... action=ControlEnm.getBalance.value).report() + >>> Control(rucaptcha_key="aa9.....").getBalance() { - 'captchaSolve': '1', - 'taskId': None, - 'error': False, - 'errorBody': None + 'balance': 1593.4479 + } + + >>> await Control(rucaptcha_key="aa9.....").aio_getBalance() + { + 'balance': 1593.4479 + } + + >>> Control(rucaptcha_key="aa9.....").reportCorrect(id=75188571838) + { + 'errorId': 0, + 'status': 'success' + } + + >>> await Control(rucaptcha_key="aa9.....").aio_reportCorrect(id=75188571838) + { + 'errorId': 0, + 'status': 'success' + } + + >>> Control(rucaptcha_key="aa9.....").reportIncorrect(id=75188571838) + { + 'errorId': 0, + 'status': 'success' + } + + >>> await Control(rucaptcha_key="aa9.....").aio_reportIncorrect(id=75188571838) + { + 'errorId': 0, + 'status': 'success' } Returns: @@ -36,104 +61,84 @@ def __init__( super().__init__(method=ControlEnm.control, *args, **kwargs) - def report(self, id: str) -> dict: + def reportCorrect(self, id: int) -> dict: """ - Captcha results report + reportCorrect method Args: id: Captcha task ID - Examples: - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GET.value).report(id="73043727671") - { - 'captchaSolve': '1', - 'taskId': None, - 'error': False, - 'errorBody': None - } + Returns: + Dict with full server response - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.REPORTGOOD.value).report(id="73043727671") - { - 'captchaSolve': 'OK_REPORT_RECORDED', - 'taskId': None, - 'error': False, - 'errorBody': None - } + Notes: + https://2captcha.com/api-docs/report-correct + """ + self.get_task_payload.taskId = id + return get_sync_result( + get_payload=self.get_task_payload, + sleep_time=self.params.sleep_time, + url_response=f"https://api.{self.params.service_type}.com/reportCorrect", + ) - >>> Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.REPORTBAD.value).report(id="73043727671") - { - 'captchaSolve': 'OK_REPORT_RECORDED', - 'taskId': None, - 'error': False, - 'errorBody': None - } + async def aio_reportCorrect(self, id: int) -> dict: + """ + Captcha results report + Args: + id: Captcha task ID Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#complain + https://2captcha.com/api-docs/report-correct """ - self.get_payload.update({"id": id}) - return get_sync_result( - get_payload=self.get_payload, + self.get_task_payload.taskId = id + return await get_async_result( + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, + url_response=f"https://api.{self.params.service_type}.com/reportCorrect", ) - async def aio_report(self, id: str) -> dict: + def reportIncorrect(self, id: int) -> dict: """ - Captcha results report + reportCorrect method Args: id: Captcha task ID - Examples: - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.GET.value).aio_report(id="73043727671") - { - 'captchaSolve': '1', - 'taskId': None, - 'error': False, - 'errorBody': None - } + Returns: + Dict with full server response - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.REPORTGOOD.value).aio_report(id="73043727671") - { - 'captchaSolve': 'OK_REPORT_RECORDED', - 'taskId': None, - 'error': False, - 'errorBody': None - } + Notes: + https://2captcha.com/api-docs/report-incorrect + """ + self.get_task_payload.taskId = id + return get_sync_result( + get_payload=self.get_task_payload, + sleep_time=self.params.sleep_time, + url_response=f"https://api.{self.params.service_type}.com/reportIncorrect", + ) - >>> await Control(rucaptcha_key="aa9011f31111181111168611f1151122", - ... action=ControlEnm.REPORTBAD.value).aio_report(id="73043727671") - { - 'captchaSolve': 'OK_REPORT_RECORDED', - 'taskId': None, - 'error': False, - 'errorBody': None - } + async def aio_reportIncorrect(self, id: int) -> dict: + """ + Captcha results report + Args: + id: Captcha task ID Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#complain + https://2captcha.com/api-docs/report-incorrect """ - self.get_payload.update({"id": id}) + self.get_task_payload.taskId = id return await get_async_result( - get_payload=self.get_payload, + get_payload=self.get_task_payload, sleep_time=self.params.sleep_time, - url_response=self.params.url_response, - result=self.result, + url_response=f"https://api.{self.params.service_type}.com/reportIncorrect", ) def getBalance(self) -> dict: From ed648ddd18711d951a69d0fda1a9ef76cfa2daa9 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 18:44:18 +0300 Subject: [PATCH 062/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 09ba16dd..667f13df 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -22,6 +22,7 @@ def to_dict(self): class TaskSer(MyBaseModel): type: str + class ErrorFieldsSer(Struct): errorCode: str = None errorDescription: str = None From e3de8190b254dcf21f9b0c60496bf31623eff723 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:36:10 +0300 Subject: [PATCH 063/175] Update base.py --- src/python_rucaptcha/core/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 455a5c6b..66137f6d 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -36,12 +36,12 @@ def __init__( :param kwargs: Designed to pass OPTIONAL parameters to the payload for a request to RuCaptcha """ # assign args to validator - self.params = CaptchaOptionsSer(sleep_time=sleep_time, service_type=service_type, **kwargs) + self.params = CaptchaOptionsSer(sleep_time=sleep_time, service_type=service_type) self.params.urls_set() # prepare create task payload self.create_task_payload = CreateTaskBaseSer( - clientKey=rucaptcha_key, task=TaskSer(type=method), **kwargs + clientKey=rucaptcha_key, task=TaskSer(type=method).to_dict() ).to_dict() # prepare get task result data payload self.get_task_payload = GetTaskResultRequestSer(clientKey=rucaptcha_key) From a72f0a8e8b00348220c3046a94e3019cae1a847f Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:36:22 +0300 Subject: [PATCH 064/175] Update image_captcha.py --- src/python_rucaptcha/image_captcha.py | 42 +++------------------------ 1 file changed, 4 insertions(+), 38 deletions(-) diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index 2b881867..29ed266e 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -216,7 +216,7 @@ def captcha_handler( except Exception as error: self.result.errorId = 12 self.result.solution = {"text": str(error)} - return self.result.model_dump() + return self.result.to_dict() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: @@ -227,7 +227,7 @@ def captcha_handler( # if none of the parameters are passed self.result.errorId = 12 self.result.solution = {"text": "No captcha send"} - return self.result.model_dump() + return self.result.to_dict() return self._processing_response(**kwargs) @@ -268,7 +268,7 @@ async def aio_captcha_handler( except Exception as error: self.result.errorId = 12 self.result.solution = {"text": str(error)} - return self.result.model_dump() + return self.result.to_dict() # according to the value of the passed parameter, select the function to save the image if self.save_format == SaveFormatsEnm.CONST.value: @@ -279,44 +279,10 @@ async def aio_captcha_handler( # if none of the parameters are passed self.result.errorId = 12 self.result.solution = {"text": "No captcha send"} - return self.result.model_dump() + return self.result.to_dict() return await self._aio_processing_response() def __del__(self): if self.save_format == SaveFormatsEnm.CONST.value and self.img_clearing: shutil.rmtree(self.img_path) - - -''' -class sockNormalCaptcha(WebSocketRuCaptcha): - """ - Class for ImageCaptcha - """ - - def __init__(self, rucaptcha_key: str, allSessions: bool = None, suppressSuccess: bool = None): - """ - Method setup WebSocket connection data - """ - super().__init__(allSessions, suppressSuccess) - self.rucaptcha_key = rucaptcha_key - - async def captcha_handler(self, captcha_image_base64: str, **kwargs) -> dict: - """ - The asynchronous WebSocket method return account balance. - More info - https://wsrucaptcha.docs.apiary.io/#reference/text-captcha - :param captcha_image_base64: Image captcha base64 data in string format (decoded in utf-8) - :param kwargs: Options variables - :return: Server response dict - """ - normal_captcha_payload = NormalCaptchaSocketSer( - **{ - "method": "normal", - "requestId": str(uuid4()), - "body": captcha_image_base64, - "options": CaptchaOptionsSocketSer(**kwargs), - } - ) - - return await self.send_request(normal_captcha_payload.dict()) -''' From f0550c25af268e3afcd41016411e09987e59def2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:36:29 +0300 Subject: [PATCH 065/175] Update test_control.py --- tests/test_control.py | 271 +++++++----------------------------------- 1 file changed, 40 insertions(+), 231 deletions(-) diff --git a/tests/test_control.py b/tests/test_control.py index 334eb5c2..16d677e9 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -1,8 +1,9 @@ +import random + import pytest from tests.conftest import BaseTest from python_rucaptcha.control import Control -from python_rucaptcha.core.enums import ControlEnm from python_rucaptcha.core.serializer import GetTaskResultResponseSer @@ -12,279 +13,87 @@ class TestControl(BaseTest): """ def test_methods_exists(self): - assert "domain_control" in Control.__dict__.keys() - assert "aio_domain_control" in Control.__dict__.keys() - assert "report" in Control.__dict__.keys() - assert "aio_report" in Control.__dict__.keys() - assert "additional_methods" in Control.__dict__.keys() - assert "aio_additional_methods" in Control.__dict__.keys() + assert "reportCorrect" in Control.__dict__.keys() + assert "aio_reportCorrect" in Control.__dict__.keys() + assert "reportIncorrect" in Control.__dict__.keys() + assert "aio_reportIncorrect" in Control.__dict__.keys() + assert "getBalance" in Control.__dict__.keys() + assert "getBalance" in Control.__dict__.keys() def test_get_balance(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GETBALANCE.value + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) - result = instance.additional_methods() + result = instance.getBalance() assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert float(result["captchaSolve"]) > 1 - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["balance"] > 1 + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_get_balance(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GETBALANCE.value + with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert instance.getBalance() @pytest.mark.asyncio async def test_aio_get_balance(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GETBALANCE.value + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) - result = await instance.aio_additional_methods() + result = await instance.aio_getBalance() assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert float(result["captchaSolve"]) > 1 - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["balance"] > 1 + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_context_get_balance(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GETBALANCE.value - - def test_get_solution(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET.value - - result = instance.additional_methods(ids={self.get_random_string(5)}) - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - def test_context_get_solution(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET.value - - @pytest.mark.asyncio - async def test_aio_get_solution(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET.value - - result = await instance.aio_additional_methods(ids=self.get_random_string(5)) - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_context_get_solution(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET.value - - def test_get_cost(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET2.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET2.value - - result = instance.additional_methods(ids=f"{self.get_random_string(5)},{self.get_random_string(5)}") - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID|ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - def test_context_get_cost(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET2.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET2.value - - @pytest.mark.asyncio - async def test_aio_get_cost(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET2.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET2.value - - result = await instance.aio_additional_methods(ids=f"{self.get_random_string(5)},{self.get_random_string(5)}") - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - assert result["captchaSolve"] == "ERROR_NO_SUCH_CAPCHA_ID|ERROR_NO_SUCH_CAPCHA_ID" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_context_get_cost(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.GET2.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.GET2.value - - def test_domains_clean(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.DEL_PINGBACK.value - - result = instance.domain_control(addr="all") - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert result["captchaSolve"] == "OK" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - def test_context_domains_clean(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.DEL_PINGBACK.value - - @pytest.mark.asyncio - async def test_aio_domains_clean(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.DEL_PINGBACK.value - - result = await instance.aio_domain_control(addr="all") - - assert isinstance(result, dict) is True - assert result["error"] is False - assert result["taskId"] is None - assert result["errorBody"] is None - assert result["captchaSolve"] == "OK" - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_context_domains_clean(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.DEL_PINGBACK.value + async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert await instance.aio_getBalance() """ Failed tests """ - def test_wrong_action(self): - with pytest.raises(ValueError): - Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=self.get_random_string(5)) - - def test_context_wrong_action(self): - with pytest.raises(ValueError): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=self.get_random_string(5)): - pass - - @pytest.mark.asyncio - async def test_aio_context_wrong_action(self): - with pytest.raises(ValueError): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=self.get_random_string(5)): - pass - - @pytest.mark.asyncio - async def test_aio_wrong_action(self): - with pytest.raises(ValueError): - Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=self.get_random_string(5)) - def test_report_bad(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTBAD.value - - result = instance.report(id=self.get_random_string(5)) - + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) + result = instance.reportIncorrect(id=random.randint(20, 50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" - assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_report_bad(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTBAD.value + with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert instance.reportIncorrect(id=random.randint(20, 50)) @pytest.mark.asyncio async def test_aio_report_bad(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTBAD.value - - result = await instance.aio_report(id=self.get_random_string(5)) - + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) + result = await instance.aio_reportIncorrect(id=random.randint(20, 50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" - assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_context_report_bad(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTBAD.value + async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert await instance.aio_reportIncorrect(id=random.randint(20, 50)) def test_report_good(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTGOOD.value - - result = instance.report(id=self.get_random_string(5)) - + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) + result = instance.reportCorrect(id=random.randint(20, 50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" - assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_report_good(self): - with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTGOOD.value + with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert instance.reportCorrect(id=random.randint(20, 50)) @pytest.mark.asyncio async def test_aio_report_good(self): - instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTGOOD.value + instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) - result = await instance.aio_report(id=self.get_random_string(5)) + result = await instance.aio_reportCorrect(id=random.randint(20, 50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == "ERROR_WRONG_CAPTCHA_ID" - assert isinstance(result["captchaSolve"], dict) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_context_report_good(self): - async with Control(rucaptcha_key=self.RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.params.action == ControlEnm.REPORTGOOD.value + async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: + assert await instance.aio_reportCorrect(id=random.randint(20, 50)) From 04fdeef178f0ee5d81250460e4126c38c8fd30b5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:36:32 +0300 Subject: [PATCH 066/175] Update test_image.py --- tests/test_image.py | 222 +++++++------------------------------------- 1 file changed, 33 insertions(+), 189 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index a3cc6398..0a5bc89e 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -1,7 +1,7 @@ import pytest -from tests.conftest import BaseTest, DeathByTest -from python_rucaptcha.core.enums import ServiceEnm, SaveFormatsEnm +from tests.conftest import BaseTest +from python_rucaptcha.core.enums import SaveFormatsEnm from python_rucaptcha.image_captcha import ImageCaptcha from python_rucaptcha.core.serializer import GetTaskResultResponseSer @@ -12,6 +12,16 @@ class BaseImageCaptcha(BaseTest): class TestImageCaptcha(BaseImageCaptcha): + kwargs_params = { + "phrase": False, + "case": True, + "numeric": 0, + "math": False, + "minLength": 0, + "maxLength": 0, + "comment": "None", + "imgInstructions": "None", + } """ Success tests """ @@ -19,11 +29,21 @@ class TestImageCaptcha(BaseImageCaptcha): def test_methods_exists(self): assert "captcha_handler" in ImageCaptcha.__dict__.keys() assert "aio_captcha_handler" in ImageCaptcha.__dict__.keys() + instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + + def test_args(self): + instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + + def test_kwargs(self): + instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, **self.kwargs_params) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True @@ -39,7 +59,6 @@ def test_basic_link(self, save_format): @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True @@ -56,8 +75,6 @@ def test_basic_file(self, save_format): def test_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = instance.captcha_handler(captcha_base64=f.read()) @@ -70,13 +87,13 @@ def test_basic_base64(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY + result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True @@ -87,13 +104,13 @@ async def test_aio_basic_link(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY + result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True @@ -104,15 +121,13 @@ async def test_aio_basic_file(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = await instance.aio_captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True @@ -124,7 +139,7 @@ async def test_aio_basic_base64(self, save_format): else: assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ Fail tests @@ -132,35 +147,31 @@ async def test_aio_basic_base64(self, save_format): def test_no_captcha(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler() assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_base64(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True assert result["errorId"] == 15 @@ -169,185 +180,18 @@ def test_wrong_base64(self): @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["errorId"] == 12 assert isinstance(result["solution"]["text"], str) is True - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY result = await instance.aio_captcha_handler( captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8") ) assert isinstance(result, dict) is True assert result["errorId"] == 15 assert result["taskId"] is None - - -class XTestDeathByImageCaptcha(BaseImageCaptcha, DeathByTest): - """ - Success tests - """ - - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - def test_basic_data_link(self, save_format): - instance = ImageCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha", save_format=save_format - ) - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = instance.captcha_handler(captcha_link=self.captcha_url) - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - def test_basic_data_file(self, save_format): - instance = ImageCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha", save_format=save_format - ) - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = instance.captcha_handler(captcha_file=self.captcha_file) - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - async def test_aio_basic_data_link(self, save_format): - instance = ImageCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha", save_format=save_format - ) - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) - async def test_aio_basic_data_file(self, save_format): - instance = ImageCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha", save_format=save_format - ) - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_NO_SLOT_AVAILABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - """ - Fail tests - """ - - def test_no_captcha(self): - instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = instance.captcha_handler() - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_no_captcha(self): - instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = await instance.aio_captcha_handler() - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == ImageCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - def test_wrong_link(self): - instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_wrong_link(self): - instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, service_type="deathbycaptcha") - - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - - result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() From 2c4d7b7e3c93fb7b6babfe0e36f1d5f3abef6489 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:36:35 +0300 Subject: [PATCH 067/175] Update test_text.py --- tests/test_text.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/test_text.py b/tests/test_text.py index 11792270..dba50af9 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -16,11 +16,15 @@ def test_methods_exists(self): assert "captcha_handler" in TextCaptcha.__dict__.keys() assert "aio_captcha_handler" in TextCaptcha.__dict__.keys() + def test_args(self): + instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + @pytest.mark.parametrize("lang_code, question", questions) def test_basic(self, lang_code: str, question: str): instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, languagePool=lang_code) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY result = instance.captcha_handler(textcaptcha=question) @@ -34,15 +38,13 @@ def test_basic(self, lang_code: str, question: str): assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("lang_code, question", questions) async def test_aio_basic(self, lang_code, question): instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, languagePool=lang_code) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(textcaptcha=question) assert isinstance(result, dict) is True @@ -55,7 +57,7 @@ async def test_aio_basic(self, lang_code, question): assert result["errorId"] == 1 assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ Fail tests From 67dd4958412cbf58d729e684cbf09faed1dfbd0f Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:38:22 +0300 Subject: [PATCH 068/175] Update text_captcha.py --- src/python_rucaptcha/text_captcha.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/python_rucaptcha/text_captcha.py b/src/python_rucaptcha/text_captcha.py index b7e2b406..cf98fa97 100644 --- a/src/python_rucaptcha/text_captcha.py +++ b/src/python_rucaptcha/text_captcha.py @@ -2,7 +2,6 @@ from .core.base import BaseCaptcha from .core.enums import TextCaptchaEnm -from .core.serializer import TextCaptchaTaskSer class TextCaptcha(BaseCaptcha): @@ -100,7 +99,7 @@ def captcha_handler(self, textcaptcha: str, **kwargs) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).to_dict()}) + self.create_task_payload["task"].update({"comment": textcaptcha}) return self._processing_response(**kwargs) async def aio_captcha_handler(self, textcaptcha: str) -> dict: @@ -116,5 +115,5 @@ async def aio_captcha_handler(self, textcaptcha: str) -> dict: Notes: Check class docstirng for more info """ - self.create_task_payload.update({"task": TextCaptchaTaskSer(comment=textcaptcha).to_dict()}) + self.create_task_payload["task"].update({"comment": textcaptcha}) return await self._aio_processing_response() From b3171fa5b92236643304415a831191e1b0981567 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:38:24 +0300 Subject: [PATCH 069/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 667f13df..76219ed5 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -82,13 +82,3 @@ class GetTaskResultResponseSer(MyBaseModel, ErrorFieldsSer): taskId: int = None # control method params balance: float = None - - -""" -Captcha tasks serializers -""" - - -class TextCaptchaTaskSer(TaskSer): - comment: str = None - type: str = "TextCaptchaTask" From 086e2611c2e33716f87e8a03f5626046d3db270a Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:41:44 +0300 Subject: [PATCH 070/175] Update test_core.py --- tests/test_core.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index edd4bbed..4d80fad3 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -5,8 +5,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.base import BaseCaptcha from python_rucaptcha.core.enums import MyEnum, GeetestEnm -from python_rucaptcha.core.config import APP_KEY, RETRIES, ASYNC_RETRIES, attempts_generator -from python_rucaptcha.core.serializer import PostRequestSer +from python_rucaptcha.core.config import RETRIES, ASYNC_RETRIES, attempts_generator class TestMain(BaseTest): @@ -126,14 +125,3 @@ def test_attempts_generator(self): for attempt in attempts: assert isinstance(attempt, int) assert attempt == 4 - - -class TestSer(BaseTest): - def test_soft_id(self): - instance = PostRequestSer(key=self.get_random_string(length=5), method=self.get_random_string(length=5)) - assert instance.soft_id == APP_KEY - - def test_soft_id_change(self): - with pytest.raises(ValueError): - instance = PostRequestSer(key=self.get_random_string(length=5), method=self.get_random_string(length=5)) - instance.soft_id = self.get_random_string(length=5) From 9953f43aa0d9ba2fe86af2a3af36b774733b611c Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:46:52 +0300 Subject: [PATCH 071/175] Update build.yml --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 229984dc..9567cdf9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v4 From fc1ae4772cc95e2b02ba429a8150202e1dd5619e Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:46:54 +0300 Subject: [PATCH 072/175] Update install.yml --- .github/workflows/install.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index db8e05dc..b621c017 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v4 From 520605ac16195e7605f198bbfd17ba918e1bf72e Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:46:56 +0300 Subject: [PATCH 073/175] Update lint.yml --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d5785c28..b17b4a65 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.11"] steps: - uses: actions/checkout@v4 From c34a9fb1c958dbb166ec6d88b8778fe2ab00d267 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:46:58 +0300 Subject: [PATCH 074/175] Update test.yml --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b176e30..f93cccf8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v4 From cb058876e7f021fa1668ba4388306840911d582f Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:46:59 +0300 Subject: [PATCH 075/175] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb34280e..89377ab3 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Is described in the [documentation-website](https://andreidrang.github.io/python For full changelog info check - [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). -- v.6.0 - Library refactoring. Stop using `pydantic`, start using `msgspec`. Move to API v2. More details at [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). +- v.6.0 - Library refactoring. Stop using `pydantic`, start using `msgspec`. Move to API v2. Drop Python 3.8 support. More details at [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). - v.5.3 - Added support for [Death By Captcha](https://www.deathbycaptcha.com?refid=1237267242) and other services by changing `service_type` and `url_request` \ `url_response` parameters. - v.5.2 - Added Audio captcha method. - v.5.1 - Check [releases page](https://github.com/AndreiDrang/python-rucaptcha/releases). From 64765befefe9cbffc83040841150785a4b8497ee Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:47:03 +0300 Subject: [PATCH 076/175] Update config.py --- src/python_rucaptcha/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/config.py b/src/python_rucaptcha/core/config.py index 60bd2458..3e8b5c8d 100644 --- a/src/python_rucaptcha/core/config.py +++ b/src/python_rucaptcha/core/config.py @@ -8,7 +8,7 @@ # Connection retry generator -def attempts_generator(amount: int = 5): +def attempts_generator(amount: int = 15): """ Function generates a generator of length equal to `amount` From c5e3295dae3ae9c0fc5ba521c13559ab566a2ebe Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:47:05 +0300 Subject: [PATCH 077/175] Update result_handler.py --- src/python_rucaptcha/core/result_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/result_handler.py b/src/python_rucaptcha/core/result_handler.py index 15763019..936c1e70 100644 --- a/src/python_rucaptcha/core/result_handler.py +++ b/src/python_rucaptcha/core/result_handler.py @@ -15,7 +15,7 @@ def get_sync_result(get_payload: GetTaskResultRequestSer, sleep_time: int, url_r Function periodically send the SYNC request to service and wait for captcha solving result """ # generator for repeated attempts to connect to the server - attempts = attempts_generator(amount=10) + attempts = attempts_generator() for _ in attempts: try: # send a request for the result of solving the captcha From 5e6e4adca752d89fbb26274c1a97ee467c1db883 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:47:12 +0300 Subject: [PATCH 078/175] Update setup.py --- src/setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/setup.py b/src/setup.py index d2648cd4..f2e1117c 100644 --- a/src/setup.py +++ b/src/setup.py @@ -15,7 +15,7 @@ URL = "https://andreidrang.github.io/python-rucaptcha/" EMAIL = "python-captcha@pm.me" AUTHOR = "AndreiDrang, redV0ID" -REQUIRES_PYTHON = ">=3.7.0" +REQUIRES_PYTHON = ">=3.9.0" VERSION = __version__ with open("requirements.txt", "rt") as requirements_txt: REQUIRED = [str(requirement) for requirement in parse_requirements(requirements_txt)] @@ -125,7 +125,6 @@ def run(self): "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", From 233aa2eb709f65d348b01ff9a7f5b822ed922697 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 19:47:16 +0300 Subject: [PATCH 079/175] Update test_text.py --- tests/test_text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_text.py b/tests/test_text.py index dba50af9..912f6935 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -35,7 +35,7 @@ def test_basic(self, lang_code: str, question: str): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 + assert result["errorId"] in (1, 12) assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -54,7 +54,7 @@ async def test_aio_basic(self, lang_code, question): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 + assert result["errorId"] in (1, 12) assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From aba401c57eb3db81480c9c3b2f5849e42d817fd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:14:54 +0000 Subject: [PATCH 080/175] [github-actions] Bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/install.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/sphinx.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 229984dc..fa21d9ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index db8e05dc..edbd046c 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d5785c28..b92cd7ac 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -29,7 +29,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml index 8cabeeaa..3f131ae4 100644 --- a/.github/workflows/sphinx.yml +++ b/.github/workflows/sphinx.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 - name: Build docs requirements run: pip install -r docs/requirements.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b176e30..b6357431 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} From 85290aa6639e17d7117d29ddd678b26c3e226050 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:15:51 +0300 Subject: [PATCH 081/175] Update test_text.py --- tests/test_text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_text.py b/tests/test_text.py index 912f6935..d456e79a 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -36,7 +36,7 @@ def test_basic(self, lang_code: str, question: str): assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -55,7 +55,7 @@ async def test_aio_basic(self, lang_code, question): assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 94d79ee8f5b5a1552329294847ce3a9aa95272b0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:15:54 +0300 Subject: [PATCH 082/175] Update test_image.py --- tests/test_image.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/test_image.py b/tests/test_image.py index 0a5bc89e..fae34246 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -53,8 +53,8 @@ def test_basic_link(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_file(self, save_format): @@ -68,8 +68,8 @@ def test_basic_file(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_base64(self, save_format): @@ -85,8 +85,8 @@ def test_basic_base64(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -102,8 +102,8 @@ async def test_aio_basic_link(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -119,8 +119,8 @@ async def test_aio_basic_file(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -137,8 +137,8 @@ async def test_aio_basic_base64(self, save_format): assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True else: - assert result["errorId"] == 1 - assert result["status"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ From 20a52b49f2cdfa4c064d555ea4add6c1b1385749 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:18:39 +0300 Subject: [PATCH 083/175] Update test_core.py --- tests/test_core.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 4d80fad3..361a8486 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -4,7 +4,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.base import BaseCaptcha -from python_rucaptcha.core.enums import MyEnum, GeetestEnm +from python_rucaptcha.core.enums import MyEnum, ControlEnm from python_rucaptcha.core.config import RETRIES, ASYNC_RETRIES, attempts_generator @@ -20,28 +20,28 @@ def test_async_reties(self): assert isinstance(ASYNC_RETRIES, AsyncRetrying) def test_context_class_create(self): - with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=GeetestEnm.GEETEST.value) as bc: + with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=ControlEnm.control.value) as bc: pass def test_class_create(self): - bc = BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=GeetestEnm.GEETEST.value) + bc = BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=ControlEnm.control.value) @pytest.mark.asyncio async def test_aio_context_class_create(self): - async with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=GeetestEnm.GEETEST.value) as bc: + async with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=ControlEnm.control.value) as bc: pass def test_custom_service(self): bc = BaseCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - method=GeetestEnm.GEETEST.value, + method=ControlEnm.control.value, service_type=self.get_random_string(length=10), ) def test_context_custom_service(self): with BaseCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - method=GeetestEnm.GEETEST.value, + method=ControlEnm.control.value, service_type=self.get_random_string(length=10), ) as bc: pass @@ -50,7 +50,7 @@ def test_context_custom_service(self): def test_context_custom_service_api_key(self, elements): with BaseCaptcha( rucaptcha_key=self.get_random_string(elements), - method=GeetestEnm.GEETEST.value, + method=ControlEnm.control.value, service_type=self.get_random_string(length=10), ): pass @@ -59,7 +59,7 @@ def test_context_custom_service_api_key(self, elements): def test_custom_service_api_key(self, elements): BaseCaptcha( rucaptcha_key=self.get_random_string(elements), - method=GeetestEnm.GEETEST.value, + method=ControlEnm.control.value, service_type=self.get_random_string(length=10), ) @@ -68,7 +68,7 @@ def test_custom_service_api_key(self, elements): async def test_aio_context_custom_service_api_key(self, elements): async with BaseCaptcha( rucaptcha_key=self.get_random_string(elements), - method=GeetestEnm.GEETEST.value, + method=ControlEnm.control.value, service_type=self.get_random_string(length=10), ): pass @@ -91,19 +91,19 @@ async def test_aio_context_err(self): @pytest.mark.parametrize("elements", [31, 33]) def test_context_failed_api_key(self, elements): with pytest.raises(ValueError): - with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=GeetestEnm.GEETEST.value): + with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value): pass @pytest.mark.parametrize("elements", [31, 33]) def test_failed_api_key(self, elements): with pytest.raises(ValueError): - BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=GeetestEnm.GEETEST.value) + BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value) @pytest.mark.asyncio @pytest.mark.parametrize("elements", [31, 33]) async def test_aio_context_failed_api_key(self, elements): with pytest.raises(ValueError): - async with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=GeetestEnm.GEETEST.value): + async with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value): pass From 93e33fab898bd8aad4c68bed2089104752c2be1c Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:18:42 +0300 Subject: [PATCH 084/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 76219ed5..8cc1c1cd 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -6,7 +6,7 @@ from .config import APP_KEY PositiveInt = Annotated[int, Meta(ge=5)] -MinLenStr = Annotated[int, Meta(min_length=10)] +MinLenStr = Annotated[int, Meta(min_length=32, max_length=32)] class MyBaseModel(Struct): From d1d562abb16b65476c67417819229ae1c1b7f9f0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:24:00 +0300 Subject: [PATCH 085/175] Update test_core.py --- tests/test_core.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 361a8486..5cef10a1 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -88,24 +88,6 @@ async def test_aio_context_err(self): async with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method="some_method") as instance: raise ValueError - @pytest.mark.parametrize("elements", [31, 33]) - def test_context_failed_api_key(self, elements): - with pytest.raises(ValueError): - with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value): - pass - - @pytest.mark.parametrize("elements", [31, 33]) - def test_failed_api_key(self, elements): - with pytest.raises(ValueError): - BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value) - - @pytest.mark.asyncio - @pytest.mark.parametrize("elements", [31, 33]) - async def test_aio_context_failed_api_key(self, elements): - with pytest.raises(ValueError): - async with BaseCaptcha(rucaptcha_key=self.get_random_string(elements), method=ControlEnm.control.value): - pass - class TestEnum(BaseTest): def test_enum_list(self): From 7203f521a25bc0e8628e5c2788f76c2ceabcbbc4 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:24:03 +0300 Subject: [PATCH 086/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 8cc1c1cd..87f5c200 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -1,13 +1,10 @@ -from typing import Literal, Optional, Annotated +from typing import Literal, Optional -from msgspec import Meta, Struct +from msgspec import Struct from . import enums from .config import APP_KEY -PositiveInt = Annotated[int, Meta(ge=5)] -MinLenStr = Annotated[int, Meta(min_length=32, max_length=32)] - class MyBaseModel(Struct): def to_dict(self): @@ -42,7 +39,7 @@ class GetTaskResultRequestSer(MyBaseModel): class CaptchaOptionsSer(MyBaseModel): - sleep_time: PositiveInt = 10 + sleep_time: int = 10 service_type: enums.ServiceEnm = enums.ServiceEnm.TWOCAPTCHA.value url_request: Optional[str] = None From d145c57bb5a61578f56c182048720242869e9c4a Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:33:13 +0300 Subject: [PATCH 087/175] Update audio_captcha.py --- src/python_rucaptcha/audio_captcha.py | 63 ++++++--------------------- 1 file changed, 14 insertions(+), 49 deletions(-) diff --git a/src/python_rucaptcha/audio_captcha.py b/src/python_rucaptcha/audio_captcha.py index 6a5ff739..038654fc 100644 --- a/src/python_rucaptcha/audio_captcha.py +++ b/src/python_rucaptcha/audio_captcha.py @@ -4,6 +4,7 @@ from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, AudioCaptchaEnm +from .core.serializer import GetTaskResultResponseSer class AudioCaptcha(BaseCaptcha): @@ -77,12 +78,13 @@ def __init__( https://rucaptcha.com/api-rucaptcha#audio """ - super().__init__(method=AudioCaptchaEnm.AUDIO.value, *args, **kwargs) + super().__init__(method=AudioCaptchaEnm.AudioTask.value, *args, **kwargs) self.save_format = save_format self.audio_clearing = audio_clearing self.audio_path = audio_path + self.result = GetTaskResultResponseSer() - self.post_payload.update({"lang": lang}) + self.create_task_payload["task"].update({"lang": lang}) def captcha_handler( self, @@ -100,27 +102,6 @@ def captcha_handler( captcha_base64: Captcha file BASE64 info kwargs: additional params for `requests` library - Examples: - >>> AudioCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... lang='en' - ... ).captcha_handler(captcha_file='examples/mediacaptcha_audio/recaptcha_55914.mp3') - { - 'captchaSolve': 'five five nine one four', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None - } - - >>> AudioCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... lang='en' - ... ).captcha_handler(captcha_link='http://some/link/address/recaptcha_55914.mp3') - { - 'captchaSolve': 'five five nine one four', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response @@ -129,10 +110,12 @@ def captcha_handler( """ # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: @@ -145,7 +128,7 @@ def captcha_handler( # according to the value of the passed parameter, select the function to save the file if self.save_format == SaveFormatsEnm.CONST.value: self._file_const_saver(content, self.audio_path, file_extension="mp3") - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: # if none of the parameters are passed @@ -171,26 +154,6 @@ async def aio_captcha_handler( captcha_base64: Captcha file BASE64 kwargs: additional params for `aiohttp` library - Examples: - >>> await AudioCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... lang='en' - ... ).aio_captcha_handler(captcha_file='examples/mediacaptcha_audio/recaptcha_55914.mp3') - { - 'captchaSolve': 'five five nine one four', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None - } - >>> await AudioCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... lang='en' - ... ).aio_captcha_handler(captcha_link='http://some/link/address/recaptcha_55914.mp3') - { - 'captchaSolve': 'five five nine one four', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response @@ -199,10 +162,12 @@ async def aio_captcha_handler( """ # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: @@ -215,7 +180,7 @@ async def aio_captcha_handler( # according to the value of the passed parameter, select the function to save the file if self.save_format == SaveFormatsEnm.CONST.value: self._file_const_saver(content, self.audio_path, file_extension="mp3") - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: # if none of the parameters are passed From fbd270be8f809ae82d1f3c9101635b4ac6ca78de Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:33:21 +0300 Subject: [PATCH 088/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 84bf1c2d..7bb1cc32 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -102,4 +102,4 @@ class TextCaptchaEnm(str, MyEnum): class AudioCaptchaEnm(str, MyEnum): - AUDIO = "audio" + AudioTask = "AudioTask" From ccff95b738edfed8edf7c98a17a524471df6db07 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 20:33:26 +0300 Subject: [PATCH 089/175] Update test_audio.py --- tests/test_audio.py | 173 ++++++++++++++++---------------------------- 1 file changed, 64 insertions(+), 109 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index 2f170006..e595d710 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -18,130 +18,116 @@ def test_methods_exists(self): assert "captcha_handler" in AudioCaptcha.__dict__.keys() assert "aio_captcha_handler" in AudioCaptcha.__dict__.keys() + def test_args(self): + instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_file(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_link(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_link=self.captcha_link) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) def test_basic_data_base64(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = instance.captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_file(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_link(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_link=self.captcha_link) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_base64(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = await instance.aio_captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["token"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ Fail tests @@ -150,108 +136,77 @@ async def test_aio_basic_data_base64(self, save_format): def test_no_captcha(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == AudioCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} - - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["errorBody"] == AudioCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_path(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with pytest.raises(FileNotFoundError): - result = instance.captcha_handler(captcha_file=self.get_random_string(length=50)) - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + instance.captcha_handler(captcha_file=self.get_random_string(length=50)) def test_wrong_base64(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY + result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) + assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_path(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with pytest.raises(FileNotFoundError): - result = await instance.aio_captcha_handler(captcha_file=self.get_random_string(length=50)) - - assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + await instance.aio_captcha_handler(captcha_file=self.get_random_string(length=50)) @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY + result = await instance.aio_captcha_handler( captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8") ) + assert isinstance(result, dict) is True - assert result["error"] is True - assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result["errorId"] == 12 + assert isinstance(result["solution"]["token"], str) is True + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 97a429bb7561dd12b6e9d540a380923dea7780fe Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:04:52 +0300 Subject: [PATCH 090/175] ypd tests --- src/python_rucaptcha/TikTokCaptcha.py | 2 +- src/python_rucaptcha/audio_captcha.py | 28 +++++++++---------- src/python_rucaptcha/capy_puzzle.py | 2 +- src/python_rucaptcha/fun_captcha.py | 2 +- src/python_rucaptcha/gee_test.py | 6 ++-- src/python_rucaptcha/hcaptcha.py | 2 +- src/python_rucaptcha/image_captcha.py | 11 ++++---- src/python_rucaptcha/key_captcha.py | 2 +- src/python_rucaptcha/lemin_cropped_captcha.py | 2 +- src/python_rucaptcha/re_captcha.py | 2 +- src/python_rucaptcha/rotate_captcha.py | 26 ++++++++++------- src/python_rucaptcha/yandex_smart_captcha.py | 2 +- tests/test_image.py | 8 +++--- 13 files changed, 51 insertions(+), 44 deletions(-) diff --git a/src/python_rucaptcha/TikTokCaptcha.py b/src/python_rucaptcha/TikTokCaptcha.py index eb41fe48..0876303c 100644 --- a/src/python_rucaptcha/TikTokCaptcha.py +++ b/src/python_rucaptcha/TikTokCaptcha.py @@ -21,7 +21,7 @@ def __init__( raise DeprecationWarning("This method is temporarily not supported.".upper()) super().__init__(method=method, *args, **kwargs) - self.post_payload.update( + self.create_task_payload["task"].update( { "pageurl": pageurl, "cookies": cookies, diff --git a/src/python_rucaptcha/audio_captcha.py b/src/python_rucaptcha/audio_captcha.py index 038654fc..56e18dda 100644 --- a/src/python_rucaptcha/audio_captcha.py +++ b/src/python_rucaptcha/audio_captcha.py @@ -121,9 +121,10 @@ def captcha_handler( try: content = self.url_open(url=captcha_link, **kwargs).content except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - return self.result.dict() + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) + return self.result.to_dict() # according to the value of the passed parameter, select the function to save the file if self.save_format == SaveFormatsEnm.CONST.value: @@ -131,10 +132,9 @@ def captcha_handler( self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: - # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.dict() + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + return self.result.to_dict() return self._processing_response(**kwargs) @@ -173,9 +173,10 @@ async def aio_captcha_handler( try: content = await self.aio_url_read(url=captcha_link, **kwargs) except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - return self.result.dict() + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) + return self.result.to_dict() # according to the value of the passed parameter, select the function to save the file if self.save_format == SaveFormatsEnm.CONST.value: @@ -183,10 +184,9 @@ async def aio_captcha_handler( self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: - # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.dict() + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + return self.result.to_dict() return await self._aio_processing_response() diff --git a/src/python_rucaptcha/capy_puzzle.py b/src/python_rucaptcha/capy_puzzle.py index cd4ac770..27eff53f 100644 --- a/src/python_rucaptcha/capy_puzzle.py +++ b/src/python_rucaptcha/capy_puzzle.py @@ -76,7 +76,7 @@ def __init__(self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CA """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"captchakey": captchakey, "pageurl": pageurl}) + self.create_task_payload["task"].update({"captchakey": captchakey, "pageurl": pageurl}) # check user params if method not in CapyPuzzleEnm.list_values(): diff --git a/src/python_rucaptcha/fun_captcha.py b/src/python_rucaptcha/fun_captcha.py index 39e0ae00..7400a861 100644 --- a/src/python_rucaptcha/fun_captcha.py +++ b/src/python_rucaptcha/fun_captcha.py @@ -35,7 +35,7 @@ def __init__(self, pageurl: str, publickey: str, method: str = FunCaptchaEnm.FUN """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"publickey": publickey, "pageurl": pageurl}) + self.create_task_payload["task"].update({"publickey": publickey, "pageurl": pageurl}) # check user params if method not in FunCaptchaEnm.list_values(): diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index f1059fca..3fe14942 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -130,7 +130,7 @@ def __init__( raise ValueError(f"Invalid method parameter set, available - {GeetestEnm.list_values()}") # insert `gt` param to payload - self.post_payload.update({"gt": gt, "pageurl": pageurl, "captcha_id": captcha_id}) + self.create_task_payload["task"].update({"gt": gt, "pageurl": pageurl, "captcha_id": captcha_id}) if self.method == GeetestEnm.GEETEST_V4.value and captcha_id is None: raise ValueError(f"For {self.method} captcha_id is required") @@ -190,7 +190,7 @@ def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: """ if self.method == GeetestEnm.GEETEST.value: if challenge is not None: - self.post_payload.update({"challenge": challenge}) + self.create_task_payload["task"].update({"challenge": challenge}) else: raise ValueError(f"For {self.method} challenge is required") @@ -248,7 +248,7 @@ async def aio_captcha_handler(self, challenge: Optional[str] = None) -> dict: """ if self.method == GeetestEnm.GEETEST.value: if challenge is not None: - self.post_payload.update({"challenge": challenge}) + self.create_task_payload["task"].update({"challenge": challenge}) else: raise ValueError(f"For {self.method} challenge is required") diff --git a/src/python_rucaptcha/hcaptcha.py b/src/python_rucaptcha/hcaptcha.py index 9cdd361c..2eba1817 100644 --- a/src/python_rucaptcha/hcaptcha.py +++ b/src/python_rucaptcha/hcaptcha.py @@ -82,7 +82,7 @@ def __init__( """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"pageurl": pageurl, "sitekey": sitekey}) + self.create_task_payload["task"].update({"pageurl": pageurl, "sitekey": sitekey}) # check user params if method not in HCaptchaEnm.list_values(): diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index 29ed266e..3cd01cff 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -215,7 +215,8 @@ def captcha_handler( content = self.url_open(url=captcha_link, **kwargs).content except Exception as error: self.result.errorId = 12 - self.result.solution = {"text": str(error)} + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) return self.result.to_dict() # according to the value of the passed parameter, select the function to save the image @@ -226,7 +227,7 @@ def captcha_handler( else: # if none of the parameters are passed self.result.errorId = 12 - self.result.solution = {"text": "No captcha send"} + self.result.errorCode = self.NO_CAPTCHA_ERR return self.result.to_dict() return self._processing_response(**kwargs) @@ -267,7 +268,8 @@ async def aio_captcha_handler( content = await self.aio_url_read(url=captcha_link, **kwargs) except Exception as error: self.result.errorId = 12 - self.result.solution = {"text": str(error)} + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) return self.result.to_dict() # according to the value of the passed parameter, select the function to save the image @@ -276,9 +278,8 @@ async def aio_captcha_handler( self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) else: - # if none of the parameters are passed self.result.errorId = 12 - self.result.solution = {"text": "No captcha send"} + self.result.errorCode = self.NO_CAPTCHA_ERR return self.result.to_dict() return await self._aio_processing_response() diff --git a/src/python_rucaptcha/key_captcha.py b/src/python_rucaptcha/key_captcha.py index 2db08377..9329ab4f 100644 --- a/src/python_rucaptcha/key_captcha.py +++ b/src/python_rucaptcha/key_captcha.py @@ -66,7 +66,7 @@ def __init__( """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update( + self.create_task_payload["task"].update( { "pageurl": pageurl, "s_s_c_user_id": s_s_c_user_id, diff --git a/src/python_rucaptcha/lemin_cropped_captcha.py b/src/python_rucaptcha/lemin_cropped_captcha.py index cac3d3ba..7b04492f 100644 --- a/src/python_rucaptcha/lemin_cropped_captcha.py +++ b/src/python_rucaptcha/lemin_cropped_captcha.py @@ -66,7 +66,7 @@ def __init__( """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"pageurl": pageurl, "captcha_id": captcha_id, "div_id": div_id}) + self.create_task_payload["task"].update({"pageurl": pageurl, "captcha_id": captcha_id, "div_id": div_id}) # check user params if method not in LeminCroppedCaptchaEnm.list_values(): diff --git a/src/python_rucaptcha/re_captcha.py b/src/python_rucaptcha/re_captcha.py index ac27cc5c..6cd8cd04 100644 --- a/src/python_rucaptcha/re_captcha.py +++ b/src/python_rucaptcha/re_captcha.py @@ -115,7 +115,7 @@ def __init__( """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"googlekey": googlekey, "pageurl": pageurl, "version": version}) + self.create_task_payload["task"].update({"googlekey": googlekey, "pageurl": pageurl, "version": version}) # check user params if method not in ReCaptchaEnm.list_values(): diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index f3f83603..08a0639a 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -3,6 +3,7 @@ from .core.base import BaseCaptcha from .core.enums import RotateCaptchaEnm +from .core.serializer import GetTaskResultResponseSer class RotateCaptcha(BaseCaptcha): @@ -78,6 +79,7 @@ def __init__(self, method: str = RotateCaptchaEnm.ROTATECAPTCHA.value, *args, ** """ super().__init__(method=method, *args, **kwargs) + self.result = GetTaskResultResponseSer() # check user params if method not in RotateCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {RotateCaptchaEnm.list_values()}") @@ -117,25 +119,27 @@ def captcha_handler( # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: content = self.url_open(url=captcha_link, **kwargs).content - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) except Exception as error: self.result.error = True self.result.errorBody = str(error) - return self.result.dict() + return self.result.to_dict() else: # if none of the parameters are passed self.result.error = True self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.dict() + return self.result.to_dict() return self._processing_response(**kwargs) async def aio_captcha_handler( @@ -173,24 +177,26 @@ async def aio_captcha_handler( # if a local file link is passed if captcha_file: - self.post_payload.update({"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")}) + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) # if the file is transferred in base64 encoding elif captcha_base64: - self.post_payload.update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) # if a URL is passed elif captcha_link: try: content = await self.aio_url_read(url=captcha_link, **kwargs) - self.post_payload.update({"body": base64.b64encode(content).decode("utf-8")}) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) except Exception as error: self.result.error = True self.result.errorBody = str(error) - return self.result.dict() + return self.result.to_dict() else: # if none of the parameters are passed self.result.error = True self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.dict() + return self.result.to_dict() return await self._aio_processing_response() diff --git a/src/python_rucaptcha/yandex_smart_captcha.py b/src/python_rucaptcha/yandex_smart_captcha.py index 713fc1ff..25950857 100644 --- a/src/python_rucaptcha/yandex_smart_captcha.py +++ b/src/python_rucaptcha/yandex_smart_captcha.py @@ -69,7 +69,7 @@ def __init__(self, pageurl: str, sitekey: str, method: str = YandexSmartCaptchaE """ super().__init__(method=method, *args, **kwargs) - self.post_payload.update({"sitekey": sitekey, "pageurl": pageurl}) + self.create_task_payload["task"].update({"sitekey": sitekey, "pageurl": pageurl}) # check user params if method not in YandexSmartCaptchaEnm.list_values(): diff --git a/tests/test_image.py b/tests/test_image.py index fae34246..defd9a2c 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -150,7 +150,7 @@ def test_no_captcha(self): result = instance.captcha_handler() assert isinstance(result, dict) is True assert result["errorId"] == 12 - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -159,7 +159,7 @@ async def test_aio_no_captcha(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True assert result["errorId"] == 12 - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): @@ -167,7 +167,7 @@ def test_wrong_link(self): result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["errorId"] == 12 - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_base64(self): @@ -183,7 +183,7 @@ async def test_aio_wrong_link(self): result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["errorId"] == 12 - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio From 129540e119b8fc73189a10d4b68c8756a9f0ee48 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:34:42 +0300 Subject: [PATCH 091/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 34 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 7bb1cc32..0ada0e1c 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -32,8 +32,8 @@ class SaveFormatsEnm(str, MyEnum): class GeetestEnm(str, MyEnum): - GEETEST = "geetest" - GEETEST_V4 = "geetest_v4" + GeeTestTask = "GeeTestTask" + GeeTestTaskProxyless = "GeeTestTaskProxyless" class ImageCaptchaEnm(str, MyEnum): @@ -41,31 +41,42 @@ class ImageCaptchaEnm(str, MyEnum): class CapyPuzzleEnm(str, MyEnum): - CAPY = "capy" + CapyTask = "CapyTask" + CapyTaskProxyless = "CapyTaskProxyless" class FunCaptchaEnm(str, MyEnum): - FUNCAPTCHA = "funcaptcha" + FunCaptchaTaskProxyless = "FunCaptchaTaskProxyless" + FunCaptchaTask = "FunCaptchaTask" class ReCaptchaEnm(str, MyEnum): - USER_RECAPTCHA = "userrecaptcha" + RecaptchaV2TaskProxyless = "RecaptchaV2TaskProxyless" + RecaptchaV2Task = "RecaptchaV2Task" + + RecaptchaV2EnterpriseTaskProxyless = "RecaptchaV2EnterpriseTaskProxyless" + RecaptchaV2EnterpriseTask = "RecaptchaV2EnterpriseTask" + + RecaptchaV3TaskProxyless = "RecaptchaV3TaskProxyless" class LeminCroppedCaptchaEnm(str, MyEnum): - LEMIN = "lemin" + LeminTaskProxyless = "LeminTaskProxyless" + LeminTask = "LeminTask" class HCaptchaEnm(str, MyEnum): - HCAPTCHA = "hcaptcha" + HCaptchaTask = "HCaptchaTask" + HCaptchaTaskProxyless = "HCaptchaTaskProxyless" class KeyCaptchaEnm(str, MyEnum): - KEYCAPTCHA = "keycaptcha" + KeyCaptchaTask = "KeyCaptchaTask" + KeyCaptchaTaskProxyless = "KeyCaptchaTaskProxyless" class RotateCaptchaEnm(str, MyEnum): - ROTATECAPTCHA = "rotatecaptcha" + RotateTask = "RotateTask" class TikTokCaptchaEnm(str, MyEnum): @@ -82,12 +93,7 @@ class ControlEnm(str, MyEnum): reportIncorrect = "reportIncorrect" -class YandexSmartCaptchaEnm(str, MyEnum): - YANDEX = "yandex" - - class TurnstileCaptchaEnm(str, MyEnum): - TURNSTILE = "turnstile" TurnstileTaskProxyless = "TurnstileTaskProxyless" TurnstileTask = "TurnstileTask" From 74406a606b85315d38169bdbeac2bde848f75780 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:34:46 +0300 Subject: [PATCH 092/175] Delete yandex_smart_captcha.py --- src/python_rucaptcha/yandex_smart_captcha.py | 127 ------------------- 1 file changed, 127 deletions(-) delete mode 100644 src/python_rucaptcha/yandex_smart_captcha.py diff --git a/src/python_rucaptcha/yandex_smart_captcha.py b/src/python_rucaptcha/yandex_smart_captcha.py deleted file mode 100644 index 25950857..00000000 --- a/src/python_rucaptcha/yandex_smart_captcha.py +++ /dev/null @@ -1,127 +0,0 @@ -from .core.base import BaseCaptcha -from .core.enums import YandexSmartCaptchaEnm - - -class YandexSmartCaptcha(BaseCaptcha): - def __init__(self, pageurl: str, sitekey: str, method: str = YandexSmartCaptchaEnm.YANDEX.value, *args, **kwargs): - """ - The class is used to work with Yandex Smart Captcha - - Args: - rucaptcha_key: User API key - pageurl: Full URL of the captcha page - sitekey: The value of the `data-sitekey` parameter found on the site - method: Captcha type - kwargs: Not required params for task creation request - - Examples: - >>> YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9", - ... method=YandexSmartCaptchaEnm.YANDEX.value, - ... ).captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" - ... ).captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> await YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9", - ... method=YandexSmartCaptchaEnm.YANDEX.value, - ... ).aio_captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> await YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" - ... ).aio_captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - Returns: - Dict with full server response - - Notes: - https://rucaptcha.com/api-rucaptcha#yandex - """ - super().__init__(method=method, *args, **kwargs) - - self.create_task_payload["task"].update({"sitekey": sitekey, "pageurl": pageurl}) - - # check user params - if method not in YandexSmartCaptchaEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {YandexSmartCaptchaEnm.list_values()}") - - def captcha_handler(self, **kwargs): - """ - Sync solving method - - Args: - kwargs: Parameters for the `requests` library - - Examples: - >>> YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" - ... ).captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - Returns: - Dict with full server response - - Notes: - Check class docstirng for more info - """ - return self._processing_response(**kwargs) - - async def aio_captcha_handler(self): - """ - Async solving method - - Examples: - >>> await YandexSmartCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://captcha-api.yandex.ru/demo", - ... sitekey="FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" - ... ).aio_captcha_handler() - { - "captchaSolve": "dD0x....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - Returns: - Dict with full server response - - Notes: - Check class docstirng for more info - """ - return await self._aio_processing_response() From 3f9c98b7ae8caa8e1a3ccd7a5ff62067610c34ec Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:34:49 +0300 Subject: [PATCH 093/175] Update test_audio.py --- tests/test_audio.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index e595d710..4e238e24 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -150,8 +150,7 @@ async def test_aio_no_captcha(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True + assert result["errorId"] == 5 assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): @@ -160,8 +159,7 @@ def test_wrong_link(self): result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True + assert result["errorId"] == 5 assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_path(self): @@ -176,8 +174,7 @@ def test_wrong_base64(self): result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True + assert result["errorId"] == 5 assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -188,7 +185,6 @@ async def test_aio_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -207,6 +203,5 @@ async def test_aio_wrong_base64(self): ) assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True + assert result["errorId"] == 5 assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 430475a611ea4802c9b5eaaac9d020259d2f2880 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:50:56 +0300 Subject: [PATCH 094/175] Update capy_puzzle.py --- src/python_rucaptcha/capy_puzzle.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/python_rucaptcha/capy_puzzle.py b/src/python_rucaptcha/capy_puzzle.py index 27eff53f..9e4736e0 100644 --- a/src/python_rucaptcha/capy_puzzle.py +++ b/src/python_rucaptcha/capy_puzzle.py @@ -3,7 +3,9 @@ class CapyPuzzle(BaseCaptcha): - def __init__(self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CAPY.value, *args, **kwargs): + def __init__( + self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CapyTaskProxyless.value, *args, **kwargs + ): """ The class is used to work with CapyPuzzle. @@ -17,7 +19,7 @@ def __init__(self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CA >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).captcha_handler() @@ -35,7 +37,7 @@ def __init__(self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CA >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="AVATAR_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="avatar", ... ).captcha_handler() @@ -53,7 +55,7 @@ def __init__(self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CA >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method="capy", + ... method="CapyTaskProxyless", ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).captcha_handler() @@ -93,7 +95,7 @@ def captcha_handler(self, **kwargs): >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).captcha_handler() @@ -111,7 +113,7 @@ def captcha_handler(self, **kwargs): >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="avatar", ... ).captcha_handler() @@ -143,7 +145,7 @@ async def aio_captcha_handler(self): >>> await CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).aio_captcha_handler() @@ -161,7 +163,7 @@ async def aio_captcha_handler(self): >>> await CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CAPY.value, + ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="avatar", ... ).aio_captcha_handler() From 026b725ae1aaeff010c35b1a7bdfc499a5add4be Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:50:58 +0300 Subject: [PATCH 095/175] Update fun_captcha.py --- src/python_rucaptcha/fun_captcha.py | 36 ++++------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/src/python_rucaptcha/fun_captcha.py b/src/python_rucaptcha/fun_captcha.py index 7400a861..71a8aff3 100644 --- a/src/python_rucaptcha/fun_captcha.py +++ b/src/python_rucaptcha/fun_captcha.py @@ -3,7 +3,9 @@ class FunCaptcha(BaseCaptcha): - def __init__(self, pageurl: str, publickey: str, method: str = FunCaptchaEnm.FUNCAPTCHA.value, *args, **kwargs): + def __init__( + self, pageurl: str, publickey: str, method: str = FunCaptchaEnm.FunCaptchaTaskProxyless.value, *args, **kwargs + ): """ The class is used to work with Arkose Labs FunCaptcha. @@ -18,7 +20,7 @@ def __init__(self, pageurl: str, publickey: str, method: str = FunCaptchaEnm.FUN ... pageurl="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", ... publickey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", ... surl="https://client-api.arkoselabs.com", - ... method=FunCaptchaEnm.FUNCAPTCHA.value + ... method=FunCaptchaEnm.FunCaptchaTaskProxyless.value ... ).captcha_handler() { "captchaSolve": "23217....ger", @@ -48,21 +50,6 @@ def captcha_handler(self, **kwargs): Args: kwargs: additional params for `requests` library - Examples: - >>> FunCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", - ... publickey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", - ... method=FunCaptchaEnm.FUNCAPTCHA.value, - ... surl="https://client-api.arkoselabs.com", - ... userAgent="some-user-agent" - ... ).captcha_handler() - { - "captchaSolve": "23217....ger", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response @@ -75,21 +62,6 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> await FunCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", - ... publickey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", - ... method=FunCaptchaEnm.FUNCAPTCHA.value, - ... surl="https://client-api.arkoselabs.com", - ... userAgent="some-user-agent" - ... ).aio_captcha_handler() - { - "captchaSolve": "23217....ger", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response From 4736d633fdad3eea1bfdca14271be3174da31b78 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:51:00 +0300 Subject: [PATCH 096/175] Update gee_test.py --- src/python_rucaptcha/gee_test.py | 125 +++++++------------------------ 1 file changed, 29 insertions(+), 96 deletions(-) diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index 3fe14942..f22a130b 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Union, Optional from .core.base import BaseCaptcha from .core.enums import GeetestEnm @@ -7,10 +7,11 @@ class GeeTest(BaseCaptcha): def __init__( self, - pageurl: str, - method: str, - gt: Optional[str] = None, - captcha_id: Optional[str] = None, + websiteURL: str, + method: Union[GeetestEnm, str], + gt: str, + version: int = 3, + initParameters: dict = None, *args, **kwargs, ): @@ -19,9 +20,11 @@ def __init__( Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page + websiteURL: Full URL of the captcha page gt: The value of the `gt` parameter found on the site - captcha_id: The value of the `captcha_id` parameter found on the site + version: GeeTest V4 captcha should be set to 4. + initParameters: Required for GeeTest V4. The parameter that is passed in the initGeetest4 function call must contain the captcha_id value. + Example of usage: { "captcha_id" : "e392e1d7fd421dc63325744d5a2b9c73"} method: Captcha type kwargs: Not required params for task creation request @@ -38,7 +41,7 @@ def __init__( >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... gt=resp_data["gt"], ... pageurl="https://www.geetest.com/en/demo", - ... method=GeetestEnm.GEETEST.value, + ... method=GeetestEnm.GeeTestTaskProxyless.value, ... api_server="api.geetest.com", ... new_captcha=1, ... ).captcha_handler(challenge=resp_data["challenge"]) @@ -65,7 +68,7 @@ def __init__( >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... gt=resp_data["gt"], ... pageurl="https://www.geetest.com/en/demo", - ... method=GeetestEnm.GEETEST.value, + ... method=GeetestEnm.GeeTestTaskProxyless.value, ... api_server="api.geetest.com", ... new_captcha=1, ... ).aio_captcha_handler(challenge=resp_data["challenge"]) @@ -83,7 +86,7 @@ def __init__( >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", ... pageurl="https://rucaptcha.com/demo/geetest-v4", - ... method=GeetestEnm.GEETEST_V4.value, + ... method=GeetestEnm.GeeTestTaskProxyless.value, ... ).captcha_handler() { "captchaSolve": { @@ -101,7 +104,7 @@ def __init__( >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", ... pageurl="https://rucaptcha.com/demo/geetest-v4", - ... method=GeetestEnm.GEETEST_V4.value, + ... method=GeetestEnm.GeeTestTaskProxyless.value, ... ).aio_captcha_handler() { "captchaSolve": { @@ -120,8 +123,7 @@ def __init__( Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_geetest - https://rucaptcha.com/api-rucaptcha#geetest-v4 + https://rucaptcha.com/api-docs/geetest """ self.method = method super().__init__(method=self.method, *args, **kwargs) @@ -130,12 +132,17 @@ def __init__( raise ValueError(f"Invalid method parameter set, available - {GeetestEnm.list_values()}") # insert `gt` param to payload - self.create_task_payload["task"].update({"gt": gt, "pageurl": pageurl, "captcha_id": captcha_id}) + self.create_task_payload["task"].update( + { + "websiteURL": websiteURL, + "gt": gt, + "version": version, + "initParameters": initParameters, + } + ) - if self.method == GeetestEnm.GEETEST_V4.value and captcha_id is None: - raise ValueError(f"For {self.method} captcha_id is required") - elif self.method == GeetestEnm.GEETEST.value and gt is None: - raise ValueError(f"For {self.method} gt is required") + if method not in GeetestEnm.list_values(): + raise ValueError(f"Invalid method parameter set, available - {GeetestEnm.list_values()}") def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: """ @@ -145,50 +152,13 @@ def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: challenge: The value of the challenge parameter found on the site kwargs: Parameters for the `requests` library - Examples: - >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... gt="022397c99c9f646f6477822485f30404", - ... pageurl="https://rucaptcha.com/demo/geetest", - ... method=GeetestEnm.GEETEST.value, - ... api_server="api.geetest.com", - ... ).captcha_handler(challenge="537b31c6ff5d2bcfa9d1b75e099edcb2") - { - "captchaSolve": { - "geetest_challenge": "1ad03db8aff920037fb8117827eab171gu", - "geetest_validate": "011309d29dab6e98e8fc3784a95469cc", - "geetest_seccode": "011309d29dab6e98e8fc3784a95469cc|jordan" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", - ... pageurl="https://rucaptcha.com/demo/geetest-v4", - ... method=GeetestEnm.GEETEST_V4.value, - ... ).captcha_handler() - { - "captchaSolve": { - "captcha_id": "e39....73", - "lot_number": "1b....bd2", - "pass_token": "f3b....de7f", - "gen_time": "1678558017", - "captcha_output": "c3rHzKl....TE=", - }, - "taskId": 73052314114, - "error": False, - "errorBody": "None", - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_geetest - https://rucaptcha.com/api-rucaptcha#geetest-v4 + Check class docstirng for more info """ - if self.method == GeetestEnm.GEETEST.value: + if self.method == GeetestEnm.GeeTestTaskProxyless.value: if challenge is not None: self.create_task_payload["task"].update({"challenge": challenge}) else: @@ -203,50 +173,13 @@ async def aio_captcha_handler(self, challenge: Optional[str] = None) -> dict: Args: challenge: The value of the challenge parameter found on the site - Examples: - >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... gt="022397c99c9f646f6477822485f30404", - ... pageurl="https://rucaptcha.com/demo/geetest", - ... method=GeetestEnm.GEETEST.value, - ... api_server="api.geetest.com", - ... ).aio_captcha_handler(challenge="537b31c6ff5d2bcfa9d1b75e099edcb2") - { - "captchaSolve": { - "geetest_challenge": "1ad03db8aff920037fb8117827eab171gu", - "geetest_validate": "011309d29dab6e98e8fc3784a95469cc", - "geetest_seccode": "011309d29dab6e98e8fc3784a95469cc|jordan" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", - ... pageurl="https://rucaptcha.com/demo/geetest-v4", - ... method=GeetestEnm.GEETEST_V4.value, - ... ).aio_captcha_handler() - { - "captchaSolve": { - "captcha_id": "e39....73", - "lot_number": "1b....bd2", - "pass_token": "f3b....de7f", - "gen_time": "1678558017", - "captcha_output": "c3rHzKl....TE=", - }, - "taskId": 73052314114, - "error": False, - "errorBody": "None", - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_geetest - https://rucaptcha.com/api-rucaptcha#geetest-v4 + Check class docstirng for more info """ - if self.method == GeetestEnm.GEETEST.value: + if self.method == GeetestEnm.GeeTestTaskProxyless.value: if challenge is not None: self.create_task_payload["task"].update({"challenge": challenge}) else: From e2f7ac921c7105bc826b940a76c18c226f17a518 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:51:04 +0300 Subject: [PATCH 097/175] Update test_audio.py --- tests/test_audio.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index 4e238e24..b9e5ec34 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -139,9 +139,7 @@ def test_no_captcha(self): result = instance.captcha_handler() assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert isinstance(result["solution"]["token"], str) is True - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result["errorId"] in (12, 5) @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -150,7 +148,7 @@ async def test_aio_no_captcha(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["errorId"] == 5 + assert result["errorId"] in (12, 5) assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): @@ -159,7 +157,7 @@ def test_wrong_link(self): result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["errorId"] == 5 + assert result["errorId"] in (12, 5) assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_path(self): @@ -174,8 +172,7 @@ def test_wrong_base64(self): result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True - assert result["errorId"] == 5 - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result["errorId"] in (12, 5) @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -184,8 +181,7 @@ async def test_aio_wrong_link(self): result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["errorId"] == 12 - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result["errorId"] in (12, 5) @pytest.mark.asyncio async def test_aio_wrong_path(self): @@ -203,5 +199,4 @@ async def test_aio_wrong_base64(self): ) assert isinstance(result, dict) is True - assert result["errorId"] == 5 - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result["errorId"] in (12, 5) From 0794fd7c13865ed3dea543a525776821b090d58c Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 21:55:06 +0300 Subject: [PATCH 098/175] upd enums --- src/python_rucaptcha/SocketAPI.py | 104 ------------------ src/python_rucaptcha/TikTokCaptcha.py | 59 ---------- src/python_rucaptcha/hcaptcha.py | 36 +----- src/python_rucaptcha/key_captcha.py | 14 +-- src/python_rucaptcha/lemin_cropped_captcha.py | 46 +------- src/python_rucaptcha/re_captcha.py | 40 ++----- src/python_rucaptcha/rotate_captcha.py | 26 +---- 7 files changed, 27 insertions(+), 298 deletions(-) delete mode 100644 src/python_rucaptcha/SocketAPI.py delete mode 100644 src/python_rucaptcha/TikTokCaptcha.py diff --git a/src/python_rucaptcha/SocketAPI.py b/src/python_rucaptcha/SocketAPI.py deleted file mode 100644 index 87618784..00000000 --- a/src/python_rucaptcha/SocketAPI.py +++ /dev/null @@ -1,104 +0,0 @@ -''' -class WebSocketRuCaptcha(BaseCaptcha): - def __init__(self, allSessions: bool = False, suppressSuccess: bool = True): - """ - Method setup WebSocket connection data - :param allSessions: `True` if u need send the results of solving captchas to all open sessions. - `False` if u will wait captcha result in current session. - :param suppressSuccess: `False` if u need intermediate info about your task in RuCaptcha system. - `True` if u need final answer without any addition info. - More info - https://wsrucaptcha.docs.apiary.io/#reference/0 - """ - self.sock: WebSocketClientProtocol = None - self.result = SocketResponse() - self.auth_result = SocketResponse() - - self.allSessions = allSessions or False - self.suppressSuccess = suppressSuccess or True - # RuCaptcha auth params check - if not self.allSessions and not self.suppressSuccess: - raise ValueError( - f"U set allSessions to `{self.allSessions}` and suppressSuccess to `{self.suppressSuccess}`.\n" - f"U will not able to get the final result of captcha solving, cause u close the current socket session " - f"but wait for the result ONLY in the current session(already closed).\n" - f"Try other param variants:\n" - f"\tlike default False/True(u will get an answer in this session for this captcha)\n" - f"\tor True/False(u will get info about the current captcha task and then get captcha solution in all " - f"opened sessions)" - ) - - self.URL = "wss://s.2captcha.com/" - # WebSocket SSL setup - self.ssl_context = ssl.create_default_context() - self.ssl_context.check_hostname = False - self.ssl_context.verify_mode = ssl.CERT_NONE - - async def __socket_session_close(self): - """ - Method close exist socket session - """ - if self.sock: - await self.sock.close() - - async def __socket_session(self): - """ - Create new socket session - """ - self.sock = await websockets.connect(self.URL, ssl=self.ssl_context) - - async def __socket_session_recreate(self): - """ - If socket session not exist - create it - """ - # if socket not exist - if not self.sock: - await self.__socket_session() - # if socket exist but closed - elif self.sock.closed: - await self.__socket_session_close() - await self.__socket_session() - - async def __auth(self): - """ - Method setup connection with RuCaptcha and auth user - """ - await self.__socket_session_recreate() - - auth_data = SockAuthSer( - **{ - "key": self.rucaptcha_key, - "options": {"allSessions": self.allSessions, "suppressSuccess": self.suppressSuccess}, - } - ) - await self.sock.send(auth_data.json()) - self.auth_result = self.auth_result.parse_raw(await self.sock.recv()) - - @retry(wait=wait_fixed(5), stop=stop_after_attempt(3), after=after_log(logging, logging.ERROR), reraise=True) - async def get_request(self) -> dict: - """ - Method send GET request and write result to response model - :return: server response info, serialized to dict without NONE values - """ - await self.__socket_session_recreate() - - response = await self.sock.recv() - await self.__socket_session_close() - - return self.result.parse_raw(response).dict(exclude_none=True) - - @retry(wait=wait_fixed(5), stop=stop_after_attempt(3), after=after_log(logging, logging.ERROR), reraise=True) - async def send_request(self, payload: str) -> dict: - """ - Method send request to server and wait response - :param payload: JSON payload with data - :return: Server response dict - """ - await self.__auth() - # check if auth is success - if self.auth_result.success: - await self.sock.send(payload) - return await self.get_request() - else: - await self.__socket_session_close() - return self.auth_result.dict(exclude_none=True) -''' diff --git a/src/python_rucaptcha/TikTokCaptcha.py b/src/python_rucaptcha/TikTokCaptcha.py deleted file mode 100644 index 0876303c..00000000 --- a/src/python_rucaptcha/TikTokCaptcha.py +++ /dev/null @@ -1,59 +0,0 @@ -from .core.base import BaseCaptcha -from .core.enums import TikTokCaptchaEnm - - -class TikTokCaptcha(BaseCaptcha): - def __init__( - self, - pageurl: str, - cookies: str, - aid: str, - host: str, - method: str = TikTokCaptchaEnm.TIKTOK.value, - *args, - **kwargs, - ): - """ - The class is used to work with TikTokCaptcha. - Solve description: - https://rucaptcha.com/api-rucaptcha#solving_tiktok - """ - raise DeprecationWarning("This method is temporarily not supported.".upper()) - super().__init__(method=method, *args, **kwargs) - - self.create_task_payload["task"].update( - { - "pageurl": pageurl, - "cookies": cookies, - "aid": aid, - "host": host, - } - ) - - # check user params - if method not in TikTokCaptchaEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {TikTokCaptchaEnm.list_values()}") - - def captcha_handler(self, **kwargs): - """ - The method is responsible for sending data to the server to solve the captcha - :param kwargs: Parameters for the `requests` library - :return: Response to captcha as JSON string with fields: - captchaSolve - captcha solution, - taskId - finds the ID of the task to solve the captcha, - error - False - if everything is fine, True - if there is an error, - errorBody - error name - """ - - return self._processing_response(**kwargs) - - async def aio_captcha_handler(self): - """ - The method is responsible for sending data to the server to solve the captcha - :return: Response to captcha as JSON string with fields: - captchaSolve - captcha solution, - taskId - finds the ID of the task to solve the captcha, - error - False - if everything is fine, True - if there is an error, - errorBody - error name - """ - return await self._aio_processing_response() diff --git a/src/python_rucaptcha/hcaptcha.py b/src/python_rucaptcha/hcaptcha.py index 2eba1817..2ce56b1f 100644 --- a/src/python_rucaptcha/hcaptcha.py +++ b/src/python_rucaptcha/hcaptcha.py @@ -7,7 +7,7 @@ def __init__( self, sitekey: str, pageurl: str, - method: str = HCaptchaEnm.HCAPTCHA.value, + method: str = HCaptchaEnm.HCaptchaTaskProxyless.value, *args, **kwargs, ): @@ -25,7 +25,7 @@ def __init__( >>> HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value + ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).captcha_handler() { "captchaSolve": "P1_eyJ.....cp_J", @@ -37,7 +37,7 @@ def __init__( >>> await HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value + ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).aio_captcha_handler() { "captchaSolve": "P1_eyJ.....cp_J", @@ -52,7 +52,7 @@ def __init__( ... service_type="deathbycaptcha", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value + ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).captcha_handler() { 'captchaSolve': '03A....8h', @@ -65,7 +65,7 @@ def __init__( ... service_type="deathbycaptcha", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value + ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).aio_captcha_handler() { 'captchaSolve': '03A....8h', @@ -95,19 +95,6 @@ def captcha_handler(self, **kwargs): Args: kwargs: Parameters for the `requests` library - Examples: - >>> HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value - ... ).captcha_handler() - { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response @@ -121,19 +108,6 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> await HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCAPTCHA.value - ... ).aio_captcha_handler() - { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response diff --git a/src/python_rucaptcha/key_captcha.py b/src/python_rucaptcha/key_captcha.py index 9329ab4f..2fa74f84 100644 --- a/src/python_rucaptcha/key_captcha.py +++ b/src/python_rucaptcha/key_captcha.py @@ -10,7 +10,7 @@ def __init__( s_s_c_session_id: str, s_s_c_web_server_sign: str, s_s_c_web_server_sign2: str, - method: str = KeyCaptchaEnm.KEYCAPTCHA.value, + method: str = KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, *args, **kwargs, ): @@ -34,7 +34,7 @@ def __init__( ... s_s_c_session_id="0917788cad24ad3a69813c4fcd556061", ... s_s_c_web_server_sign="02f7f9669f1269595c4c69bcd4a3c52e", ... s_s_c_web_server_sign2="d888700f6f324ec0f32b44c32c50bde1", - ... method=KeyCaptchaEnm.KEYCAPTCHA.value + ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value ... ).captcha_handler() { "captchaSolve": "d58....61|1", @@ -49,7 +49,7 @@ def __init__( ... s_s_c_session_id="0917788cad24ad3a69813c4fcd556061", ... s_s_c_web_server_sign="02f7f9669f1269595c4c69bcd4a3c52e", ... s_s_c_web_server_sign2="d888700f6f324ec0f32b44c32c50bde1", - ... method=KeyCaptchaEnm.KEYCAPTCHA.value + ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value ... ).aio_captcha_handler() { "captchaSolve": "P1_eyJ.....cp_J", @@ -91,7 +91,7 @@ def captcha_handler(self, **kwargs): >>> KeyCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=KeyCaptchaEnm.KEYCAPTCHA.value + ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value ... ).captcha_handler() { "captchaSolve": "P1_eyJ.....cp_J", @@ -104,7 +104,7 @@ def captcha_handler(self, **kwargs): Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_hcaptcha + Check class docstirng for more info """ return self._processing_response(**kwargs) @@ -117,7 +117,7 @@ async def aio_captcha_handler(self): >>> KeyCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=KeyCaptchaEnm.KEYCAPTCHA.value + ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value ... ).captcha_handler() { "captchaSolve": "P1_eyJ.....cp_J", @@ -130,6 +130,6 @@ async def aio_captcha_handler(self): Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_hcaptcha + Check class docstirng for more info """ return await self._aio_processing_response() diff --git a/src/python_rucaptcha/lemin_cropped_captcha.py b/src/python_rucaptcha/lemin_cropped_captcha.py index 7b04492f..520b22da 100644 --- a/src/python_rucaptcha/lemin_cropped_captcha.py +++ b/src/python_rucaptcha/lemin_cropped_captcha.py @@ -8,7 +8,7 @@ def __init__( pageurl: str, captcha_id: str, div_id: str, - method: str = LeminCroppedCaptchaEnm.LEMIN.value, + method: str = LeminCroppedCaptchaEnm.LeminTaskProxyless.value, *args, **kwargs, ): @@ -28,7 +28,7 @@ def __init__( ... pageurl="https://dashboard.leminnow.com/auth/signup", ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LEMIN.value, + ... method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ... api_server="api.leminnow.com" ... ).captcha_handler() { @@ -45,7 +45,7 @@ def __init__( ... pageurl="https://dashboard.leminnow.com/auth/signup", ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LEMIN.value, + ... method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ... api_server="api.leminnow.com" ... ).aio_captcha_handler() { @@ -79,29 +79,11 @@ def captcha_handler(self, **kwargs): Args: kwargs: Parameters for the `requests` library - Examples: - >>> LeminCroppedCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://dashboard.leminnow.com/auth/signup", - ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", - ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LEMIN.value, - ... api_server="api.leminnow.com" - ... ).captcha_handler() - { - "captchaSolve": { - "answer":"0xc....EUa", - "challenge_id":"58.....63a" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#lemin + Check class docstirng for more info """ return self._processing_response(**kwargs) @@ -109,28 +91,10 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> LeminCroppedCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://dashboard.leminnow.com/auth/signup", - ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", - ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LEMIN.value, - ... api_server="api.leminnow.com" - ... ).captcha_handler() - { - "captchaSolve": { - "answer":"0xc....EUa", - "challenge_id":"58.....63a" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#lemin + Check class docstirng for more info """ return await self._aio_processing_response() diff --git a/src/python_rucaptcha/re_captcha.py b/src/python_rucaptcha/re_captcha.py index 6cd8cd04..206959a8 100644 --- a/src/python_rucaptcha/re_captcha.py +++ b/src/python_rucaptcha/re_captcha.py @@ -10,7 +10,7 @@ def __init__( pageurl: str, googlekey: str, version: Optional[str] = None, - method: str = ReCaptchaEnm.USER_RECAPTCHA.value, + method: str = ReCaptchaEnm.RecaptchaV2TaskProxyless.value, *args, **kwargs, ): @@ -28,7 +28,7 @@ def __init__( >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value + ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).captcha_handler() { 'captchaSolve': '03A....8h', @@ -67,7 +67,7 @@ def __init__( >>> await ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value + ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).aio_captcha_handler() { 'captchaSolve': '03A....8h', @@ -82,7 +82,7 @@ def __init__( ... service_type="deathbycaptcha", ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value + ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).captcha_handler() { 'captchaSolve': '03A....8h', @@ -95,7 +95,7 @@ def __init__( ... service_type="deathbycaptcha", ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value + ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).aio_captcha_handler() { 'captchaSolve': '03A....8h', @@ -128,24 +128,11 @@ def captcha_handler(self, **kwargs): Args: kwargs: additional params for `requests` library - Examples: - >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value - ... ).captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ return self._processing_response(**kwargs) @@ -153,23 +140,10 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> await ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.USER_RECAPTCHA.value - ... ).aio_captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ return await self._aio_processing_response() diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index 08a0639a..30c5a18d 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -12,7 +12,7 @@ class RotateCaptcha(BaseCaptcha): Solve description: """ - def __init__(self, method: str = RotateCaptchaEnm.ROTATECAPTCHA.value, *args, **kwargs): + def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwargs): """ The class is used to work with Rotate Captcha. @@ -100,21 +100,11 @@ def captcha_handler( captcha_base64: Captcha image BASE64 info kwargs: additional params for `requests` library - Examples: - >>> RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... angle=45).captcha_handler(captcha_file="examples/rotate/rotate_ex.png") - { - 'captchaSolve': '125', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ # if a local file link is passed @@ -158,21 +148,11 @@ async def aio_captcha_handler( captcha_base64: Captcha image BASE64 info kwargs: additional params for `aiohttp` library - Examples: - >>> await RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... angle=45).aio_captcha_handler(captcha_file="examples/rotate/rotate_ex.png") - { - 'captchaSolve': '125', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ # if a local file link is passed From 8c119c14ef9f7b0f145f6a91549b7b6011fb8851 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 22:06:22 +0300 Subject: [PATCH 099/175] upd tests --- tests/test_amazon.py | 38 +++++----- tests/test_capypuzzle.py | 72 ++++++++---------- tests/test_funcaptcha.py | 74 +++++++++---------- tests/test_geetest.py | 152 +++++++++++++++++++------------------- tests/test_hcaptcha.py | 86 +++++++++++---------- tests/test_image.py | 2 +- tests/test_key_captcha.py | 74 +++++++++---------- tests/test_lemin.py | 54 +++++++------- tests/test_recaptcha.py | 86 +++++++++++---------- tests/test_rotate.py | 48 +++--------- tests/test_turnstile.py | 42 +++++------ tests/test_yandex.py | 112 ---------------------------- 12 files changed, 337 insertions(+), 503 deletions(-) delete mode 100644 tests/test_yandex.py diff --git a/tests/test_amazon.py b/tests/test_amazon.py index d56477be..b3e66512 100644 --- a/tests/test_amazon.py +++ b/tests/test_amazon.py @@ -22,34 +22,32 @@ def test_methods_exists(self): def test_basic_data(self): instance = AmazonWAF( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, iv=self.iv, context=self.context, - method=AmazonWAFCaptchaEnm.AMAZON_WAF.value, + method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == AmazonWAFCaptchaEnm.AMAZON_WAF.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - assert instance.post_payload["iv"] == self.iv - assert instance.post_payload["context"] == self.context + assert instance.create_task_payload["method"] == AmazonWAFCaptchaEnm.AmazonTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["iv"] == self.iv + assert instance.create_task_payload["context"] == self.context def test_context_basic_data(self): with AmazonWAF( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, iv=self.iv, context=self.context, - method=AmazonWAFCaptchaEnm.AMAZON_WAF.value, + method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == AmazonWAFCaptchaEnm.AMAZON_WAF.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - assert instance.post_payload["iv"] == self.iv - assert instance.post_payload["context"] == self.context + assert instance.create_task_payload["method"] == AmazonWAFCaptchaEnm.AmazonTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["iv"] == self.iv + assert instance.create_task_payload["context"] == self.context """ Fail tests @@ -59,8 +57,8 @@ def test_wrong_method(self): with pytest.raises(ValueError): AmazonWAF( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, iv=self.iv, context=self.context, method=self.get_random_string(5), diff --git a/tests/test_capypuzzle.py b/tests/test_capypuzzle.py index 00a12763..94c8423d 100644 --- a/tests/test_capypuzzle.py +++ b/tests/test_capypuzzle.py @@ -24,93 +24,85 @@ def test_basic_data(self): instance = CapyPuzzle( pageurl=self.pageurl, captchakey=self.captchakey, - method=CapyPuzzleEnm.CAPY.value, + method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == CapyPuzzleEnm.CAPY.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["version"] == self.versions[0] + assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["version"] == self.versions[0] result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], dict) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): instance = CapyPuzzle( pageurl=self.pageurl, captchakey=self.captchakey, - method=CapyPuzzleEnm.CAPY.value, + method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == CapyPuzzleEnm.CAPY.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["version"] == self.versions[0] + assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["version"] == self.versions[0] result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], dict) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with CapyPuzzle( pageurl=self.pageurl, captchakey=self.captchakey, - method=CapyPuzzleEnm.CAPY.value, + method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == CapyPuzzleEnm.CAPY.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["version"] == self.versions[0] + assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["version"] == self.versions[0] @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with CapyPuzzle( pageurl=self.pageurl, captchakey=self.captchakey, - method=CapyPuzzleEnm.CAPY.value, + method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == CapyPuzzleEnm.CAPY.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["version"] == self.versions[0] + assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["version"] == self.versions[0] """ Fail tests diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index a3f1fee0..d17b3be6 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -27,28 +27,26 @@ def test_basic_data(self): pageurl=self.pageurl, publickey=self.publickey, surl=self.surl, - method=FunCaptchaEnm.FUNCAPTCHA.value, + method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == FunCaptchaEnm.FUNCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["publickey"] == self.publickey - assert instance.post_payload["surl"] == self.surl + + assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["publickey"] == self.publickey + assert instance.create_task_payload["surl"] == self.surl result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -57,28 +55,26 @@ async def test_aio_basic_data(self): pageurl=self.pageurl, publickey=self.publickey, surl=self.surl, - method=FunCaptchaEnm.FUNCAPTCHA.value, + method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == FunCaptchaEnm.FUNCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["publickey"] == self.publickey - assert instance.post_payload["surl"] == self.surl + + assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["publickey"] == self.publickey + assert instance.create_task_payload["surl"] == self.surl result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with FunCaptcha( @@ -86,13 +82,12 @@ def test_context_basic_data(self): pageurl=self.pageurl, publickey=self.publickey, surl=self.surl, - method=FunCaptchaEnm.FUNCAPTCHA.value, + method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == FunCaptchaEnm.FUNCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["publickey"] == self.publickey - assert instance.post_payload["surl"] == self.surl + assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["publickey"] == self.publickey + assert instance.create_task_payload["surl"] == self.surl @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -101,13 +96,12 @@ async def test_context_aio_basic_data(self): pageurl=self.pageurl, publickey=self.publickey, surl=self.surl, - method=FunCaptchaEnm.FUNCAPTCHA.value, + method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == FunCaptchaEnm.FUNCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["publickey"] == self.publickey - assert instance.post_payload["surl"] == self.surl + assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["publickey"] == self.publickey + assert instance.create_task_payload["surl"] == self.surl """ Fail tests diff --git a/tests/test_geetest.py b/tests/test_geetest.py index a90e22a5..10943092 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -37,17 +37,17 @@ def test_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 result = instance.captcha_handler(challenge=self.challenge) @@ -56,24 +56,24 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 result = await instance.aio_captcha_handler(challenge=self.challenge) @@ -82,40 +82,38 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 """ Fail tests @@ -126,7 +124,7 @@ def test_wrong_method(self): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, method=self.get_random_string(length=5), ) @@ -135,9 +133,9 @@ def test_wrong_method_arg(self): with pytest.raises(ValueError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, - method=GeetestEnm.GEETEST.value, + method=GeetestEnm.GeeTestTaskProxyless.value, ) def test_empty_challenge(self): @@ -145,9 +143,9 @@ def test_empty_challenge(self): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, - method=GeetestEnm.GEETEST.value, + method=GeetestEnm.GeeTestTaskProxyless.value, ).captcha_handler() @pytest.mark.asyncio @@ -156,9 +154,9 @@ async def test_empty_challenge_aio(self): await GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, - method=GeetestEnm.GEETEST.value, + method=GeetestEnm.GeeTestTaskProxyless.value, ).aio_captcha_handler() @@ -167,17 +165,17 @@ def test_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 result = instance.captcha_handler(challenge=self.challenge) @@ -186,24 +184,24 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 result = await instance.aio_captcha_handler(challenge=self.challenge) @@ -212,40 +210,38 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert isinstance(result["errorBody"], str) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GEETEST.value, - pageurl=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + websiteURL=self.pageurl, api_server=self.api_server, new_captcha=1, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == GeetestEnm.GEETEST.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["api_server"] == self.api_server - assert instance.post_payload["gt"] == self.gt - assert instance.post_payload["new_captcha"] == 1 + assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["api_server"] == self.api_server + assert instance.create_task_payload["gt"] == self.gt + assert instance.create_task_payload["new_captcha"] == 1 """ Fail tests @@ -256,7 +252,7 @@ def test_wrong_method(self): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, captcha_id=self.get_random_string(length=5), - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, method=self.get_random_string(length=5), ) @@ -265,7 +261,7 @@ def test_wrong_method_arg(self): with pytest.raises(ValueError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, api_server=self.api_server, - method=GeetestEnm.GEETEST_V4.value, + method=GeetestEnm.GeeTestTaskProxyless.value, ) diff --git a/tests/test_hcaptcha.py b/tests/test_hcaptcha.py index d4107df7..263f2d64 100644 --- a/tests/test_hcaptcha.py +++ b/tests/test_hcaptcha.py @@ -25,12 +25,12 @@ def test_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = instance.captcha_handler() @@ -45,7 +45,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -53,12 +53,12 @@ async def test_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = await instance.aio_captcha_handler() @@ -73,19 +73,18 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -93,12 +92,11 @@ async def test_context_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey """ Fail tests @@ -125,13 +123,13 @@ def test_basic_data(self): service_type="deathbycaptcha", sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = instance.captcha_handler() @@ -146,7 +144,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -155,13 +153,13 @@ async def test_aio_basic_data(self): service_type="deathbycaptcha", sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = await instance.aio_captcha_handler() @@ -176,7 +174,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with HCaptcha( @@ -184,13 +182,13 @@ def test_context_basic_data(self): service_type="deathbycaptcha", sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -199,10 +197,10 @@ async def test_context_aio_basic_data(self): service_type="deathbycaptcha", sitekey=self.sitekey, pageurl=self.pageurl, - method=HCaptchaEnm.HCAPTCHA.value, + method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == HCaptchaEnm.HCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey diff --git a/tests/test_image.py b/tests/test_image.py index defd9a2c..f59a2ed1 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -130,8 +130,8 @@ async def test_aio_basic_base64(self, save_format): with open(self.captcha_file, "rb") as f: result = await instance.aio_captcha_handler(captcha_base64=f.read()) - assert isinstance(result, dict) is True + assert isinstance(result, dict) is True if not result["errorId"]: assert result["status"] == "ready" assert isinstance(result["solution"]["text"], str) is True diff --git a/tests/test_key_captcha.py b/tests/test_key_captcha.py index e1245193..b17c6743 100644 --- a/tests/test_key_captcha.py +++ b/tests/test_key_captcha.py @@ -29,15 +29,15 @@ def test_basic_data(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == KeyCaptchaEnm.KEYCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.post_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.post_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.post_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + + assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id + assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id + assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign + assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 result = instance.captcha_handler() @@ -51,7 +51,7 @@ def test_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -62,15 +62,15 @@ async def test_aio_basic_data(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == KeyCaptchaEnm.KEYCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.post_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.post_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.post_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + + assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id + assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id + assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign + assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 result = await instance.aio_captcha_handler() @@ -84,7 +84,7 @@ async def test_aio_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with KeyCaptcha( @@ -94,15 +94,14 @@ def test_context_basic_data(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == KeyCaptchaEnm.KEYCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.post_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.post_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.post_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id + assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id + assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign + assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -113,15 +112,14 @@ async def test_context_aio_basic_data(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == KeyCaptchaEnm.KEYCAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.post_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.post_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.post_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id + assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id + assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign + assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 """ Fail tests @@ -147,7 +145,7 @@ def test_no_pageurl(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) def test_no_s_s_c_user_id(self): @@ -158,7 +156,7 @@ def test_no_s_s_c_user_id(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) def test_no_s_s_c_web_server_sign(self): @@ -169,7 +167,7 @@ def test_no_s_s_c_web_server_sign(self): s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) def test_no_s_s_c_web_server_sign2(self): @@ -180,5 +178,5 @@ def test_no_s_s_c_web_server_sign2(self): s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, - method=KeyCaptchaEnm.KEYCAPTCHA.value, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) diff --git a/tests/test_lemin.py b/tests/test_lemin.py index 4ad1ddb0..c14325db 100644 --- a/tests/test_lemin.py +++ b/tests/test_lemin.py @@ -27,14 +27,14 @@ def test_basic_data(self): captcha_id=self.captcha_id, div_id=self.div_id, api_server=self.api_server, - method=LeminCroppedCaptchaEnm.LEMIN.value, + method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == LeminCroppedCaptchaEnm.LEMIN.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["captcha_id"] == self.captcha_id - assert instance.post_payload["div_id"] == self.div_id - assert instance.post_payload["api_server"] == self.api_server + + assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["captcha_id"] == self.captcha_id + assert instance.create_task_payload["div_id"] == self.div_id + assert instance.create_task_payload["api_server"] == self.api_server result = instance.captcha_handler() @@ -48,7 +48,7 @@ def test_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -58,14 +58,14 @@ async def test_aio_basic_data(self): captcha_id=self.captcha_id, div_id=self.div_id, api_server=self.api_server, - method=LeminCroppedCaptchaEnm.LEMIN.value, + method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == LeminCroppedCaptchaEnm.LEMIN.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["captcha_id"] == self.captcha_id - assert instance.post_payload["div_id"] == self.div_id - assert instance.post_payload["api_server"] == self.api_server + + assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["captcha_id"] == self.captcha_id + assert instance.create_task_payload["div_id"] == self.div_id + assert instance.create_task_payload["api_server"] == self.api_server result = await instance.aio_captcha_handler() @@ -79,7 +79,7 @@ async def test_aio_basic_data(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with LeminCroppedCaptcha( @@ -87,13 +87,12 @@ def test_context_basic_data(self): pageurl=self.pageurl, captcha_id=self.captcha_id, div_id=self.div_id, - method=LeminCroppedCaptchaEnm.LEMIN.value, + method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == LeminCroppedCaptchaEnm.LEMIN.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["captcha_id"] == self.captcha_id - assert instance.post_payload["div_id"] == self.div_id + assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["captcha_id"] == self.captcha_id + assert instance.create_task_payload["div_id"] == self.div_id @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -102,13 +101,12 @@ async def test_context_aio_basic_data(self): pageurl=self.pageurl, captcha_id=self.captcha_id, div_id=self.div_id, - method=LeminCroppedCaptchaEnm.LEMIN.value, + method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == LeminCroppedCaptchaEnm.LEMIN.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["captcha_id"] == self.captcha_id - assert instance.post_payload["div_id"] == self.div_id + assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["captcha_id"] == self.captcha_id + assert instance.create_task_payload["div_id"] == self.div_id """ Fail tests diff --git a/tests/test_recaptcha.py b/tests/test_recaptcha.py index 0b4ab2f0..26d3cf56 100644 --- a/tests/test_recaptcha.py +++ b/tests/test_recaptcha.py @@ -25,12 +25,12 @@ def test_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey result = instance.captcha_handler() @@ -45,7 +45,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -53,12 +53,12 @@ async def test_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey result = await instance.aio_captcha_handler() @@ -73,19 +73,18 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -93,12 +92,11 @@ async def test_context_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey """ Fail tests @@ -125,13 +123,13 @@ def test_basic_data(self): service_type="deathbycaptcha", pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey result = instance.captcha_handler() @@ -146,7 +144,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -155,13 +153,13 @@ async def test_aio_basic_data(self): service_type="deathbycaptcha", pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey result = await instance.aio_captcha_handler() @@ -176,7 +174,7 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with ReCaptcha( @@ -184,13 +182,13 @@ def test_context_basic_data(self): service_type="deathbycaptcha", pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -199,10 +197,10 @@ async def test_context_aio_basic_data(self): service_type="deathbycaptcha", pageurl=self.pageurl, googlekey=self.googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == ReCaptchaEnm.USER_RECAPTCHA.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["googlekey"] == self.googlekey + + assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["googlekey"] == self.googlekey diff --git a/tests/test_rotate.py b/tests/test_rotate.py index 8d1c22eb..a0b448f1 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -20,8 +20,6 @@ def test_methods_exists(self): def test_basic_data_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True @@ -34,13 +32,11 @@ def test_basic_data_link(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_basic_data_file(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True @@ -53,13 +49,11 @@ def test_basic_data_file(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_basic_data_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = instance.captcha_handler(captcha_base64=f.read()) @@ -73,14 +67,12 @@ def test_basic_data_base64(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True @@ -93,14 +85,12 @@ async def test_aio_basic_data_link(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_file(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True @@ -113,14 +103,12 @@ async def test_aio_basic_data_file(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - with open(self.captcha_file, "rb") as f: result = await instance.aio_captcha_handler(captcha_base64=f.read()) @@ -134,7 +122,7 @@ async def test_aio_basic_data_base64(self): assert result["error"] is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ Fail tests @@ -147,8 +135,6 @@ def test_wrong_method(self): def test_no_captcha(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler() assert isinstance(result, dict) is True @@ -157,14 +143,12 @@ def test_no_captcha(self): assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True @@ -172,54 +156,46 @@ async def test_aio_no_captcha(self): assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - result = await instance.aio_captcha_handler( captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8") ) @@ -228,4 +204,4 @@ async def test_aio_wrong_base64(self): assert result["error"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() diff --git a/tests/test_turnstile.py b/tests/test_turnstile.py index df9e7cfb..ac3c1230 100644 --- a/tests/test_turnstile.py +++ b/tests/test_turnstile.py @@ -23,12 +23,12 @@ def test_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, sitekey=self.sitekey, - method=TurnstileCaptchaEnm.TURNSTILE.value, + method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == TurnstileCaptchaEnm.TURNSTILE.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = instance.captcha_handler() @@ -43,7 +43,7 @@ def test_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): @@ -51,12 +51,12 @@ async def test_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, sitekey=self.sitekey, - method=TurnstileCaptchaEnm.TURNSTILE.value, + method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == TurnstileCaptchaEnm.TURNSTILE.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + + assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey result = await instance.aio_captcha_handler() @@ -71,19 +71,18 @@ async def test_aio_basic_data(self): assert isinstance(result["taskId"], int) is True assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, sitekey=self.sitekey, - method=TurnstileCaptchaEnm.TURNSTILE.value, + method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == TurnstileCaptchaEnm.TURNSTILE.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey @pytest.mark.asyncio async def test_context_aio_basic_data(self): @@ -91,12 +90,11 @@ async def test_context_aio_basic_data(self): rucaptcha_key=self.RUCAPTCHA_KEY, pageurl=self.pageurl, sitekey=self.sitekey, - method=TurnstileCaptchaEnm.TURNSTILE.value, + method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == TurnstileCaptchaEnm.TURNSTILE.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey + assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value + assert instance.create_task_payload["pageurl"] == self.pageurl + assert instance.create_task_payload["sitekey"] == self.sitekey """ Fail tests diff --git a/tests/test_yandex.py b/tests/test_yandex.py deleted file mode 100644 index d15fbe7b..00000000 --- a/tests/test_yandex.py +++ /dev/null @@ -1,112 +0,0 @@ -import pytest - -from tests.conftest import BaseTest -from python_rucaptcha.core.enums import YandexSmartCaptchaEnm -from python_rucaptcha.core.serializer import GetTaskResultResponseSer -from python_rucaptcha.yandex_smart_captcha import YandexSmartCaptcha - - -class TestYandexSmartCaptcha(BaseTest): - pageurl = "https://captcha-api.yandex.ru/demo" - sitekey = "FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" - - """ - Success tests - """ - - def test_methods_exists(self): - assert "captcha_handler" in YandexSmartCaptcha.__dict__.keys() - assert "aio_captcha_handler" in YandexSmartCaptcha.__dict__.keys() - - def test_basic_data(self): - instance = YandexSmartCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, - ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == YandexSmartCaptchaEnm.YANDEX.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - - result = instance.captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - @pytest.mark.asyncio - async def test_aio_basic_data(self): - instance = YandexSmartCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, - ) - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == YandexSmartCaptchaEnm.YANDEX.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - - result = await instance.aio_captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().dict().keys() - - def test_context_basic_data(self): - with YandexSmartCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, - ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == YandexSmartCaptchaEnm.YANDEX.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - - @pytest.mark.asyncio - async def test_context_aio_basic_data(self): - async with YandexSmartCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, - ) as instance: - assert instance.params.rucaptcha_key == self.RUCAPTCHA_KEY - assert instance.post_payload["method"] == YandexSmartCaptchaEnm.YANDEX.value - assert instance.post_payload["pageurl"] == self.pageurl - assert instance.post_payload["sitekey"] == self.sitekey - - """ - Fail tests - """ - - def test_wrong_method(self): - with pytest.raises(ValueError): - YandexSmartCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, - method=self.get_random_string(5), - ) From 68f221a6144c13b0b9eaa595a8b56b8f8a7abfc5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 22:06:30 +0300 Subject: [PATCH 100/175] Update Makefile --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 53b3f935..e4fbfbea 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,8 @@ upload: cd src/ && python setup.py upload tests: install - coverage run --rcfile=.coveragerc -m pytest --verbose --showlocals --pastebin=all tests --disable-warnings && \ + coverage run --rcfile=.coveragerc -m pytest --verbose --showlocals --pastebin=all \ + tests/ --disable-warnings && \ coverage report --precision=3 --sort=cover --skip-empty --show-missing && \ coverage html --precision=3 --skip-empty -d coverage/html/ && \ coverage xml -o coverage/coverage.xml From cda0108ff76879f14b3e293e6b379c29e2e9623e Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 22:50:39 +0300 Subject: [PATCH 101/175] Update gee_test.py --- src/python_rucaptcha/gee_test.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index f22a130b..32861f41 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -141,9 +141,6 @@ def __init__( } ) - if method not in GeetestEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {GeetestEnm.list_values()}") - def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: """ Sync solving method From 839fa6949b9f6b889e2cd9b6e58bfc4ed23870f9 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 22:50:45 +0300 Subject: [PATCH 102/175] Update test_geetest.py --- tests/test_geetest.py | 192 ++++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 102 deletions(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 10943092..27511965 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -3,7 +3,6 @@ from tests.conftest import BaseTest from python_rucaptcha.gee_test import GeeTest from python_rucaptcha.core.enums import GeetestEnm -from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestGeeTestBase(BaseTest): @@ -14,11 +13,13 @@ class TestGeeTestBase(BaseTest): class TestGeeTestCore(TestGeeTestBase): - pageurl = "https://www.geetest.com/en/demo" - challenge = "1ad03db8aff920037fb8117827eab171" - gt = "022397c99c9f646f6477822485f30404" - api_server = "api.geetest.com" - + kwargs_params = { + "geetestApiServerSubdomain": "api-na.geetest.com", + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } """ Success tests """ @@ -27,6 +28,30 @@ def test_methods_exists(self): assert "captcha_handler" in GeeTest.__dict__.keys() assert "aio_captcha_handler" in GeeTest.__dict__.keys() + @pytest.mark.parametrize("method", GeetestEnm.GeeTestTaskProxyless.list_values()) + def test_args(self, method: str): + instance = GeeTest( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + method=method, + gt=self.gt, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["gt"] == self.gt + + def test_kwargs(self): + instance = GeeTest( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + class TestGeeTest(TestGeeTestBase): """ @@ -36,84 +61,58 @@ class TestGeeTest(TestGeeTestBase): def test_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, - api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, ) - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 - result = instance.captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert isinstance(result["errorBody"], str) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, - api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, ) - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 - result = await instance.aio_captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert isinstance(result["errorBody"], str) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" def test_context_basic_data(self): with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, - api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, ) as instance: - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 + assert instance.captcha_handler(challenge=self.challenge) - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, - api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, ) as instance: - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 + assert await instance.aio_captcha_handler(challenge=self.challenge) """ Fail tests @@ -130,7 +129,7 @@ def test_wrong_method(self): ) def test_wrong_method_arg(self): - with pytest.raises(ValueError): + with pytest.raises(TypeError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, websiteURL=self.pageurl, @@ -148,7 +147,6 @@ def test_empty_challenge(self): method=GeetestEnm.GeeTestTaskProxyless.value, ).captcha_handler() - @pytest.mark.asyncio async def test_empty_challenge_aio(self): with pytest.raises(ValueError): await GeeTest( @@ -165,83 +163,69 @@ def test_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) - - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 - result = instance.captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert isinstance(result["errorBody"], str) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" @pytest.mark.asyncio async def test_aio_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) - - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 - result = await instance.aio_captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert isinstance(result["errorBody"], str) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" def test_context_basic_data(self): with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) as instance: - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 + assert instance.captcha_handler(challenge=self.challenge) @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, - method=GeetestEnm.GeeTestTaskProxyless.value, websiteURL=self.pageurl, api_server=self.api_server, - new_captcha=1, + method=GeetestEnm.GeeTestTaskProxyless.value, + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) as instance: - assert instance.create_task_payload["method"] == GeetestEnm.GeeTestTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["gt"] == self.gt - assert instance.create_task_payload["new_captcha"] == 1 + assert await instance.aio_captcha_handler(challenge=self.challenge) """ Fail tests @@ -251,17 +235,21 @@ def test_wrong_method(self): with pytest.raises(ValueError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, - captcha_id=self.get_random_string(length=5), + gt=self.gt, websiteURL=self.pageurl, api_server=self.api_server, method=self.get_random_string(length=5), + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) def test_wrong_method_arg(self): - with pytest.raises(ValueError): + with pytest.raises(TypeError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, websiteURL=self.pageurl, api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, + version=4, + initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, ) From 4f5a2592095816a9adabaa513cf5b1f1c8471fbd Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 22:50:48 +0300 Subject: [PATCH 103/175] Update test_image.py --- tests/test_image.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_image.py b/tests/test_image.py index f59a2ed1..f780e653 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -47,7 +47,6 @@ def test_basic_link(self, save_format): result = instance.captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True - if not result["errorId"]: assert result["status"] == "ready" assert isinstance(result["solution"]["text"], str) is True From f4bd9da7ef7fb5ab5cf0acea08ab087b3643005a Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 23:16:03 +0300 Subject: [PATCH 104/175] Update gee_test.py --- src/python_rucaptcha/gee_test.py | 90 +++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index 32861f41..141c4706 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -60,10 +60,21 @@ def __init__( >>> resp_data = requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official").json() >>> print(resp_data) { - 'success': 1, - 'challenge': '1ad03db8aff920037fb8117827eab171', - 'gt': '022397c99c9f646f6477822485f30404', - 'new_captcha': True + "errorId":0, + "status":"ready", + "solution":{ + "captcha_id":"e392e1d7fd421dc63325744d5a2b9c73", + "lot_number":"e6c3bed2854f41f880662c48afff5dcb", + "pass_token":"fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044", + "gen_time":"1693924478", + "captcha_output":"fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg==" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... gt=resp_data["gt"], @@ -73,14 +84,21 @@ def __init__( ... new_captcha=1, ... ).aio_captcha_handler(challenge=resp_data["challenge"]) { - "captchaSolve": { - "geetest_challenge": "1ad0....b171gu", - "geetest_validate": "011....69cc", - "geetest_seccode": "0....c|jordan" + "errorId":0, + "status":"ready", + "solution":{ + "captcha_id":"e392e1d7fd421dc63325744d5a2b9c73", + "lot_number":"e6c3bed2854f41f880662c48afff5dcb", + "pass_token":"fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044", + "gen_time":"1693924478", + "captcha_output":"fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg==" }, - "taskId": 73052314114, - "error": False, - "errorBody": None + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -89,16 +107,21 @@ def __init__( ... method=GeetestEnm.GeeTestTaskProxyless.value, ... ).captcha_handler() { - "captchaSolve": { - "captcha_id": "e39....73", - "lot_number": "1b....bd2", - "pass_token": "f3b....de7f", - "gen_time": "1678558017", - "captcha_output": "c3rHzKl....TE=", - }, - "taskId": 73052314114, - "error": False, - "errorBody": "None", + "errorId":0, + "status":"ready", + "solution":{ + "captcha_id":"e392e1d7fd421dc63325744d5a2b9c73", + "lot_number":"e6c3bed2854f41f880662c48afff5dcb", + "pass_token":"fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044", + "gen_time":"1693924478", + "captcha_output":"fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg==" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -107,16 +130,21 @@ def __init__( ... method=GeetestEnm.GeeTestTaskProxyless.value, ... ).aio_captcha_handler() { - "captchaSolve": { - "captcha_id": "e39....73", - "lot_number": "1b....bd2", - "pass_token": "f3b....de7f", - "gen_time": "1678558017", - "captcha_output": "c3r....TE=", - }, - "taskId": 73052314114, - "error": False, - "errorBody": "None", + "errorId":0, + "status":"ready", + "solution":{ + "captcha_id":"e392e1d7fd421dc63325744d5a2b9c73", + "lot_number":"e6c3bed2854f41f880662c48afff5dcb", + "pass_token":"fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044", + "gen_time":"1693924478", + "captcha_output":"fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg==" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } Returns: From 5686a8901687aad2415d32036ceb6aca86f73161 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 23:16:06 +0300 Subject: [PATCH 105/175] Update test_geetest.py --- tests/test_geetest.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 27511965..7f2b4eec 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -1,4 +1,5 @@ import pytest +import requests from tests.conftest import BaseTest from python_rucaptcha.gee_test import GeeTest @@ -7,9 +8,13 @@ class TestGeeTestBase(BaseTest): pageurl = "https://www.geetest.com/en/demo" - challenge = "1ad03db8aff920037fb8117827eab171" gt = "022397c99c9f646f6477822485f30404" api_server = "api.geetest.com" + initParameters = {"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"} + + @property + def challenge(self): + return requests.get('https://www.geetest.com/demo/gt/register-enFullpage-official').json()['challenge'] class TestGeeTestCore(TestGeeTestBase): @@ -19,6 +24,7 @@ class TestGeeTestCore(TestGeeTestBase): "proxyType": "socks5", "proxyAddress": BaseTest.proxyAddress, "proxyPort": BaseTest.proxyPort, + "version": 4, } """ Success tests @@ -52,6 +58,16 @@ def test_kwargs(self): assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + def test_arg_initParameters(self): + instance = GeeTest( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + method=GeetestEnm.GeeTestTaskProxyless.value, + gt=self.gt, + initParameters=self.initParameters, + ) + assert self.initParameters == instance.create_task_payload["task"]["initParameters"] + class TestGeeTest(TestGeeTestBase): """ @@ -167,14 +183,14 @@ def test_basic_data(self): api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) result = instance.captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True if not result["errorId"]: assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -189,14 +205,14 @@ async def test_aio_basic_data(self): api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) result = await instance.aio_captcha_handler(challenge=self.challenge) assert isinstance(result, dict) is True if not result["errorId"]: assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -210,7 +226,7 @@ def test_context_basic_data(self): api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) as instance: assert instance.captcha_handler(challenge=self.challenge) @@ -223,7 +239,7 @@ async def test_context_aio_basic_data(self): api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) as instance: assert await instance.aio_captcha_handler(challenge=self.challenge) @@ -240,7 +256,7 @@ def test_wrong_method(self): api_server=self.api_server, method=self.get_random_string(length=5), version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) def test_wrong_method_arg(self): @@ -251,5 +267,5 @@ def test_wrong_method_arg(self): api_server=self.api_server, method=GeetestEnm.GeeTestTaskProxyless.value, version=4, - initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + initParameters=self.initParameters, ) From 2fc7514fd9ae9eb259b154a92fc0365a7bc55c10 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 23:16:18 +0300 Subject: [PATCH 106/175] Update test_geetest.py --- tests/test_geetest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 7f2b4eec..66fd7deb 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -14,7 +14,7 @@ class TestGeeTestBase(BaseTest): @property def challenge(self): - return requests.get('https://www.geetest.com/demo/gt/register-enFullpage-official').json()['challenge'] + return requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official").json()["challenge"] class TestGeeTestCore(TestGeeTestBase): From 02cbbcc1a169652cd244af97804d5460b5ef84d0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 6 Dec 2023 23:26:55 +0300 Subject: [PATCH 107/175] Update gee_test.py --- src/python_rucaptcha/gee_test.py | 67 +++++++++++++++++++------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index 141c4706..e8656f95 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -40,25 +40,9 @@ def __init__( } >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... gt=resp_data["gt"], - ... pageurl="https://www.geetest.com/en/demo", - ... method=GeetestEnm.GeeTestTaskProxyless.value, - ... api_server="api.geetest.com", - ... new_captcha=1, + ... websiteURL="https://www.geetest.com/en/demo", + ... method=GeetestEnm.GeeTestTaskProxyless.value ... ).captcha_handler(challenge=resp_data["challenge"]) - { - "captchaSolve": { - "geetest_challenge": "1ad03db8aff920037fb8117827eab171gu", - "geetest_validate": "011309d29dab6e98e8fc3784a95469cc", - "geetest_seccode": "011309d29dab6e98e8fc3784a95469cc|jordan" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> import requests - >>> resp_data = requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official").json() - >>> print(resp_data) { "errorId":0, "status":"ready", @@ -76,12 +60,11 @@ def __init__( "solveCount":1, "taskId":75190409731 } + >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", ... gt=resp_data["gt"], - ... pageurl="https://www.geetest.com/en/demo", - ... method=GeetestEnm.GeeTestTaskProxyless.value, - ... api_server="api.geetest.com", - ... new_captcha=1, + ... websiteURL="https://www.geetest.com/en/demo", + ... method=GeetestEnm.GeeTestTaskProxyless.value ... ).aio_captcha_handler(challenge=resp_data["challenge"]) { "errorId":0, @@ -102,10 +85,11 @@ def __init__( } >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", - ... pageurl="https://rucaptcha.com/demo/geetest-v4", + ... websiteURL="https://rucaptcha.com/demo/geetest-v4", ... method=GeetestEnm.GeeTestTaskProxyless.value, - ... ).captcha_handler() + ... version=4, + ... initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + ... ).captcha_handler(challenge=resp_data["challenge"]) { "errorId":0, "status":"ready", @@ -125,10 +109,11 @@ def __init__( } >>> await GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captcha_id="e392e1d7fd421dc63325744d5a2b9c73", - ... pageurl="https://rucaptcha.com/demo/geetest-v4", + ... websiteURL="https://rucaptcha.com/demo/geetest-v4", ... method=GeetestEnm.GeeTestTaskProxyless.value, - ... ).aio_captcha_handler() + ... version=4, + ... initParameters={"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"}, + ... ).aio_captcha_handler(challenge=resp_data["challenge"]) { "errorId":0, "status":"ready", @@ -147,6 +132,32 @@ def __init__( "taskId":75190409731 } + >>> GeeTest(rucaptcha_key="aa9011f31111181111168611f1151122", + ... gt=resp_data["gt"], + ... websiteURL="https://www.geetest.com/en/demo", + ... method=GeetestEnm.GeeTestTaskProxyless.value, + ... userAgent="Some specific user agent", + ... proxyType="socks5", + ... proxyAddress="0.0.0.0", + ... proxyPort=443, + ... ).captcha_handler(challenge=resp_data["challenge"]) + { + "errorId":0, + "status":"ready", + "solution":{ + "captcha_id":"e392e1d7fd421dc63325744d5a2b9c73", + "lot_number":"e6c3bed2854f41f880662c48afff5dcb", + "pass_token":"fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044", + "gen_time":"1693924478", + "captcha_output":"fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg==" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 + } Returns: Dict with full server response From ef7c9d6b1e31b6b71c5125104a79a21de4ffc8d7 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:19:43 +0300 Subject: [PATCH 108/175] Update amazon_waf.py --- src/python_rucaptcha/amazon_waf.py | 55 ++++++++---------------------- 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/src/python_rucaptcha/amazon_waf.py b/src/python_rucaptcha/amazon_waf.py index b7ff2dc3..9a3387e7 100644 --- a/src/python_rucaptcha/amazon_waf.py +++ b/src/python_rucaptcha/amazon_waf.py @@ -26,8 +26,8 @@ def __init__( Examples: >>> AmazonWAF(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://page-with-waf.com/", - ... sitekey="some-site-key", + ... websiteURL="https://page-with-waf.com/", + ... websiteKey="some-site-key", ... iv="some-iv-value", ... context="some-context-value").captcha_handler() { @@ -38,8 +38,8 @@ def __init__( } >>> AmazonWAF(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://page-with-waf.com/", - ... sitekey="some-site-key", + ... websiteURL="https://page-with-waf.com/", + ... websiteKey="some-site-key", ... iv="some-iv-value", ... context="some-context-value").aio_captcha_handler() { @@ -60,30 +60,22 @@ def __init__( # check user params if method not in AmazonWAFCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {AmazonWAFCaptchaEnm.list_values()}") + # insert `gt` param to payload + self.create_task_payload["task"].update( + { + "websiteURL": websiteURL, + "websiteKey": websiteKey, + "iv": iv, + "context": context, + } + ) def captcha_handler(self, **kwargs) -> dict: """ Synchronous method for captcha solving - Examples: - >>> AmazonWAF(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://page-with-waf.com/", - ... sitekey="some-site-key", - ... iv="some-iv-value", - ... context="some-context-value").captcha_handler() - { - 'captchaSolve': 'eyJ0e......jNuSFqtyP4Ho', - 'taskId': '7111111984', - 'error': False, - 'errorBody': None - } - Returns: - Response to captcha as JSON string with fields: - captchaSolve - captcha solution, - taskId - finds the ID of the task to solve the captcha, - error - False - if everything is fine, True - if there is an error, - errorBody - error name + Dict with full server response Notes: Check class docstirng for more info @@ -95,25 +87,8 @@ async def aio_captcha_handler(self) -> dict: """ Asynchronous method for captcha solving - Examples: - >>> await AmazonWAF(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://page-with-waf.com/", - ... sitekey="some-site-key", - ... iv="some-iv-value", - ... context="some-context-value").aio_captcha_handler() - { - 'captchaSolve': 'eyJ0e......jNuSFqtyP4Ho', - 'taskId': '7111111984', - 'error': False, - 'errorBody': None - } - Returns: - Response to captcha as JSON string with fields: - captchaSolve - captcha solution, - taskId - finds the ID of the task to solve the captcha, - error - False - if everything is fine, True - if there is an error, - errorBody - error name + Dict with full server response Notes: Check class docstirng for more info From 06dc59b26f16247625bd7690119ceec536399c97 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:19:50 +0300 Subject: [PATCH 109/175] Update test_amazon.py --- tests/test_amazon.py | 51 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/tests/test_amazon.py b/tests/test_amazon.py index b3e66512..a06639f0 100644 --- a/tests/test_amazon.py +++ b/tests/test_amazon.py @@ -11,6 +11,23 @@ class TestAmazonCaptcha(BaseTest): iv = "some-iv-value" context = "some-context-value" + @pytest.mark.parametrize("method", AmazonWAFCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = AmazonWAF( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + iv=self.iv, + context=self.context, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websiteKey"] == self.sitekey + assert instance.create_task_payload["task"]["iv"] == self.iv + assert instance.create_task_payload["task"]["context"] == self.context + assert instance.create_task_payload["task"]["type"] == method + """ Success tests """ @@ -28,11 +45,7 @@ def test_basic_data(self): context=self.context, method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, ) - assert instance.create_task_payload["method"] == AmazonWAFCaptchaEnm.AmazonTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - assert instance.create_task_payload["iv"] == self.iv - assert instance.create_task_payload["context"] == self.context + assert instance.captcha_handler() def test_context_basic_data(self): with AmazonWAF( @@ -43,11 +56,29 @@ def test_context_basic_data(self): context=self.context, method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == AmazonWAFCaptchaEnm.AmazonTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - assert instance.create_task_payload["iv"] == self.iv - assert instance.create_task_payload["context"] == self.context + assert instance.captcha_handler() + + async def test_aio_basic_data(self): + instance = AmazonWAF( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + iv=self.iv, + context=self.context, + method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, + ) + assert await instance.aio_captcha_handler() + + async def test_aio_context_basic_data(self): + async with AmazonWAF( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + iv=self.iv, + context=self.context, + method=AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, + ) as instance: + assert await instance.aio_captcha_handler() """ Fail tests From fe463ee70921870ce03314437a2c5461cf685c05 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:32:22 +0300 Subject: [PATCH 110/175] Update amazon_waf.py --- src/python_rucaptcha/amazon_waf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/amazon_waf.py b/src/python_rucaptcha/amazon_waf.py index 9a3387e7..8d5fd533 100644 --- a/src/python_rucaptcha/amazon_waf.py +++ b/src/python_rucaptcha/amazon_waf.py @@ -53,7 +53,7 @@ def __init__( Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#amazon-waf + https://rucaptcha.com/api-docs/amazon-aws-waf-captcha """ super().__init__(method=method, *args, **kwargs) From 02e2c4e5aaa1cef923dfbf6937fe1e4fb9f20501 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:32:25 +0300 Subject: [PATCH 111/175] Update capy_puzzle.py --- src/python_rucaptcha/capy_puzzle.py | 156 +++++++++------------------- 1 file changed, 50 insertions(+), 106 deletions(-) diff --git a/src/python_rucaptcha/capy_puzzle.py b/src/python_rucaptcha/capy_puzzle.py index 9e4736e0..0281f37e 100644 --- a/src/python_rucaptcha/capy_puzzle.py +++ b/src/python_rucaptcha/capy_puzzle.py @@ -4,81 +4,99 @@ class CapyPuzzle(BaseCaptcha): def __init__( - self, pageurl: str, captchakey: str, method: str = CapyPuzzleEnm.CapyTaskProxyless.value, *args, **kwargs + self, websiteURL: str, websiteKey: str, method: str = CapyPuzzleEnm.CapyTaskProxyless.value, *args, **kwargs ): """ The class is used to work with CapyPuzzle. Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page - captchakey: The value of the `captchakey` parameter you found in the code of the page + websiteURL: Full URL of the captcha page + websiteKey: The value of the `captchakey` parameter you found in the code of the page method: Captcha type Examples: >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", + ... websiteKey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", + ... websiteURL="https://www.capy.me/account/register/", ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).captcha_handler() { - "captchaSolve": { - "captchakey": "PUZZLE_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" + "errorId":0, + "status":"ready", + "solution":{ + "captchakey":"PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v", + "challengekey":"qHAPtn68KTnXFM8VQ3mtYRtmy3cSKuHJ", + "answer":"0xax8ex0xax84x0xkx7qx0xux7gx0xx42x0x3ox42x0x3ox4cx", + "respKey":"" }, - "taskId": 73052314114, - "error": False, - "errorBody": None + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="AVATAR_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", + ... websiteKey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", + ... websiteURL="https://www.capy.me/account/register/", ... method=CapyPuzzleEnm.CapyTaskProxyless.value, ... api_server="https://jp.api.capy.me/", ... version="avatar", ... ).captcha_handler() { - "captchaSolve": { - "captchakey": "AVATART_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" + "errorId":0, + "status":"ready", + "solution":{ + "captchakey":"PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v", + "challengekey":"qHAPtn68KTnXFM8VQ3mtYRtmy3cSKuHJ", + "answer":"0xax8ex0xax84x0xkx7qx0xux7gx0xx42x0x3ox42x0x3ox4cx", + "respKey":"" }, - "taskId": 73052314114, - "error": False, - "errorBody": None + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", + ... websiteKey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", + ... websiteURL="https://www.capy.me/account/register/", ... method="CapyTaskProxyless", ... api_server="https://jp.api.capy.me/", ... version="puzzle", ... ).captcha_handler() { - "captchaSolve": { - "captchakey": "PUZZLE_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" + "errorId":0, + "status":"ready", + "solution":{ + "captchakey":"PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v", + "challengekey":"qHAPtn68KTnXFM8VQ3mtYRtmy3cSKuHJ", + "answer":"0xax8ex0xax84x0xkx7qx0xux7gx0xx42x0x3ox42x0x3ox4cx", + "respKey":"" }, - "taskId": 73052314114, - "error": False, - "errorBody": None + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId":75190409731 } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_capy + https://rucaptcha.com/api-docs/capy-puzzle-captcha """ super().__init__(method=method, *args, **kwargs) - self.create_task_payload["task"].update({"captchakey": captchakey, "pageurl": pageurl}) + self.create_task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) # check user params if method not in CapyPuzzleEnm.list_values(): @@ -91,43 +109,6 @@ def captcha_handler(self, **kwargs): Args: kwargs: additional params for `requests` library - Examples: - >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CapyTaskProxyless.value, - ... api_server="https://jp.api.capy.me/", - ... version="puzzle", - ... ).captcha_handler() - { - "captchaSolve": { - "captchakey": "PUZZLE_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CapyTaskProxyless.value, - ... api_server="https://jp.api.capy.me/", - ... version="avatar", - ... ).captcha_handler() - { - "captchaSolve": { - "captchakey": "AVATART_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response @@ -141,43 +122,6 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> await CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CapyTaskProxyless.value, - ... api_server="https://jp.api.capy.me/", - ... version="puzzle", - ... ).aio_captcha_handler() - { - "captchaSolve": { - "captchakey": "PUZZLE_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> await CapyPuzzle(rucaptcha_key="aa9011f31111181111168611f1151122", - ... captchakey="PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w", - ... pageurl="https://www.capy.me/account/register/", - ... method=CapyPuzzleEnm.CapyTaskProxyless.value, - ... api_server="https://jp.api.capy.me/", - ... version="avatar", - ... ).aio_captcha_handler() - { - "captchaSolve": { - "captchakey": "AVATART_C...w", - "challengekey": "Uf....It", - "answer": "26x...x9mx" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response From dc48cf5be62b28c742b91aa5dae6d9fa65a316f3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:32:29 +0300 Subject: [PATCH 112/175] Update test_capypuzzle.py --- tests/test_capypuzzle.py | 77 +++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/tests/test_capypuzzle.py b/tests/test_capypuzzle.py index 94c8423d..251e7644 100644 --- a/tests/test_capypuzzle.py +++ b/tests/test_capypuzzle.py @@ -12,6 +12,21 @@ class TestCapyPuzzle(BaseTest): api_server = "https://jp.api.capy.me/" versions = ["puzzle", "avatar"] + @pytest.mark.parametrize("method", CapyPuzzleEnm.list_values()) + def test_args(self, method: str): + instance = CapyPuzzle( + websiteURL=self.pageurl, + websiteKey=self.captchakey, + method=method, + rucaptcha_key=self.RUCAPTCHA_KEY, + api_server=self.api_server, + version=self.versions[0], + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websiteKey"] == self.captchakey + assert instance.create_task_payload["task"]["type"] == method + """ Success tests """ @@ -22,24 +37,20 @@ def test_methods_exists(self): def test_basic_data(self): instance = CapyPuzzle( - pageurl=self.pageurl, - captchakey=self.captchakey, + websiteURL=self.pageurl, + websiteKey=self.captchakey, method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) - assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["version"] == self.versions[0] result = instance.captcha_handler() assert isinstance(result, dict) is True if not result["errorId"]: assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -50,24 +61,20 @@ def test_basic_data(self): @pytest.mark.asyncio async def test_aio_basic_data(self): instance = CapyPuzzle( - pageurl=self.pageurl, - captchakey=self.captchakey, + websiteURL=self.pageurl, + websiteKey=self.captchakey, method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) - assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["version"] == self.versions[0] result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True if not result["errorId"]: assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -77,32 +84,46 @@ async def test_aio_basic_data(self): def test_context_basic_data(self): with CapyPuzzle( - pageurl=self.pageurl, - captchakey=self.captchakey, + websiteURL=self.pageurl, + websiteKey=self.captchakey, method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) as instance: - assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["version"] == self.versions[0] + result = instance.captcha_handler() + assert isinstance(result, dict) is True + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with CapyPuzzle( - pageurl=self.pageurl, - captchakey=self.captchakey, + websiteURL=self.pageurl, + websiteKey=self.captchakey, method=CapyPuzzleEnm.CapyTaskProxyless.value, rucaptcha_key=self.RUCAPTCHA_KEY, api_server=self.api_server, version=self.versions[0], ) as instance: - assert instance.create_task_payload["method"] == CapyPuzzleEnm.CapyTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["api_server"] == self.api_server - assert instance.create_task_payload["version"] == self.versions[0] + result = await instance.aio_captcha_handler() + assert isinstance(result, dict) is True + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() """ Fail tests @@ -111,8 +132,8 @@ async def test_context_aio_basic_data(self): def test_wrong_method(self): with pytest.raises(ValueError): CapyPuzzle( - pageurl=self.pageurl, - captchakey=self.captchakey, + websiteURL=self.pageurl, + websiteKey=self.captchakey, method=self.get_random_string(length=5), rucaptcha_key=self.RUCAPTCHA_KEY, ) From b17d38ead0000b0f72695025a9df603776d07497 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:52:14 +0300 Subject: [PATCH 113/175] Update conf.py --- docs/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index c8f50e44..0dec1d4d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,6 @@ text_captcha, image_captcha, rotate_captcha, - yandex_smart_captcha, lemin_cropped_captcha, ) from python_rucaptcha.__version__ import __version__ From 2389999070e13f2f4b597942c129e08685fbbf25 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:52:17 +0300 Subject: [PATCH 114/175] Update index.rst --- docs/index.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index 57ed7a0d..5d8af917 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -36,7 +36,6 @@ Support of the service `Death By Captcha Date: Thu, 7 Dec 2023 00:52:20 +0300 Subject: [PATCH 115/175] Update info.rst --- docs/modules/enum/info.rst | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docs/modules/enum/info.rst b/docs/modules/enum/info.rst index 8abf12f2..81caf405 100644 --- a/docs/modules/enum/info.rst +++ b/docs/modules/enum/info.rst @@ -56,18 +56,10 @@ To import this module: :members: :undoc-members: -.. autoclass:: python_rucaptcha.core.enums.TikTokCaptchaEnm - :members: - :undoc-members: - .. autoclass:: python_rucaptcha.core.enums.ControlEnm :members: :undoc-members: -.. autoclass:: python_rucaptcha.core.enums.YandexSmartCaptchaEnm - :members: - :undoc-members: - .. autoclass:: python_rucaptcha.core.enums.TurnstileCaptchaEnm :members: :undoc-members: From 54ad1d59144f5d069001109230641286c51e5384 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:52:25 +0300 Subject: [PATCH 116/175] Update info.rst --- docs/modules/serializer/info.rst | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/docs/modules/serializer/info.rst b/docs/modules/serializer/info.rst index 578a5c55..f7346317 100644 --- a/docs/modules/serializer/info.rst +++ b/docs/modules/serializer/info.rst @@ -8,32 +8,6 @@ To import this module: from python_rucaptcha.core import serializer -.. autopydantic_model:: python_rucaptcha.core.serializer.ResponseSer +.. autoclass:: python_rucaptcha.core.serializer.GetTaskResultResponseSer :members: :undoc-members: - - -.. autopydantic_model:: python_rucaptcha.core.serializer.PostRequestSer - :members: - :undoc-members: - - -.. autopydantic_model:: python_rucaptcha.core.serializer.GetRequestSer - :members: - :undoc-members: - - -.. autopydantic_model:: python_rucaptcha.core.serializer.CaptchaOptionsSer - :members: - :undoc-members: - - -.. autopydantic_model:: python_rucaptcha.core.serializer.ServicePostResponseSer - :members: - :undoc-members: - - -.. autopydantic_model:: python_rucaptcha.core.serializer.ServiceGetResponseSer - :members: - :undoc-members: - From 78326ada937b4bb7da671f7a694125d75709dcdc Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:52:28 +0300 Subject: [PATCH 117/175] Delete example.rst --- docs/modules/yandex/example.rst | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 docs/modules/yandex/example.rst diff --git a/docs/modules/yandex/example.rst b/docs/modules/yandex/example.rst deleted file mode 100644 index f95aafe5..00000000 --- a/docs/modules/yandex/example.rst +++ /dev/null @@ -1,12 +0,0 @@ -YandexSmartCaptcha -================== - -To import this module: - -.. code-block:: python - - from python_rucaptcha.yandex_smart_captcha import YandexSmartCaptcha - - -.. autoclass:: python_rucaptcha.yandex_smart_captcha.YandexSmartCaptcha - :members: \ No newline at end of file From f200a51bc55338ca226b9a83a60a356144f0216e Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:52:32 +0300 Subject: [PATCH 118/175] Update gee_test.py --- src/python_rucaptcha/gee_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/python_rucaptcha/gee_test.py b/src/python_rucaptcha/gee_test.py index e8656f95..ce6f42da 100644 --- a/src/python_rucaptcha/gee_test.py +++ b/src/python_rucaptcha/gee_test.py @@ -1,4 +1,4 @@ -from typing import Union, Optional +from typing import Union from .core.base import BaseCaptcha from .core.enums import GeetestEnm @@ -180,7 +180,7 @@ def __init__( } ) - def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: + def captcha_handler(self, challenge: str, **kwargs) -> dict: """ Sync solving method @@ -202,7 +202,7 @@ def captcha_handler(self, challenge: Optional[str] = None, **kwargs) -> dict: return self._processing_response(**kwargs) - async def aio_captcha_handler(self, challenge: Optional[str] = None) -> dict: + async def aio_captcha_handler(self, challenge: str) -> dict: """ Async solving method From 5722ff0c5d105b1eeceb52b0442b47a0b4e271b1 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 00:58:37 +0300 Subject: [PATCH 119/175] Update test_geetest.py --- tests/test_geetest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 66fd7deb..cbd703ef 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -154,7 +154,7 @@ def test_wrong_method_arg(self): ) def test_empty_challenge(self): - with pytest.raises(ValueError): + with pytest.raises(TypeError): GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, @@ -163,8 +163,8 @@ def test_empty_challenge(self): method=GeetestEnm.GeeTestTaskProxyless.value, ).captcha_handler() - async def test_empty_challenge_aio(self): - with pytest.raises(ValueError): + async def test_aio_empty_challenge(self): + with pytest.raises(TypeError): await GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, gt=self.gt, From 03af6b16d07f9548df99c11471c8bdcc8fed080b Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:38:47 +0300 Subject: [PATCH 120/175] Update fun_captcha.py --- src/python_rucaptcha/fun_captcha.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/python_rucaptcha/fun_captcha.py b/src/python_rucaptcha/fun_captcha.py index 71a8aff3..d61a7712 100644 --- a/src/python_rucaptcha/fun_captcha.py +++ b/src/python_rucaptcha/fun_captcha.py @@ -4,15 +4,20 @@ class FunCaptcha(BaseCaptcha): def __init__( - self, pageurl: str, publickey: str, method: str = FunCaptchaEnm.FunCaptchaTaskProxyless.value, *args, **kwargs + self, + websiteURL: str, + websitePublicKey: str, + method: str = FunCaptchaEnm.FunCaptchaTaskProxyless.value, + *args, + **kwargs, ): """ The class is used to work with Arkose Labs FunCaptcha. Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page - publickey: The value of the `pk` or `data-pkey` parameter you found in the page code + websiteURL: Full URL of the captcha page + websitePublicKey: The value of the `pk` or `data-pkey` parameter you found in the page code method: Captcha type Examples: @@ -33,11 +38,11 @@ def __init__( Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + https://rucaptcha.com/api-docs/arkoselabs-funcaptcha """ super().__init__(method=method, *args, **kwargs) - self.create_task_payload["task"].update({"publickey": publickey, "pageurl": pageurl}) + self.create_task_payload["task"].update({"websiteURL": websiteURL, "websitePublicKey": websitePublicKey}) # check user params if method not in FunCaptchaEnm.list_values(): @@ -54,7 +59,7 @@ def captcha_handler(self, **kwargs): Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ return self._processing_response(**kwargs) @@ -66,6 +71,6 @@ async def aio_captcha_handler(self): Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_funcaptcha_new + Check class docstirng for more info """ return await self._aio_processing_response() From d61c6efab6b5ff2e839814427d09bcabaa04087b Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:38:50 +0300 Subject: [PATCH 121/175] Update test_funcaptcha.py --- tests/test_funcaptcha.py | 76 ++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index d17b3be6..37ace31a 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -12,7 +12,13 @@ class TestFunCaptcha(BaseTest): "https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en" ) surl = "https://client-api.arkoselabs.com" - + kwargs_params = { + "funcaptchaApiJSSubdomain": "sample-api.arkoselabs.com", + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } """ Success tests """ @@ -21,20 +27,37 @@ def test_methods_exists(self): assert "captcha_handler" in FunCaptcha.__dict__.keys() assert "aio_captcha_handler" in FunCaptcha.__dict__.keys() + @pytest.mark.parametrize("method", FunCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = FunCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + + def test_kwargs(self): + instance = FunCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, + method=FunCaptchaEnm.FunCaptchaTaskProxyless, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + def test_basic_data(self): instance = FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - publickey=self.publickey, - surl=self.surl, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) - assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["publickey"] == self.publickey - assert instance.create_task_payload["surl"] == self.surl - result = instance.captcha_handler() assert isinstance(result, dict) is True @@ -52,17 +75,11 @@ def test_basic_data(self): async def test_aio_basic_data(self): instance = FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - publickey=self.publickey, - surl=self.surl, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) - assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["publickey"] == self.publickey - assert instance.create_task_payload["surl"] == self.surl - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True @@ -79,29 +96,21 @@ async def test_aio_basic_data(self): def test_context_basic_data(self): with FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - publickey=self.publickey, - surl=self.surl, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["publickey"] == self.publickey - assert instance.create_task_payload["surl"] == self.surl + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - publickey=self.publickey, - surl=self.surl, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, method=FunCaptchaEnm.FunCaptchaTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == FunCaptchaEnm.FunCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["publickey"] == self.publickey - assert instance.create_task_payload["surl"] == self.surl + assert await instance.aio_captcha_handler() """ Fail tests @@ -111,8 +120,7 @@ def test_wrong_method(self): with pytest.raises(ValueError): FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - publickey=self.publickey, - surl=self.surl, + websiteURL=self.pageurl, + websitePublicKey=self.publickey, method=self.get_random_string(length=5), ) From b28305fc59a06165a2e50d95a4f134a335b5ab58 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:38:53 +0300 Subject: [PATCH 122/175] Update test_geetest.py --- tests/test_geetest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index cbd703ef..82dcfd4a 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -34,7 +34,7 @@ def test_methods_exists(self): assert "captcha_handler" in GeeTest.__dict__.keys() assert "aio_captcha_handler" in GeeTest.__dict__.keys() - @pytest.mark.parametrize("method", GeetestEnm.GeeTestTaskProxyless.list_values()) + @pytest.mark.parametrize("method", GeetestEnm.list_values()) def test_args(self, method: str): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, From 11b5a61c0f83f5dba55520a765127771c557a2c8 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:42:28 +0300 Subject: [PATCH 123/175] Update amazon_waf.py --- src/python_rucaptcha/amazon_waf.py | 36 +++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/python_rucaptcha/amazon_waf.py b/src/python_rucaptcha/amazon_waf.py index 8d5fd533..befd1421 100644 --- a/src/python_rucaptcha/amazon_waf.py +++ b/src/python_rucaptcha/amazon_waf.py @@ -18,8 +18,8 @@ def __init__( Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page - sitekey: Key value from the page + websiteURL: Full URL of the captcha page + websiteKey: Key value from the page iv: Value iv from the page context: Value of context from page method: Captcha type @@ -31,10 +31,18 @@ def __init__( ... iv="some-iv-value", ... context="some-context-value").captcha_handler() { - 'captchaSolve': 'eyJ0e......jNuSFqtyP4Ho', - 'taskId': '7111111984', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "captcha_voucher":"eyJ0eXAiO...oQjTnJlBvAW4", + "existing_token":"f8ab5749-f916-...5D8yAA39JtKVbw=" + }, + "cost":"0.00145", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":0, + "taskId": 73243152973, } >>> AmazonWAF(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -43,10 +51,18 @@ def __init__( ... iv="some-iv-value", ... context="some-context-value").aio_captcha_handler() { - 'captchaSolve': 'eyJ0e......jNuSFqtyP4Ho', - 'taskId': '7111111984', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "captcha_voucher":"eyJ0eXAiO...oQjTnJlBvAW4", + "existing_token":"f8ab5749-f916-...5D8yAA39JtKVbw=" + }, + "cost":"0.00145", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":0, + "taskId": 73243152973, } Returns: From d3bd82fee880d47b2e7afcdbcbdd93a09036dde5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:42:31 +0300 Subject: [PATCH 124/175] Update fun_captcha.py --- src/python_rucaptcha/fun_captcha.py | 39 +++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/python_rucaptcha/fun_captcha.py b/src/python_rucaptcha/fun_captcha.py index d61a7712..885f8fcf 100644 --- a/src/python_rucaptcha/fun_captcha.py +++ b/src/python_rucaptcha/fun_captcha.py @@ -22,16 +22,41 @@ def __init__( Examples: >>> FunCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", - ... publickey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", - ... surl="https://client-api.arkoselabs.com", + ... websiteURL="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", + ... websitePublicKey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", ... method=FunCaptchaEnm.FunCaptchaTaskProxyless.value ... ).captcha_handler() { - "captchaSolve": "23217....ger", - "taskId": 73052314114, - "error": False, - "errorBody": None + "errorId":0, + "status":"ready", + "solution":{ + "token":"142000f.....er" + }, + "cost":"0.002", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":0, + "taskId": 73243152973, + } + + >>> await FunCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", + ... websiteURL="https://api.funcaptcha.com/tile-game-lite-mode/fc/api/nojs/?pkey=69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC&lang=en", + ... websitePublicKey="69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC", + ... method=FunCaptchaEnm.FunCaptchaTaskProxyless.value + ... ).aio_captcha_handler() + { + "errorId":0, + "status":"ready", + "solution":{ + "token":"142000f.....er" + }, + "cost":"0.002", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":0, + "taskId": 73243152973, } Returns: From f8ce970ede44cee6fb7a97203e2e90e2652d7221 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:57:58 +0300 Subject: [PATCH 125/175] Update test_key_captcha.py --- tests/test_key_captcha.py | 130 +++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 57 deletions(-) diff --git a/tests/test_key_captcha.py b/tests/test_key_captcha.py index b17c6743..a9c4d1bc 100644 --- a/tests/test_key_captcha.py +++ b/tests/test_key_captcha.py @@ -12,7 +12,13 @@ class TestKeyCaptcha(BaseTest): s_s_c_web_server_sign = "02f7f9669f1269595c4c69bcd4a3c52e" s_s_c_web_server_sign2 = "d888700f6f324ec0f32b44c32c50bde1" pageurl = "https://rucaptcha.com/demo/keycaptcha" - + kwargs_params = { + "funcaptchaApiJSSubdomain": "sample-api.arkoselabs.com", + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } """ Success tests """ @@ -21,10 +27,43 @@ def test_methods_exists(self): assert "captcha_handler" in KeyCaptcha.__dict__.keys() assert "aio_captcha_handler" in KeyCaptcha.__dict__.keys() + @pytest.mark.parametrize("method", KeyCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = KeyCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + s_s_c_user_id=self.s_s_c_user_id, + s_s_c_session_id=self.s_s_c_session_id, + s_s_c_web_server_sign=self.s_s_c_web_server_sign, + s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["s_s_c_user_id"] == self.s_s_c_user_id + assert instance.create_task_payload["task"]["s_s_c_session_id"] == self.s_s_c_session_id + assert instance.create_task_payload["task"]["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign + assert instance.create_task_payload["task"]["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + + def test_kwargs(self): + instance = KeyCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + s_s_c_user_id=self.s_s_c_user_id, + s_s_c_session_id=self.s_s_c_session_id, + s_s_c_web_server_sign=self.s_s_c_web_server_sign, + s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, + method=KeyCaptchaEnm.KeyCaptchaTaskProxyless, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + def test_basic_data(self): instance = KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, @@ -32,24 +71,16 @@ def test_basic_data(self): method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) - assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 - result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -57,7 +88,7 @@ def test_basic_data(self): async def test_aio_basic_data(self): instance = KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, @@ -65,61 +96,42 @@ async def test_aio_basic_data(self): method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) - assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 - - result = await instance.aio_captcha_handler() + result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["s_s_c_user_id"] == self.s_s_c_user_id - assert instance.create_task_payload["s_s_c_session_id"] == self.s_s_c_session_id - assert instance.create_task_payload["s_s_c_web_server_sign"] == self.s_s_c_web_server_sign - assert instance.create_task_payload["s_s_c_web_server_sign2"] == self.s_s_c_web_server_sign2 + assert await instance.aio_captcha_handler() """ Fail tests @@ -129,7 +141,7 @@ def test_wrong_method(self): with pytest.raises(ValueError): KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, @@ -137,7 +149,8 @@ def test_wrong_method(self): method=self.get_random_string(length=5), ) - def test_no_pageurl(self): + @pytest.mark.parametrize("method", KeyCaptchaEnm.list_values()) + def test_no_websiteURL(self, method): with pytest.raises(TypeError): KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -145,38 +158,41 @@ def test_no_pageurl(self): s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, + method=method, ) - def test_no_s_s_c_user_id(self): + @pytest.mark.parametrize("method", KeyCaptchaEnm.list_values()) + def test_no_s_s_c_user_id(self, method: str): with pytest.raises(TypeError): KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, + method=method, ) - def test_no_s_s_c_web_server_sign(self): + @pytest.mark.parametrize("method", KeyCaptchaEnm.list_values()) + def test_no_s_s_c_web_server_sign(self, method: str): with pytest.raises(TypeError): KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign2=self.s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, + method=method, ) - def test_no_s_s_c_web_server_sign2(self): + @pytest.mark.parametrize("method", KeyCaptchaEnm.list_values()) + def test_no_s_s_c_web_server_sign2(self, method: str): with pytest.raises(TypeError): KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, s_s_c_user_id=self.s_s_c_user_id, s_s_c_session_id=self.s_s_c_session_id, s_s_c_web_server_sign=self.s_s_c_web_server_sign, - method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, + method=method, ) From db124cca75bee908c9d22b56237020caca367f3e Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 17:58:00 +0300 Subject: [PATCH 126/175] Update key_captcha.py --- src/python_rucaptcha/key_captcha.py | 32 +++-------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/src/python_rucaptcha/key_captcha.py b/src/python_rucaptcha/key_captcha.py index 2fa74f84..257b8ac6 100644 --- a/src/python_rucaptcha/key_captcha.py +++ b/src/python_rucaptcha/key_captcha.py @@ -5,7 +5,7 @@ class KeyCaptcha(BaseCaptcha): def __init__( self, - pageurl: str, + websiteURL: str, s_s_c_user_id: str, s_s_c_session_id: str, s_s_c_web_server_sign: str, @@ -19,7 +19,7 @@ def __init__( Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page + websiteURL: Full URL of the captcha page s_s_c_user_id: Value of `s_s_c_user_id` parameter found on the page s_s_c_session_id: Value of `s_s_c_session_id` parameter found on the page s_s_c_web_server_sign: Value of `s_s_c_web_server_sign` parameter found on the page @@ -68,7 +68,7 @@ def __init__( self.create_task_payload["task"].update( { - "pageurl": pageurl, + "websiteURL": websiteURL, "s_s_c_user_id": s_s_c_user_id, "s_s_c_session_id": s_s_c_session_id, "s_s_c_web_server_sign": s_s_c_web_server_sign, @@ -87,19 +87,6 @@ def captcha_handler(self, **kwargs): Args: kwargs: Parameters for the `requests` library - Examples: - >>> KeyCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - ... ).captcha_handler() - { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response @@ -113,19 +100,6 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> KeyCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=KeyCaptchaEnm.KeyCaptchaTaskProxyless.value - ... ).captcha_handler() - { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response From 08891fdb7b6855f8d8be2d5698739b7cc5c3a77e Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:02 +0300 Subject: [PATCH 127/175] Update conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 0dec1d4d..faef9c5e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,8 +16,8 @@ key_captcha, text_captcha, image_captcha, + lemin_captcha, rotate_captcha, - lemin_cropped_captcha, ) from python_rucaptcha.__version__ import __version__ From 0152efd102049c69d8ce585fa70219c55f870784 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:04 +0300 Subject: [PATCH 128/175] Delete lemin_cropped_captcha.py --- src/python_rucaptcha/lemin_cropped_captcha.py | 100 ------------------ 1 file changed, 100 deletions(-) delete mode 100644 src/python_rucaptcha/lemin_cropped_captcha.py diff --git a/src/python_rucaptcha/lemin_cropped_captcha.py b/src/python_rucaptcha/lemin_cropped_captcha.py deleted file mode 100644 index 520b22da..00000000 --- a/src/python_rucaptcha/lemin_cropped_captcha.py +++ /dev/null @@ -1,100 +0,0 @@ -from .core.base import BaseCaptcha -from .core.enums import LeminCroppedCaptchaEnm - - -class LeminCroppedCaptcha(BaseCaptcha): - def __init__( - self, - pageurl: str, - captcha_id: str, - div_id: str, - method: str = LeminCroppedCaptchaEnm.LeminTaskProxyless.value, - *args, - **kwargs, - ): - """ - The class is used to work with Lemin Cropped Captcha. - - Args: - rucaptcha_key: User API key - pageurl: Full URL of the captcha page - captcha_id: The value of the `captcha_id` parameter found on the site - div_id: The `id` of the parent `div`, which contains the captcha - method: Captcha type - kwargs: Not required params for task creation request - - Examples: - >>> LeminCroppedCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://dashboard.leminnow.com/auth/signup", - ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", - ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, - ... api_server="api.leminnow.com" - ... ).captcha_handler() - { - "captchaSolve": { - "answer":"0xc....EUa", - "challenge_id":"58.....63a" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - >>> await LeminCroppedCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://dashboard.leminnow.com/auth/signup", - ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", - ... div_id="lemin-cropped-captcha", - ... method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, - ... api_server="api.leminnow.com" - ... ).aio_captcha_handler() - { - "captchaSolve": { - "answer":"0xc....EUa", - "challenge_id":"58.....63a" - }, - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - Returns: - Dict with full server response - - Notes: - https://rucaptcha.com/api-rucaptcha#lemin - """ - super().__init__(method=method, *args, **kwargs) - - self.create_task_payload["task"].update({"pageurl": pageurl, "captcha_id": captcha_id, "div_id": div_id}) - - # check user params - if method not in LeminCroppedCaptchaEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {LeminCroppedCaptchaEnm.list_values()}") - - def captcha_handler(self, **kwargs): - """ - Sync solving method - - Args: - kwargs: Parameters for the `requests` library - - Returns: - Dict with full server response - - Notes: - Check class docstirng for more info - """ - return self._processing_response(**kwargs) - - async def aio_captcha_handler(self): - """ - Async solving method - - Returns: - Dict with full server response - - Notes: - Check class docstirng for more info - """ - return await self._aio_processing_response() From b81fb441820b9ec16bab3e72de180ceb408e7aef Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:08 +0300 Subject: [PATCH 129/175] Create lemin_captcha.py --- src/python_rucaptcha/lemin_captcha.py | 110 ++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/python_rucaptcha/lemin_captcha.py diff --git a/src/python_rucaptcha/lemin_captcha.py b/src/python_rucaptcha/lemin_captcha.py new file mode 100644 index 00000000..d3c274af --- /dev/null +++ b/src/python_rucaptcha/lemin_captcha.py @@ -0,0 +1,110 @@ +from .core.base import BaseCaptcha +from .core.enums import LeminCaptchaEnm + + +class LeminCaptcha(BaseCaptcha): + def __init__( + self, + websiteURL: str, + captchaId: str, + div_id: str, + method: str = LeminCaptchaEnm.LeminTaskProxyless.value, + *args, + **kwargs, + ): + """ + The class is used to work with Lemin Cropped Captcha. + + Args: + rucaptcha_key: User API key + websiteURL: Full URL of the captcha page + captchaId: The value of the `captcha_id` parameter found on the site + div_id: The `id` of the parent `div`, which contains the captcha + method: Captcha type + kwargs: Not required params for task creation request + + Examples: + >>> LeminCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", + ... websiteURL="https://dashboard.leminnow.com/auth/signup", + ... captchaId="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", + ... div_id="lemin-cropped-captcha", + ... method=LeminCaptchaEnm.LeminTaskProxyless.value, + ... api_server="api.leminnow.com" + ... ).captcha_handler() + { + "errorId":0, + "status":"ready", + "solution":{ + "answer":"0xaxakx0xaxaax0xkxx3ox0x3ox3ox_...gAAAAABk8bgzEFOg9i3Jm", + "challenge_id":"e0348984-92ec-23af-1488-446e3a58946c" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, + } + + >>> await LeminCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", + ... websiteURL="https://dashboard.leminnow.com/auth/signup", + ... captcha_id="CROPPED_099216d_8ba061383fa24ef498115023aa7189d4", + ... div_id="lemin-cropped-captcha", + ... method=LeminCaptchaEnm.LeminTaskProxyless.value, + ... api_server="api.leminnow.com" + ... ).aio_captcha_handler() + { + "errorId":0, + "status":"ready", + "solution":{ + "answer":"0xaxakx0xaxaax0xkxx3ox0x3ox3ox_...gAAAAABk8bgzEFOg9i3Jm", + "challenge_id":"e0348984-92ec-23af-1488-446e3a58946c" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, + } + + Returns: + Dict with full server response + + Notes: + https://rucaptcha.com/api-docs/lemin + """ + super().__init__(method=method, *args, **kwargs) + + self.create_task_payload["task"].update({"websiteURL": websiteURL, "captchaId": captchaId, "div_id": div_id}) + + # check user params + if method not in LeminCaptchaEnm.list_values(): + raise ValueError(f"Invalid method parameter set, available - {LeminCaptchaEnm.list_values()}") + + def captcha_handler(self, **kwargs): + """ + Sync solving method + + Args: + kwargs: Parameters for the `requests` library + + Returns: + Dict with full server response + + Notes: + Check class docstirng for more info + """ + return self._processing_response(**kwargs) + + async def aio_captcha_handler(self): + """ + Async solving method + + Returns: + Dict with full server response + + Notes: + Check class docstirng for more info + """ + return await self._aio_processing_response() From 40f263ab6365f3d645399da2b123d161314c94c0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:12 +0300 Subject: [PATCH 130/175] Update test_funcaptcha.py --- tests/test_funcaptcha.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index 37ace31a..3d2be5e8 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -19,9 +19,6 @@ class TestFunCaptcha(BaseTest): "proxyAddress": BaseTest.proxyAddress, "proxyPort": BaseTest.proxyPort, } - """ - Success tests - """ def test_methods_exists(self): assert "captcha_handler" in FunCaptcha.__dict__.keys() @@ -50,6 +47,10 @@ def test_kwargs(self): assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + """ + Success tests + """ + def test_basic_data(self): instance = FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, From 40ea462c0cfe0c7804f8aab510e09a5d402c0a4b Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:13 +0300 Subject: [PATCH 131/175] Update test_lemin.py --- tests/test_lemin.py | 144 ++++++++++++++++++++++++-------------------- 1 file changed, 78 insertions(+), 66 deletions(-) diff --git a/tests/test_lemin.py b/tests/test_lemin.py index c14325db..00c3d24d 100644 --- a/tests/test_lemin.py +++ b/tests/test_lemin.py @@ -1,9 +1,9 @@ import pytest from tests.conftest import BaseTest -from python_rucaptcha.core.enums import LeminCroppedCaptchaEnm +from python_rucaptcha.core.enums import LeminCaptchaEnm +from python_rucaptcha.lemin_captcha import LeminCaptcha from python_rucaptcha.core.serializer import GetTaskResultResponseSer -from python_rucaptcha.lemin_cropped_captcha import LeminCroppedCaptcha class TestLeminCroppedCaptcha(BaseTest): @@ -11,102 +11,114 @@ class TestLeminCroppedCaptcha(BaseTest): api_server = "api.leminnow.com" div_id = "lemin-cropped-captcha" captcha_id = "CROPPED_099216d_8ba061383fa24ef498115023aa7189d4" + kwargs_params = { + "leminApiServerSubdomain": "https://api.leminnow.com/", + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } + + def test_methods_exists(self): + assert "captcha_handler" in LeminCaptcha.__dict__.keys() + assert "aio_captcha_handler" in LeminCaptcha.__dict__.keys() + + @pytest.mark.parametrize("method", LeminCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = LeminCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + captchaId=self.captcha_id, + div_id=self.div_id, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + + def test_kwargs(self): + instance = LeminCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + captchaId=self.captcha_id, + div_id=self.div_id, + method=LeminCaptchaEnm.LeminTaskProxyless, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) """ Success tests """ - def test_methods_exists(self): - assert "captcha_handler" in LeminCroppedCaptcha.__dict__.keys() - assert "aio_captcha_handler" in LeminCroppedCaptcha.__dict__.keys() - def test_basic_data(self): - instance = LeminCroppedCaptcha( + instance = LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, div_id=self.div_id, api_server=self.api_server, - method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, + method=LeminCaptchaEnm.LeminTaskProxyless.value, ) - assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["captcha_id"] == self.captcha_id - assert instance.create_task_payload["div_id"] == self.div_id - assert instance.create_task_payload["api_server"] == self.api_server - result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], dict) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_basic_data(self): - instance = LeminCroppedCaptcha( + instance = LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, div_id=self.div_id, api_server=self.api_server, - method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, + method=LeminCaptchaEnm.LeminTaskProxyless.value, ) - assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["captcha_id"] == self.captcha_id - assert instance.create_task_payload["div_id"] == self.div_id - assert instance.create_task_payload["api_server"] == self.api_server - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], dict) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): - with LeminCroppedCaptcha( + with LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, div_id=self.div_id, - method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, + method=LeminCaptchaEnm.LeminTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["captcha_id"] == self.captcha_id - assert instance.create_task_payload["div_id"] == self.div_id + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): - async with LeminCroppedCaptcha( + async with LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, div_id=self.div_id, - method=LeminCroppedCaptchaEnm.LeminTaskProxyless.value, + method=LeminCaptchaEnm.LeminTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == LeminCroppedCaptchaEnm.LeminTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["captcha_id"] == self.captcha_id - assert instance.create_task_payload["div_id"] == self.div_id + assert await instance.aio_captcha_handler() """ Fail tests @@ -114,38 +126,38 @@ async def test_context_aio_basic_data(self): def test_wrong_method(self): with pytest.raises(ValueError): - LeminCroppedCaptcha( + LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, div_id=self.div_id, api_server=self.api_server, method=self.get_random_string(length=5), ) - def test_no_pageurl(self): + def test_no_websiteURL(self): with pytest.raises(TypeError): - LeminCroppedCaptcha( + LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - captcha_id=self.captcha_id, + captchaId=self.captcha_id, div_id=self.div_id, method=self.get_random_string(length=5), ) def test_no_div_id(self): with pytest.raises(TypeError): - LeminCroppedCaptcha( + LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - captcha_id=self.captcha_id, + websiteURL=self.pageurl, + captchaId=self.captcha_id, method=self.get_random_string(length=5), ) - def test_no_captcha_id(self): + def test_no_captchaId(self): with pytest.raises(TypeError): - LeminCroppedCaptcha( + LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, + websiteURL=self.pageurl, div_id=self.div_id, method=self.get_random_string(length=5), ) From 32b9b47a733f27e4b7ac6a3b18c775f90604e62d Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:18 +0300 Subject: [PATCH 132/175] Update lemin_example.py --- src/examples/lemin_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/examples/lemin_example.py b/src/examples/lemin_example.py index 191291ab..80e076da 100644 --- a/src/examples/lemin_example.py +++ b/src/examples/lemin_example.py @@ -1,7 +1,7 @@ import asyncio from python_rucaptcha.core.enums import LeminCroppedCaptchaEnm -from python_rucaptcha.lemin_cropped_captcha import LeminCroppedCaptcha +from python_rucaptcha.lemin_captcha import LeminCroppedCaptcha # Rucaptcha API Key from your account RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" From 553d133b77c087f1044aa3ffc23c0afc82022deb Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:21 +0300 Subject: [PATCH 133/175] Update enums.py --- src/python_rucaptcha/core/enums.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/enums.py b/src/python_rucaptcha/core/enums.py index 0ada0e1c..ca3fa916 100644 --- a/src/python_rucaptcha/core/enums.py +++ b/src/python_rucaptcha/core/enums.py @@ -60,7 +60,7 @@ class ReCaptchaEnm(str, MyEnum): RecaptchaV3TaskProxyless = "RecaptchaV3TaskProxyless" -class LeminCroppedCaptchaEnm(str, MyEnum): +class LeminCaptchaEnm(str, MyEnum): LeminTaskProxyless = "LeminTaskProxyless" LeminTask = "LeminTask" From 13d6de6326a7b3bc49f3b33b80b100bf72291280 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:51:23 +0300 Subject: [PATCH 134/175] Update example.rst --- docs/modules/lemin/example.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/modules/lemin/example.rst b/docs/modules/lemin/example.rst index 0d719d67..17fcdaea 100644 --- a/docs/modules/lemin/example.rst +++ b/docs/modules/lemin/example.rst @@ -1,12 +1,12 @@ -LeminCroppedCaptcha -=================== +LeminCaptcha +============ To import this module: .. code-block:: python - from python_rucaptcha.lemin_cropped_captcha import LeminCroppedCaptcha + from python_rucaptcha.lemin_cropped_captcha import LeminCaptcha -.. autoclass:: python_rucaptcha.lemin_cropped_captcha.LeminCroppedCaptcha +.. autoclass:: python_rucaptcha.lemin_cropped_captcha.LeminCaptcha :members: \ No newline at end of file From e8f2f9701a8f7478f4c53e6895dff3ba69caf262 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 18:52:15 +0300 Subject: [PATCH 135/175] remove examples folder --- src/examples/captcha_control_example.py | 66 -------------- src/examples/capy_captcha_example.py | 42 --------- src/examples/funcaptcha_example.py | 35 -------- src/examples/geetest_example.py | 68 --------------- src/examples/hcaptcha_example.py | 30 ------- src/examples/image_captcha_example.py | 33 ------- src/examples/key_captcha_example.py | 45 ---------- src/examples/lemin_example.py | 42 --------- src/examples/recaptcha_example.py | 110 ------------------------ src/examples/rotate_example.py | 40 --------- src/examples/text_captcha_example.py | 27 ------ src/examples/tiktok_example.py | 46 ---------- src/examples/yandex_smart_example.py | 38 -------- 13 files changed, 622 deletions(-) delete mode 100644 src/examples/captcha_control_example.py delete mode 100644 src/examples/capy_captcha_example.py delete mode 100644 src/examples/funcaptcha_example.py delete mode 100644 src/examples/geetest_example.py delete mode 100644 src/examples/hcaptcha_example.py delete mode 100644 src/examples/image_captcha_example.py delete mode 100644 src/examples/key_captcha_example.py delete mode 100644 src/examples/lemin_example.py delete mode 100644 src/examples/recaptcha_example.py delete mode 100644 src/examples/rotate_example.py delete mode 100644 src/examples/text_captcha_example.py delete mode 100644 src/examples/tiktok_example.py delete mode 100644 src/examples/yandex_smart_example.py diff --git a/src/examples/captcha_control_example.py b/src/examples/captcha_control_example.py deleted file mode 100644 index 25c7f76c..00000000 --- a/src/examples/captcha_control_example.py +++ /dev/null @@ -1,66 +0,0 @@ -import asyncio - -from python_rucaptcha.control import Control -from python_rucaptcha.core.enums import ControlEnm - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -# Balance control - -control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) -result = control_captcha.additional_methods() - -print(result) - -# Report control - -control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) -result = control_captcha.report(id="-1") - -print(result) - -control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) -result = control_captcha.report(id="-1") - -print(result) - -# Pingback control - -control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) -result = control_captcha.domain_control(addr="all") - -print(result) - -# ASYNC - - -async def run(): - # Balance control - - control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.GETBALANCE.value) - result = await control_captcha.aio_additional_methods() - - print(result) - - # Report control - - control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.REPORTBAD.value) - result = await control_captcha.aio_report(id="-1") - - print(result) - - control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.REPORTGOOD.value) - result = await control_captcha.aio_report(id="-1") - - print(result) - - # Pingback control - - control_captcha = Control(rucaptcha_key=RUCAPTCHA_KEY, action=ControlEnm.DEL_PINGBACK.value) - result = await control_captcha.aio_domain_control(addr="all") - - print(result) - - -asyncio.run(run()) diff --git a/src/examples/capy_captcha_example.py b/src/examples/capy_captcha_example.py deleted file mode 100644 index 694a38a9..00000000 --- a/src/examples/capy_captcha_example.py +++ /dev/null @@ -1,42 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import CapyPuzzleEnm -from python_rucaptcha.capy_puzzle import CapyPuzzle - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -captchakey = "PUZZLE_Cme4hZLjuZRMYC3uh14C52D3uNms5w" -pageurl = "https://www.capy.me/account/register/" -api_server = "https://jp.api.capy.me/" -versions = ["puzzle", "avatar"] - -capy = CapyPuzzle( - rucaptcha_key=RUCAPTCHA_KEY, - captchakey=captchakey, - pageurl=pageurl, - method=CapyPuzzleEnm.CAPY.value, - api_server=api_server, - version=versions[0], -) -result = capy.captcha_handler() - -print(result) - - -async def run(): - try: - result = await CapyPuzzle( - rucaptcha_key=RUCAPTCHA_KEY, - captchakey=captchakey, - pageurl=pageurl, - method=CapyPuzzleEnm.CAPY.value, - api_server=api_server, - version=versions[0], - ).aio_captcha_handler() - print(result) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/funcaptcha_example.py b/src/examples/funcaptcha_example.py deleted file mode 100644 index 1ad3fb40..00000000 --- a/src/examples/funcaptcha_example.py +++ /dev/null @@ -1,35 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import FunCaptchaEnm -from python_rucaptcha.fun_captcha import FunCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - - -publickey = "69A21A01-CC7B-B9C6-1111-E7FA06677FFC" -pageurl = "https://api.funcaptcha.com/fc/api/nojs/" -surl = "https://client-api.arkoselabs.com" - -fun_captcha = FunCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, pageurl=pageurl, publickey=publickey, surl=surl, method=FunCaptchaEnm.FUNCAPTCHA.value -) -result = fun_captcha.captcha_handler() -print(result) - - -async def run(): - try: - result = await FunCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - publickey=publickey, - surl=surl, - method=FunCaptchaEnm.FUNCAPTCHA.value, - ).aio_captcha_handler() - print(result) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/geetest_example.py b/src/examples/geetest_example.py deleted file mode 100644 index d0ed4643..00000000 --- a/src/examples/geetest_example.py +++ /dev/null @@ -1,68 +0,0 @@ -import asyncio - -import requests - -from python_rucaptcha.gee_test import GeeTest -from python_rucaptcha.core.enums import GeetestEnm - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f31111a8171111111111a758570" - -""" -Geetest example -""" - -resp = requests.get("https://www.geetest.com/demo/gt/register-enFullpage-official") -resp_data = resp.json() - -gt = GeeTest( - rucaptcha_key=RUCAPTCHA_KEY, - gt=resp_data["gt"], - method=GeetestEnm.GEETEST.value, - pageurl="https://www.site.com/page/", - api_server="api-na.geetest.com", -) - -print(gt.captcha_handler(challenge=resp_data["challenge"])) - - -async def run(): - gt = GeeTest( - rucaptcha_key=RUCAPTCHA_KEY, - gt="f1ab2cdefa3456789012345b6c78d90e", - method=GeetestEnm.GEETEST.value, - pageurl="https://www.site.com/page/", - api_server="api-na.geetest.com", - ) - result = await gt.aio_captcha_handler(challenge="12345678abc90123d45678ef90123a456b") - print(result) - - -asyncio.run(run()) - -""" -Geetest 4 example -""" - -gt = GeeTest( - rucaptcha_key=RUCAPTCHA_KEY, - method=GeetestEnm.GEETEST_V4.value, - pageurl="https://rucaptcha.com/demo/geetest-v4", - captcha_id="e392e1d7fd421dc63325744d5a2b9c73", -) - -print(gt.captcha_handler()) - - -async def run(): - gt = GeeTest( - rucaptcha_key=RUCAPTCHA_KEY, - method=GeetestEnm.GEETEST_V4.value, - pageurl="https://rucaptcha.com/demo/geetest-v4", - captcha_id="e392e1d7fd421dc63325744d5a2b9c73", - ) - result = await gt.aio_captcha_handler() - print(result) - - -asyncio.run(run()) diff --git a/src/examples/hcaptcha_example.py b/src/examples/hcaptcha_example.py deleted file mode 100644 index b9c6b5b1..00000000 --- a/src/examples/hcaptcha_example.py +++ /dev/null @@ -1,30 +0,0 @@ -import asyncio - -from python_rucaptcha.hcaptcha import HCaptcha -from python_rucaptcha.core.enums import HCaptchaEnm - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -sitekey = "3ceb8624-1970-4e6b-91d5-70317b70b651" -pageurl = "https://rucaptcha.com/demo/hcaptcha" - -lemin_captcha = HCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, sitekey=sitekey, pageurl=pageurl, method=HCaptchaEnm.HCAPTCHA.value -) -result = lemin_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - lemin_captcha = await HCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, sitekey=sitekey, pageurl=pageurl, method=HCaptchaEnm.HCAPTCHA.value - ).aio_captcha_handler() - print(lemin_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/image_captcha_example.py b/src/examples/image_captcha_example.py deleted file mode 100644 index e8927789..00000000 --- a/src/examples/image_captcha_example.py +++ /dev/null @@ -1,33 +0,0 @@ -import asyncio - -from python_rucaptcha.image_captcha import ImageCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -captcha_file = "src/examples/088636.png" -captcha_url = "https://rucaptcha.com/dist/web/99581b9d446a509a0a01954438a5e36a.jpg" - - -image_captcha = ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY) -result = image_captcha.captcha_handler(captcha_file=captcha_file) - -print(result) - -image_captcha = ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY) -result = image_captcha.captcha_handler(captcha_link=captcha_url) - -print(result) - - -async def run(): - image_captcha = ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY) - result = await image_captcha.aio_captcha_handler(captcha_file=captcha_file) - print(result) - - image_captcha = ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY) - result = await image_captcha.aio_captcha_handler(captcha_link=captcha_url) - print(result) - - -asyncio.run(run()) diff --git a/src/examples/key_captcha_example.py b/src/examples/key_captcha_example.py deleted file mode 100644 index 1d14efb1..00000000 --- a/src/examples/key_captcha_example.py +++ /dev/null @@ -1,45 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import KeyCaptchaEnm -from python_rucaptcha.key_captcha import KeyCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - -s_s_c_user_id = "184015" -s_s_c_session_id = "0917788cad24ad3a69813c4fcd556061" -s_s_c_web_server_sign = "02f7f9669f1269595c4c69bcd4a3c52e" -s_s_c_web_server_sign2 = "d888700f6f324ec0f32b44c32c50bde1" -pageurl = "https://rucaptcha.com/demo/keycaptcha" - -key_captcha = KeyCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - s_s_c_user_id=s_s_c_user_id, - s_s_c_session_id=s_s_c_session_id, - s_s_c_web_server_sign=s_s_c_web_server_sign, - s_s_c_web_server_sign2=s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, -) -result = key_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - key_captcha = await KeyCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - s_s_c_user_id=s_s_c_user_id, - s_s_c_session_id=s_s_c_session_id, - s_s_c_web_server_sign=s_s_c_web_server_sign, - s_s_c_web_server_sign2=s_s_c_web_server_sign2, - method=KeyCaptchaEnm.KEYCAPTCHA.value, - ).aio_captcha_handler() - print(key_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/lemin_example.py b/src/examples/lemin_example.py deleted file mode 100644 index 80e076da..00000000 --- a/src/examples/lemin_example.py +++ /dev/null @@ -1,42 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import LeminCroppedCaptchaEnm -from python_rucaptcha.lemin_captcha import LeminCroppedCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - -pageurl = "https://dashboard.leminnow.com/auth/signup" -api_server = "api.leminnow.com" -div_id = "lemin-cropped-captcha" -captcha_id = "CROPPED_099216d_8ba061383fa24ef498115023aa7189d4" - -lemin_captcha = LeminCroppedCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - captcha_id=captcha_id, - div_id=div_id, - method=LeminCroppedCaptchaEnm.LEMIN.value, - api_server=api_server, -) -result = lemin_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - lemin_captcha = await LeminCroppedCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - captcha_id=captcha_id, - div_id=div_id, - method=LeminCroppedCaptchaEnm.LEMIN.value, - api_server=api_server, - ).aio_captcha_handler() - print(lemin_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/recaptcha_example.py b/src/examples/recaptcha_example.py deleted file mode 100644 index 811646df..00000000 --- a/src/examples/recaptcha_example.py +++ /dev/null @@ -1,110 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import ReCaptchaEnm -from python_rucaptcha.re_captcha import ReCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - -# ReCaptchaV3 - -googlekey = "6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH" -pageurl = "https://rucaptcha.com/demo/recaptcha-v2" - -re_captcha = ReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, -) -result = re_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - re_captcha = await ReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, - ).aio_captcha_handler() - print(re_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) - -# ReCaptchaV3 invisible -googlekey = "6LfDxboZAAAAAD6GHukjvUy6lszoeG3H4nQW57b6" -pageurl = "https://rucaptcha.com/demo/recaptcha-v2-invisible" - -re_captcha = ReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, - invisible=1, -) -result = re_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - re_captcha = await ReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, - invisible=1, - ).aio_captcha_handler() - print(re_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) - -# ReCaptchaV3 - -googlekey = "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu" -pageurl = "https://rucaptcha.com/demo/recaptcha-v3" -version = "v3" -action = "demo_action" -score = 0.1 - -re_captcha = ReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, - version=version, - action=action, - score=score, -) -result = re_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - re_captcha = await aioReCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - googlekey=googlekey, - method=ReCaptchaEnm.USER_RECAPTCHA.value, - version=version, - action=action, - score=score, - ).captcha_handler() - print(re_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) diff --git a/src/examples/rotate_example.py b/src/examples/rotate_example.py deleted file mode 100644 index e071a777..00000000 --- a/src/examples/rotate_example.py +++ /dev/null @@ -1,40 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import RotateCaptchaEnm -from python_rucaptcha.rotate_captcha import RotateCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -captcha_url = "https://rucaptcha.com/dist/web/b771cc7c5eb0c1a811fcb91d54e4443a.png" -captcha_path = "src/examples/rotate/rotate_ex.png" - -rotate_captcha = RotateCaptcha(rucaptcha_key=RUCAPTCHA_KEY, method=RotateCaptchaEnm.ROTATECAPTCHA.value) -# file URL -result = rotate_captcha.captcha_handler(captcha_link=captcha_url) - -print(result) - -# file path -result = rotate_captcha.captcha_handler(captcha_link=captcha_path) - -print(result) - -# ASYNC example - -rotate_captcha = RotateCaptcha(rucaptcha_key=RUCAPTCHA_KEY, method=RotateCaptchaEnm.ROTATECAPTCHA.value) - - -async def run(): - # file URL - result = await rotate_captcha.aio_captcha_handler(captcha_link=captcha_url) - - print(result) - - # file path - result = await rotate_captcha.aio_captcha_handler(captcha_link=captcha_path) - - print(result) - - -asyncio.run(run()) diff --git a/src/examples/text_captcha_example.py b/src/examples/text_captcha_example.py deleted file mode 100644 index 72951d7c..00000000 --- a/src/examples/text_captcha_example.py +++ /dev/null @@ -1,27 +0,0 @@ -import asyncio - -from python_rucaptcha.text_captcha import TextCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad911111111111ca81755768608fa758570" - -# Balance control - -text_captcha = TextCaptcha(rucaptcha_key=RUCAPTCHA_KEY, language=1) -result = text_captcha.captcha_handler(textcaptcha="Какой сегодня день недели?") - -print(result) - -# ASYNC - - -async def run(): - # Balance control - - text_captcha = TextCaptcha(rucaptcha_key=RUCAPTCHA_KEY, language=1) - result = await text_captcha.aio_captcha_handler(textcaptcha="Какой сегодня день недели?") - - print(result) - - -asyncio.run(run()) diff --git a/src/examples/tiktok_example.py b/src/examples/tiktok_example.py deleted file mode 100644 index 71775a4b..00000000 --- a/src/examples/tiktok_example.py +++ /dev/null @@ -1,46 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import TikTokCaptchaEnm -from python_rucaptcha.TikTokCaptcha import TikTokCaptcha, aioTikTokCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - -pageurl = "https://www.tiktok.com/login/phone-or-email/email" -aid = "1459" -host = "https://www-useast1a.tiktok.com" -cookies = """tt_csrf_token=8TwpFXMK-xelhfHWNk3vCmOMS_IywmgR76J0; _abck=8C88FA5F886F14E362F71367E51C4A9E~-1~YAAQjHcRJX90XWqCAQAA741ldQgF9RvxGZfIEjhEFlVUSExtmO4pX+v3KcL4MDHYTdUnHP5y+auSOIIqFVMAhfKhu0OglashmiyFuGaRCbjoAKcSq18ov43zc4xIGnOIh2njJYLO8XTTK4NAUPzQsv90nNTiC4sJ8J28WJcD8rWiJohPmtVi++J2hkWuNrq4kfVHifiw0a6J11rPUgzoY0sYId9L3b7bEGlYidstBEVkxsdIakysU7WPRPQuXQ5ORX1y9VRI1/S8SRJCPT8hsw5VGnA3ZTWoos+U2QNe6jOmh+r2lVGQp26d1NuK4j4KeexEGwwIRC3NbMPnoM7svr7Ah5/ZgTbRdqrfr0TxYNtD+BQJ/BZvEtHQ0g==~-1~-1~-1; ak_bmsc=0C59B98852D34B6024F09565AEF3DABF~000000000000000000000000000000~YAAQjHcRJYB0XWqCAQAA741ldRAyqwRUurqvl1ooYUAfu4RlKyAekfk9EdU+PnOOEzfrYTH4vBiM5Tyu53PXzOFxSv+6Mmr/eS525r8YKkC4OlBSXNEKp49lcOeEir0EZc5FDSa1GsdGTOeqds7kEtGeAoGYOfbaFqebrqcgXIFm6bruPiaQSIa71ibE0RWEylGZUqEm9XidFgHi7owbbDfnFIHjAkY9OIBXtCyysN6f2LnjA77U6Iz8Vc+ZnnCy7EpU27zBp9g8gHc6XlsWgVZczCkI2sAyvLNyhNdNvr66DFXQGPooUVFt1eu7Wr84hyeqkVIZ/e6JeO7eeWD3m3BJdhSLFH9cG8Inu+ucssezA0HGBWRLLsuvtQcouMbyiC0/QMhAfy2ZEw==; bm_sz=2D2B267FF82108C34A71921FDD3E4210~YAAQjHcRJYJ0XWqCAQAA741ldRA3VZyY/6SSndh905A0t2BxLX6h2sT3tz6/c3OetEbNcLssuaKjLmUUBjCsMqknZi/wN8Ak90SsKwDcOxrRrVIbsiG1mvfU2XAkrCe+l9iBIi5PdoSje6KzSXfW975Ozpz6dADDiT+KRHaQV4S/HdmjZf4U8AH0JzZe2LvkB1Wuq/HOUVsP7HVY37MPf9RvRjCKvXG8JO5lZ6e3AZtn+Gb8CITDkOQb9Sf1HlFYFMt3PiwG6Rs1L7jiSaDIfqTUJcId0ho038whNTw4e0UPmLs=~4474177~3753529; __tea_cache_tokens_1988={"_type_":"default","user_unique_id":"7128902427751990789","timestamp":1659826966712}; ttwid=1|oK5Qviu6-AtiV6tRgdrXlMWI53OUuO9saqvbF-oeiK8|1659826966|21b12ceb761e86e9047915dc0ac9408df142065490e46ef5d28c92ba67c7593e; msToken=u4oKalLxmidukiJRtA0mRHvZtHc3xEbPiTstK6IsUUF_a1I4N94cB6OComtfBmmIdabLxfLi_eVSRGGW3_k3x2KlKqIp3XG04NEfrTyOl9URRszHOpX3; msToken=u4oKalLxmidukiJRtA0mRHvZtHc3xEbPiTstK6IsUUF_a1I4N94cB6OComtfBmmIdabLxfLi_eVSRGGW3_k3x2KlKqIp3XG04NEfrTyOl9URRszHOpX3""" - - -tiktok_captcha = TikTokCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - method=TikTokCaptchaEnm.TIKTOK.value, - pageurl=pageurl, - aid=aid, - host=host, - cookies=cookies, -) -result = tiktok_captcha.captcha_handler() - -print(result) - -# ASYNC - - -async def run(): - # Balance control - - tiktok_captcha = aioTikTokCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - method=TikTokCaptchaEnm.TIKTOK.value, - pageurl=pageurl, - aid=aid, - host=host, - cookies=cookies, - ) - result = await tiktok_captcha.captcha_handler() - - print(result) - - -asyncio.run(run()) diff --git a/src/examples/yandex_smart_example.py b/src/examples/yandex_smart_example.py deleted file mode 100644 index d2775032..00000000 --- a/src/examples/yandex_smart_example.py +++ /dev/null @@ -1,38 +0,0 @@ -import asyncio - -from python_rucaptcha.core.enums import YandexSmartCaptchaEnm -from python_rucaptcha.yandex_smart_captcha import YandexSmartCaptcha - -# Rucaptcha API Key from your account -RUCAPTCHA_KEY = "ad9053f111111111111111fa758570" - -# YandexSmartCaptcha - -sitekey = "FEXfAbHQsToo97VidNVk3j4dC74nGW1DgdxjtNB9" -pageurl = "https://captcha-api.yandex.ru/demo" - -ya_captcha = YandexSmartCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - sitekey=sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, -) -result = ya_captcha.captcha_handler() - -print(result) - - -async def run(): - try: - ya_captcha = await YandexSmartCaptcha( - rucaptcha_key=RUCAPTCHA_KEY, - pageurl=pageurl, - sitekey=sitekey, - method=YandexSmartCaptchaEnm.YANDEX.value, - ).aio_captcha_handler() - print(ya_captcha) - except Exception as err: - print(err) - - -asyncio.run(run()) From 5e1cba727f5dfbb7dc794fd22cd9572c3ea06646 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 19:07:25 +0300 Subject: [PATCH 136/175] Update turnstile.py --- src/python_rucaptcha/turnstile.py | 80 ++++++++++++++----------------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/src/python_rucaptcha/turnstile.py b/src/python_rucaptcha/turnstile.py index d438faee..431da884 100644 --- a/src/python_rucaptcha/turnstile.py +++ b/src/python_rucaptcha/turnstile.py @@ -5,8 +5,8 @@ class Turnstile(BaseCaptcha): def __init__( self, - pageurl: str, - sitekey: str, + websiteURL: str, + websiteKey: str, userAgent: str, method: str = TurnstileCaptchaEnm.TurnstileTaskProxyless.value, *args, @@ -17,47 +17,65 @@ def __init__( Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page - sitekey: The value of the `sitekey` parameter found on the site + websiteURL: Full URL of the captcha page + websiteKey: The value of the `sitekey` parameter found on the site userAgent: Your browser UserAgent method: Captcha type kwargs: Not required params for task creation request Examples: >>> Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://www.geetest.com/en/demo", - ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", + ... websiteURL="https://www.geetest.com/en/demo", + ... websiteKey="0x4AAAAAAAC3DHQFLr1GavRN", ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).captcha_handler() { - "captchaSolve": "0._VMG....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None + "errorId":0, + "status":"ready", + "solution":{ + "token":"0.zrSnRHO7h0HwSjSCU8oyzbjEtD8p.d62306d4ee00c77dda697f959ebbd7bd97", + "userAgent":"Mozilla/5.0 (....." + }, + "cost":"0.00145", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, } >>> await Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://www.geetest.com/en/demo", - ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", + ... websiteURL="https://www.geetest.com/en/demo", + ... websiteKey="0x4AAAAAAAC3DHQFLr1GavRN", ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ... ).aio_captcha_handler() { - "captchaSolve": "0._VMG....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None + "errorId":0, + "status":"ready", + "solution":{ + "token":"0.zrSnRHO7h0HwSjSCU8oyzbjEtD8p.d62306d4ee00c77dda697f959ebbd7bd97", + "userAgent":"Mozilla/5.0 (....." + }, + "cost":"0.00145", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#turnstile + https://rucaptcha.com/api-docs/cloudflare-turnstile """ super().__init__(method=method, *args, **kwargs) - self.create_task_payload["task"].update({"websiteKey": sitekey, "websiteURL": pageurl, "userAgent": userAgent}) + self.create_task_payload["task"].update( + {"websiteURL": websiteURL, "websiteKey": websiteKey, "userAgent": userAgent} + ) # check user params if method not in TurnstileCaptchaEnm.list_values(): @@ -70,19 +88,6 @@ def captcha_handler(self, **kwargs): Args: kwargs: Parameters for the `requests` library - Examples: - >>> Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://www.geetest.com/en/demo", - ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, - ... ).captcha_handler() - { - "captchaSolve": "0._VMG....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response @@ -95,19 +100,6 @@ async def aio_captcha_handler(self): """ Async solving method - Examples: - >>> await Turnstile(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://www.geetest.com/en/demo", - ... sitekey="0x4AAAAAAAC3DHQFLr1GavRN", - ... method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, - ... ).aio_captcha_handler() - { - "captchaSolve": "0._VMG....Pv", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - Returns: Dict with full server response From 7a5f0bfe21cc3ad50748f90819a28e502a515de3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 19:07:29 +0300 Subject: [PATCH 137/175] Update test_funcaptcha.py --- tests/test_funcaptcha.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index 3d2be5e8..d249108d 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -35,6 +35,7 @@ def test_args(self, method: str): assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY assert instance.create_task_payload["task"]["type"] == method assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websitePublicKey"] == self.publickey def test_kwargs(self): instance = FunCaptcha( From e8015d526570928fbc0352969557763d858432a0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 19:07:31 +0300 Subject: [PATCH 138/175] Update test_turnstile.py --- tests/test_turnstile.py | 106 ++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 42 deletions(-) diff --git a/tests/test_turnstile.py b/tests/test_turnstile.py index ac3c1230..3395f7d6 100644 --- a/tests/test_turnstile.py +++ b/tests/test_turnstile.py @@ -9,39 +9,67 @@ class TestTurnstile(BaseTest): pageurl = "https://rucaptcha.com/demo/cloudflare-turnstile" sitekey = "0x4AAAAAAAC3DHQFLr1GavRN" - - """ - Success tests - """ + useragent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" + kwargs_params = { + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } def test_methods_exists(self): assert "captcha_handler" in Turnstile.__dict__.keys() assert "aio_captcha_handler" in Turnstile.__dict__.keys() + @pytest.mark.parametrize("method", TurnstileCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = Turnstile( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websiteKey"] == self.sitekey + assert instance.create_task_payload["task"]["userAgent"] == self.useragent + + def test_kwargs(self): + instance = Turnstile( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, + method=TurnstileCaptchaEnm.TurnstileTaskProxyless, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + + """ + Success tests + """ + def test_basic_data(self): instance = Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) - assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -49,52 +77,45 @@ def test_basic_data(self): async def test_aio_basic_data(self): instance = Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) - assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, method=TurnstileCaptchaEnm.TurnstileTaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == TurnstileCaptchaEnm.TurnstileTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey + assert await instance.aio_captcha_handler() """ Fail tests @@ -104,7 +125,8 @@ def test_wrong_method(self): with pytest.raises(ValueError): Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - sitekey=self.sitekey, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + userAgent=self.useragent, method=self.get_random_string(5), ) From dcea0621d103a070bc4991e9b3b827141e4666cc Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:27:45 +0300 Subject: [PATCH 139/175] Update hcaptcha.py --- src/python_rucaptcha/hcaptcha.py | 84 +++++++++++++++----------------- 1 file changed, 38 insertions(+), 46 deletions(-) diff --git a/src/python_rucaptcha/hcaptcha.py b/src/python_rucaptcha/hcaptcha.py index 2ce56b1f..cbd6ab7c 100644 --- a/src/python_rucaptcha/hcaptcha.py +++ b/src/python_rucaptcha/hcaptcha.py @@ -5,8 +5,8 @@ class HCaptcha(BaseCaptcha): def __init__( self, - sitekey: str, - pageurl: str, + websiteURL: str, + websiteKey: str, method: str = HCaptchaEnm.HCaptchaTaskProxyless.value, *args, **kwargs, @@ -16,73 +16,65 @@ def __init__( Args: rucaptcha_key: User API key - sitekey: The value of the `data-sitekey` parameter found on the site - pageurl: Full URL of the captcha page + websiteURL: Full URL of the captcha page + websiteKey: The value of the `data-sitekey` parameter found on the site method: Captcha type kwargs: Not required params for task creation request Examples: >>> HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", + ... websiteKey="3ceb8624-1970-4e6b-91d5-70317b70b651", + ... websiteURL="https://rucaptcha.com/demo/hcaptcha", ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).captcha_handler() { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None + "errorId":0, + "status":"ready", + "solution":{ + "token":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A", + "respKey":"E0_eyJ0eXAiOiJK...y2w5_YbP8PGuJBBo", + "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5614.0 Safari/537.36", + "gRecaptchaResponse":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, } >>> await HCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", + ... websiteKey="3ceb8624-1970-4e6b-91d5-70317b70b651", + ... websiteURL="https://rucaptcha.com/demo/hcaptcha", ... method=HCaptchaEnm.HCaptchaTaskProxyless.value ... ).aio_captcha_handler() { - "captchaSolve": "P1_eyJ.....cp_J", - "taskId": 73052314114, - "error": False, - "errorBody": None - } - - DeathByCaptcha: - - >>> HCaptcha(rucaptcha_key="some_username:some_password", - ... service_type="deathbycaptcha", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCaptchaTaskProxyless.value - ... ).captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - - >>> await HCaptcha(rucaptcha_key="some_username:some_password", - ... service_type="deathbycaptcha", - ... sitekey="3ceb8624-1970-4e6b-91d5-70317b70b651", - ... pageurl="https://rucaptcha.com/demo/hcaptcha", - ... method=HCaptchaEnm.HCaptchaTaskProxyless.value - ... ).aio_captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "token":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A", + "respKey":"E0_eyJ0eXAiOiJK...y2w5_YbP8PGuJBBo", + "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5614.0 Safari/537.36", + "gRecaptchaResponse":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73243152973, } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_hcaptcha + https://rucaptcha.com/api-docs/hcaptcha """ super().__init__(method=method, *args, **kwargs) - self.create_task_payload["task"].update({"pageurl": pageurl, "sitekey": sitekey}) + self.create_task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey}) # check user params if method not in HCaptchaEnm.list_values(): From 8c512b37c4c80f92e83dfa493203214114a07eeb Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:27:47 +0300 Subject: [PATCH 140/175] Update test_hcaptcha.py --- tests/test_hcaptcha.py | 197 ++++++++++++----------------------------- 1 file changed, 58 insertions(+), 139 deletions(-) diff --git a/tests/test_hcaptcha.py b/tests/test_hcaptcha.py index 263f2d64..0d16b48d 100644 --- a/tests/test_hcaptcha.py +++ b/tests/test_hcaptcha.py @@ -1,118 +1,50 @@ import pytest -from tests.conftest import BaseTest, DeathByTest +from tests.conftest import BaseTest from python_rucaptcha.hcaptcha import HCaptcha -from python_rucaptcha.core.enums import ServiceEnm, HCaptchaEnm +from python_rucaptcha.core.enums import HCaptchaEnm from python_rucaptcha.core.serializer import GetTaskResultResponseSer -class BaseHCaptcha(BaseTest): +class TestHCaptcha(BaseTest): sitekey = "3ceb8624-1970-4e6b-91d5-70317b70b651" pageurl = "https://rucaptcha.com/demo/hcaptcha" - - -class TestHCaptcha(BaseHCaptcha): - """ - Success tests - """ + kwargs_params = { + "isInvisible": False, + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } def test_methods_exists(self): assert "captcha_handler" in HCaptcha.__dict__.keys() assert "aio_captcha_handler" in HCaptcha.__dict__.keys() - def test_basic_data(self): + @pytest.mark.parametrize("method", HCaptchaEnm.list_values()) + def test_args(self, method: str): instance = HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - sitekey=self.sitekey, - pageurl=self.pageurl, - method=HCaptchaEnm.HCaptchaTaskProxyless.value, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + method=method, ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websiteKey"] == self.sitekey - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - - result = instance.captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - - @pytest.mark.asyncio - async def test_aio_basic_data(self): + def test_kwargs(self): instance = HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - sitekey=self.sitekey, - pageurl=self.pageurl, - method=HCaptchaEnm.HCaptchaTaskProxyless.value, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + method=HCaptchaEnm.HCaptchaTaskProxyless, + **self.kwargs_params, ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - - result = await instance.aio_captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - - def test_context_basic_data(self): - with HCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - sitekey=self.sitekey, - pageurl=self.pageurl, - method=HCaptchaEnm.HCaptchaTaskProxyless.value, - ) as instance: - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - - @pytest.mark.asyncio - async def test_context_aio_basic_data(self): - async with HCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - sitekey=self.sitekey, - pageurl=self.pageurl, - method=HCaptchaEnm.HCaptchaTaskProxyless.value, - ) as instance: - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey - - """ - Fail tests - """ - - def test_wrong_method(self): - with pytest.raises(ValueError): - HCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - sitekey=self.sitekey, - pageurl=self.pageurl, - method=self.get_random_string(length=5), - ) - - -class TestDeathByHCaptcha(BaseHCaptcha, DeathByTest): """ Success tests """ @@ -120,29 +52,21 @@ class TestDeathByHCaptcha(BaseHCaptcha, DeathByTest): def test_basic_data(self): instance = HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - sitekey=self.sitekey, - pageurl=self.pageurl, + websiteURL=self.pageurl, + websiteKey=self.sitekey, method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -150,57 +74,52 @@ def test_basic_data(self): async def test_aio_basic_data(self): instance = HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - sitekey=self.sitekey, - pageurl=self.pageurl, + websiteURL=self.pageurl, + websiteKey=self.sitekey, method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - sitekey=self.sitekey, - pageurl=self.pageurl, + websiteURL=self.pageurl, + websiteKey=self.sitekey, method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - sitekey=self.sitekey, - pageurl=self.pageurl, + websiteURL=self.pageurl, + websiteKey=self.sitekey, method=HCaptchaEnm.HCaptchaTaskProxyless.value, ) as instance: - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA + assert await instance.aio_captcha_handler() - assert instance.create_task_payload["method"] == HCaptchaEnm.HCaptchaTaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["sitekey"] == self.sitekey + """ + Fail tests + """ + + def test_wrong_method(self): + with pytest.raises(ValueError): + HCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.sitekey, + method=self.get_random_string(length=5), + ) From 1bb6c95765ca02638e3a5e0744be69ef5e8f464b Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:38:26 +0300 Subject: [PATCH 141/175] Update conftest.py --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index d9799a19..f62cde00 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,12 +9,12 @@ @pytest.fixture(scope="function") def delay_func(): - time.sleep(2) + time.sleep(1) @pytest.fixture(scope="class") def delay_class(): - time.sleep(5) + time.sleep(3) @pytest.mark.usefixtures("delay_func") From 65a0a92c276810032db0d734b34f20a74e7b63c3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:47:04 +0300 Subject: [PATCH 142/175] Update conftest.py --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index f62cde00..4ff61cfc 100755 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,7 +9,7 @@ @pytest.fixture(scope="function") def delay_func(): - time.sleep(1) + time.sleep(0.5) @pytest.fixture(scope="class") From 6e2b50f9572aea5699cf1e40a58d0fcb69284c28 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:47:06 +0300 Subject: [PATCH 143/175] Update re_captcha.py --- src/python_rucaptcha/re_captcha.py | 115 +++++++++++++++-------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/src/python_rucaptcha/re_captcha.py b/src/python_rucaptcha/re_captcha.py index 206959a8..f8e02b81 100644 --- a/src/python_rucaptcha/re_captcha.py +++ b/src/python_rucaptcha/re_captcha.py @@ -1,5 +1,3 @@ -from typing import Optional - from .core.base import BaseCaptcha from .core.enums import ReCaptchaEnm @@ -7,9 +5,9 @@ class ReCaptcha(BaseCaptcha): def __init__( self, - pageurl: str, - googlekey: str, - version: Optional[str] = None, + websiteURL: str, + websiteKey: str, + minScore: float = 0.3, method: str = ReCaptchaEnm.RecaptchaV2TaskProxyless.value, *args, **kwargs, @@ -19,8 +17,8 @@ def __init__( Args: rucaptcha_key: User API key - pageurl: Full URL of the captcha page - googlekey: The value of the `googlekey` parameter you found in the page code + websiteURL: Full URL of the captcha page + websiteKey: The value of the `googlekey` parameter you found in the page code version: `v3` - indicates that this is reCAPTCHA V3 method: Captcha type @@ -31,10 +29,18 @@ def __init__( ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).captcha_handler() { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "gRecaptchaResponse":"03ADUVZw...UWxTAe6ncIa", + "token":"03ADUVZw...UWxTAe6ncIa" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -44,10 +50,18 @@ def __init__( ... invisible=1, ... ).captcha_handler() { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "gRecaptchaResponse":"03ADUVZw...UWxTAe6ncIa", + "token":"03ADUVZw...UWxTAe6ncIa" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -58,10 +72,18 @@ def __init__( ... min_score=0.2, ... ).captcha_handler() { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "gRecaptchaResponse":"03ADUVZw...UWxTAe6ncIa", + "token":"03ADUVZw...UWxTAe6ncIa" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> await ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", @@ -70,52 +92,33 @@ def __init__( ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).aio_captcha_handler() { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - - DeathByCaptcha: - - >>> ReCaptcha(rucaptcha_key="some_username:some_password", - ... service_type="deathbycaptcha", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value - ... ).captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None - } - - >>> await ReCaptcha(rucaptcha_key="some_username:some_password", - ... service_type="deathbycaptcha", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value - ... ).aio_captcha_handler() - { - 'captchaSolve': '03A....8h', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "gRecaptchaResponse":"03ADUVZw...UWxTAe6ncIa", + "token":"03ADUVZw...UWxTAe6ncIa" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_recaptchav2_new - https://rucaptcha.com/api-rucaptcha#invisible - https://rucaptcha.com/api-rucaptcha#solving_recaptchav3 - https://rucaptcha.com/api-rucaptcha#solving_recaptcha_enterprise + https://rucaptcha.com/api-docs/recaptcha-v2 + https://rucaptcha.com/api-docs/recaptcha-v3 + https://rucaptcha.com/api-docs/recaptcha-v2-enterprise """ super().__init__(method=method, *args, **kwargs) - self.create_task_payload["task"].update({"googlekey": googlekey, "pageurl": pageurl, "version": version}) + self.create_task_payload["task"].update( + {"websiteURL": websiteURL, "websiteKey": websiteKey, "minScore": minScore} + ) # check user params if method not in ReCaptchaEnm.list_values(): From 2368a5926c337ef3193dc2377b5adaf07587418f Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:47:09 +0300 Subject: [PATCH 144/175] Update test_recaptcha.py --- tests/test_recaptcha.py | 192 ++++++++++++---------------------------- 1 file changed, 56 insertions(+), 136 deletions(-) diff --git a/tests/test_recaptcha.py b/tests/test_recaptcha.py index 26d3cf56..a451865a 100644 --- a/tests/test_recaptcha.py +++ b/tests/test_recaptcha.py @@ -1,17 +1,47 @@ import pytest -from tests.conftest import BaseTest, DeathByTest -from python_rucaptcha.core.enums import ServiceEnm, ReCaptchaEnm +from tests.conftest import BaseTest +from python_rucaptcha.core.enums import ReCaptchaEnm from python_rucaptcha.re_captcha import ReCaptcha from python_rucaptcha.core.serializer import GetTaskResultResponseSer -class BaseReCaptcha(BaseTest): +class TestReCaptcha(BaseTest): googlekey = "6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH" pageurl = "https://rucaptcha.com/demo/recaptcha-v2" + kwargs_params = { + "recaptchaDataSValue": "sample-recaptchaDataSValue", + "isInvisible": True, + "userAgent": "Some specific user agent", + "proxyType": "socks5", + "proxyAddress": BaseTest.proxyAddress, + "proxyPort": BaseTest.proxyPort, + } + + @pytest.mark.parametrize("method", ReCaptchaEnm.list_values()) + def test_args(self, method: str): + instance = ReCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.googlekey, + method=method, + ) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == method + assert instance.create_task_payload["task"]["websiteURL"] == self.pageurl + assert instance.create_task_payload["task"]["websiteKey"] == self.googlekey + def test_kwargs(self): + instance = ReCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + websiteURL=self.pageurl, + websiteKey=self.googlekey, + method=ReCaptchaEnm.RecaptchaV2TaskProxyless, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) -class TestReCaptcha(BaseReCaptcha): """ Success tests """ @@ -23,27 +53,21 @@ def test_methods_exists(self): def test_basic_data(self): instance = ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - googlekey=self.googlekey, + websiteURL=self.pageurl, + websiteKey=self.googlekey, method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey - result = instance.captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -51,52 +75,42 @@ def test_basic_data(self): async def test_aio_basic_data(self): instance = ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - googlekey=self.googlekey, + websiteURL=self.pageurl, + websiteKey=self.googlekey, method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey - result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"], dict) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - googlekey=self.googlekey, + websiteURL=self.pageurl, + websiteKey=self.googlekey, method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey + assert instance.captcha_handler() @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - googlekey=self.googlekey, + websiteURL=self.pageurl, + websiteKey=self.googlekey, method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, ) as instance: - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey + assert await instance.aio_captcha_handler() """ Fail tests @@ -106,101 +120,7 @@ def test_wrong_method(self): with pytest.raises(ValueError): ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, - pageurl=self.pageurl, - googlekey=self.googlekey, + websiteURL=self.pageurl, + websiteKey=self.googlekey, method=self.get_random_string(length=5), ) - - -class TestDeathByReCaptcha(BaseReCaptcha, DeathByTest): - """ - Success tests - """ - - def test_basic_data(self): - instance = ReCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - pageurl=self.pageurl, - googlekey=self.googlekey, - method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, - ) - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey - - result = instance.captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - - @pytest.mark.asyncio - async def test_aio_basic_data(self): - instance = ReCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - pageurl=self.pageurl, - googlekey=self.googlekey, - method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, - ) - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey - - result = await instance.aio_captcha_handler() - - assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True - else: - assert result["error"] is True - assert isinstance(result["taskId"], int) is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" - - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - - def test_context_basic_data(self): - with ReCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - pageurl=self.pageurl, - googlekey=self.googlekey, - method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, - ) as instance: - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey - - @pytest.mark.asyncio - async def test_context_aio_basic_data(self): - async with ReCaptcha( - rucaptcha_key=self.RUCAPTCHA_KEY, - service_type="deathbycaptcha", - pageurl=self.pageurl, - googlekey=self.googlekey, - method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value, - ) as instance: - assert instance.params.service_type == ServiceEnm.DEATHBYCAPTCHA - - assert instance.create_task_payload["method"] == ReCaptchaEnm.RecaptchaV2TaskProxyless.value - assert instance.create_task_payload["pageurl"] == self.pageurl - assert instance.create_task_payload["googlekey"] == self.googlekey From 0ab58855debf466c13429d41adfed4f29bca7a12 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:51:22 +0300 Subject: [PATCH 145/175] Update re_captcha.py --- src/python_rucaptcha/re_captcha.py | 44 ++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/src/python_rucaptcha/re_captcha.py b/src/python_rucaptcha/re_captcha.py index f8e02b81..5d653dc3 100644 --- a/src/python_rucaptcha/re_captcha.py +++ b/src/python_rucaptcha/re_captcha.py @@ -18,14 +18,14 @@ def __init__( Args: rucaptcha_key: User API key websiteURL: Full URL of the captcha page - websiteKey: The value of the `googlekey` parameter you found in the page code + websiteKey: The value of the `data-sitekey` parameter you found in the page code version: `v3` - indicates that this is reCAPTCHA V3 method: Captcha type Examples: >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", + ... websiteURL="https://rucaptcha.com/demo/recaptcha-v2", + ... websiteKey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).captcha_handler() { @@ -44,10 +44,8 @@ def __init__( } >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... domain="google.com", - ... invisible=1, + ... websiteURL="https://rucaptcha.com/demo/recaptcha-v2", + ... websiteKey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH" ... ).captcha_handler() { "errorId":0, @@ -65,11 +63,29 @@ def __init__( } >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", - ... version="v3", - ... action="verify", - ... min_score=0.2, + ... websiteURL="https://rucaptcha.com/demo/recaptcha-v2", + ... websiteKey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", + ... ).captcha_handler() + { + "errorId":0, + "status":"ready", + "solution":{ + "gRecaptchaResponse":"03ADUVZw...UWxTAe6ncIa", + "token":"03ADUVZw...UWxTAe6ncIa" + }, + "cost":"0.00299", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 + } + + >>> ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", + ... websiteURL="https://rucaptcha.com/demo/recaptcha-v2", + ... websiteKey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", + ... method=ReCaptchaEnm.RecaptchaV3TaskProxyless.value, + ... min_score=0.3, ... ).captcha_handler() { "errorId":0, @@ -87,8 +103,8 @@ def __init__( } >>> await ReCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", - ... pageurl="https://rucaptcha.com/demo/recaptcha-v2", - ... googlekey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", + ... websiteURL="https://rucaptcha.com/demo/recaptcha-v2", + ... websiteKey="6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH", ... method=ReCaptchaEnm.RecaptchaV2TaskProxyless.value ... ).aio_captcha_handler() { From f659412edb367fd62a97a104809d0e7d28a342f2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:59:29 +0300 Subject: [PATCH 146/175] Update rotate_captcha.py --- src/python_rucaptcha/rotate_captcha.py | 83 +++++++++++++++++--------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index 30c5a18d..dfe49fb6 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -7,11 +7,6 @@ class RotateCaptcha(BaseCaptcha): - """ - The class is used to work with RotateCaptcha - Solve description: - """ - def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwargs): """ The class is used to work with Rotate Captcha. @@ -24,10 +19,17 @@ def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwa >>> RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).captcha_handler(captcha_file="examples/rotate/rotate_ex.png") { - 'captchaSolve': '160', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "rotate":180 + }, + "cost":"0.0005", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> with open("src/examples/rotate/rotate_ex.png", "rb") as f: @@ -35,28 +37,49 @@ def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwa >>> RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122" ... ).captcha_handler(captcha_base64=file_data) { - 'captchaSolve': '160', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "rotate":180 + }, + "cost":"0.0005", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> await RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... ).aio_captcha_handler(captcha_file="examples/rotate/rotate_ex.png") { - 'captchaSolve': '160', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "rotate":180 + }, + "cost":"0.0005", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> await RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122", ... angle=45).aio_captcha_handler(captcha_file="examples/rotate/rotate_ex.png") { - 'captchaSolve': '125', - 'taskId': '73043008354', - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "rotate":90 + }, + "cost":"0.0005", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } >>> with open("src/examples/rotate/rotate_ex.png", "rb") as f: @@ -64,18 +87,24 @@ def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwa >>> await RotateCaptcha(rucaptcha_key="aa9011f31111181111168611f1151122" ... ).aio_captcha_handler(captcha_base64=file_data) { - 'captchaSolve': '160', - 'taskId': 73243152973, - 'error': False, - 'errorBody': None + "errorId":0, + "status":"ready", + "solution":{ + "rotate":180 + }, + "cost":"0.0005", + "ip":"1.2.3.4", + "createTime":1692863536, + "endTime":1692863556, + "solveCount":1, + "taskId": 73043008354 } - Returns: Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_rotatecaptcha + https://rucaptcha.com/api-docs/rotate """ super().__init__(method=method, *args, **kwargs) From 0a8b8850fa29be129acde947df4d6f9d6a1f99a2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 7 Dec 2023 23:59:32 +0300 Subject: [PATCH 147/175] Update test_rotate.py --- tests/test_rotate.py | 92 +++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 40 deletions(-) diff --git a/tests/test_rotate.py b/tests/test_rotate.py index a0b448f1..61f5c76a 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -1,6 +1,7 @@ import pytest from tests.conftest import BaseTest +from python_rucaptcha.core.enums import RotateCaptchaEnm from python_rucaptcha.rotate_captcha import RotateCaptcha from python_rucaptcha.core.serializer import GetTaskResultResponseSer @@ -8,29 +9,45 @@ class TestRotateCaptcha(BaseTest): captcha_file = "src/examples/rotate/rotate_ex.png" captcha_url = "https://rucaptcha.com/dist/web/b771cc7c5eb0c1a811fcb91d54e4443a.png" - - """ - Success tests - """ + kwargs_params = { + "angle": 45, + "comment": "comment comm entcomm entcomment", + } def test_methods_exists(self): assert "captcha_handler" in RotateCaptcha.__dict__.keys() assert "aio_captcha_handler" in RotateCaptcha.__dict__.keys() + def test_args(self): + instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) + assert instance.create_task_payload["clientKey"] == self.RUCAPTCHA_KEY + assert instance.create_task_payload["task"]["type"] == RotateCaptchaEnm.RotateTask + + def test_kwargs(self): + instance = RotateCaptcha( + rucaptcha_key=self.RUCAPTCHA_KEY, + **self.kwargs_params, + ) + assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) + assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) + + """ + Success tests + """ + def test_basic_data_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) result = instance.captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -40,14 +57,13 @@ def test_basic_data_file(self): result = instance.captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -58,14 +74,13 @@ def test_basic_data_base64(self): result = instance.captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -76,14 +91,13 @@ async def test_aio_basic_data_link(self): result = await instance.aio_captcha_handler(captcha_link=self.captcha_url) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -94,14 +108,13 @@ async def test_aio_basic_data_file(self): result = await instance.aio_captcha_handler(captcha_file=self.captcha_file) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -113,14 +126,13 @@ async def test_aio_basic_data_base64(self): result = await instance.aio_captcha_handler(captcha_base64=f.read()) assert isinstance(result, dict) is True - if result["error"] is False: - assert result["error"] is False + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True assert isinstance(result["taskId"], int) is True - assert result["errorBody"] is None - assert isinstance(result["captchaSolve"], str) is True else: - assert result["error"] is True - assert result["errorBody"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 280d90f5e4f157706f0c3e0ba398d2ff1ece081e Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:13:46 +0300 Subject: [PATCH 148/175] Update base.py --- src/python_rucaptcha/core/base.py | 71 ++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 66137f6d..3d68add5 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -1,9 +1,10 @@ import os import time import uuid +import base64 import asyncio import logging -from typing import Union +from typing import Union, Optional from pathlib import Path import aiohttp @@ -12,7 +13,14 @@ from . import enums from .config import RETRIES, ASYNC_RETRIES -from .serializer import TaskSer, CaptchaOptionsSer, CreateTaskBaseSer, CreateTaskResponseSer, GetTaskResultRequestSer +from .serializer import ( + TaskSer, + CaptchaOptionsSer, + CreateTaskBaseSer, + CreateTaskResponseSer, + GetTaskResultRequestSer, + GetTaskResultResponseSer, +) from .result_handler import get_sync_result, get_async_result @@ -35,6 +43,7 @@ def __init__( and "rucaptcha" :param kwargs: Designed to pass OPTIONAL parameters to the payload for a request to RuCaptcha """ + self.result = GetTaskResultResponseSer() # assign args to validator self.params = CaptchaOptionsSer(sleep_time=sleep_time, service_type=service_type) self.params.urls_set() @@ -153,6 +162,64 @@ def _file_const_saver(self, content: bytes, file_path: str, file_extension: str with open(os.path.join(file_path, self._file_name), "wb") as out_image: out_image.write(content) + def _body_file_processing( + self, + captcha_link: Optional[str] = None, + captcha_file: Optional[str] = None, + captcha_base64: Optional[bytes] = None, + **kwargs, + ): + # if a local file link is passed + if captcha_file: + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) + # if the file is transferred in base64 encoding + elif captcha_base64: + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + # if a URL is passed + elif captcha_link: + try: + content = self.url_open(url=captcha_link, **kwargs).content + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) + except Exception as error: + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) + + else: + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + + async def _aio_body_file_processing( + self, + captcha_link: Optional[str] = None, + captcha_file: Optional[str] = None, + captcha_base64: Optional[bytes] = None, + **kwargs, + ): + # if a local file link is passed + if captcha_file: + self.create_task_payload["task"].update( + {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} + ) + # if the file is transferred in base64 encoding + elif captcha_base64: + self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) + # if a URL is passed + elif captcha_link: + try: + content = await self.aio_url_read(url=captcha_link, **kwargs) + self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) + except Exception as error: + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + self.result.errorDescription = str(error) + + else: + self.result.errorId = 12 + self.result.errorCode = self.NO_CAPTCHA_ERR + def __enter__(self): return self From e521d9a817883b659aed4a48230a170c06f98e66 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:13:48 +0300 Subject: [PATCH 149/175] Update rotate_captcha.py --- src/python_rucaptcha/rotate_captcha.py | 66 +++++--------------------- 1 file changed, 13 insertions(+), 53 deletions(-) diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index dfe49fb6..27a138b6 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -1,9 +1,8 @@ -import base64 +import logging from typing import Optional from .core.base import BaseCaptcha from .core.enums import RotateCaptchaEnm -from .core.serializer import GetTaskResultResponseSer class RotateCaptcha(BaseCaptcha): @@ -108,7 +107,6 @@ def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwa """ super().__init__(method=method, *args, **kwargs) - self.result = GetTaskResultResponseSer() # check user params if method not in RotateCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {RotateCaptchaEnm.list_values()}") @@ -135,31 +133,12 @@ def captcha_handler( Notes: Check class docstirng for more info """ - - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = self.url_open(url=captcha_link, **kwargs).content - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - return self.result.to_dict() - - else: - # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.to_dict() - return self._processing_response(**kwargs) + self._body_file_processing( + captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + ) + if not self.result.errorId: + return self._processing_response(**kwargs) + return self.result.to_dict() async def aio_captcha_handler( self, @@ -184,28 +163,9 @@ async def aio_captcha_handler( Check class docstirng for more info """ - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = await self.aio_url_read(url=captcha_link, **kwargs) - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - except Exception as error: - self.result.error = True - self.result.errorBody = str(error) - return self.result.to_dict() - - else: - # if none of the parameters are passed - self.result.error = True - self.result.errorBody = self.NO_CAPTCHA_ERR - return self.result.to_dict() - - return await self._aio_processing_response() + await self._aio_body_file_processing( + captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + ) + if not self.result.errorId: + return await self._aio_processing_response() + return self.result.to_dict() From ba2d6eae70a4b13480c3e12241457f8efb1beff7 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:13:50 +0300 Subject: [PATCH 150/175] Update test_rotate.py --- tests/test_rotate.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_rotate.py b/tests/test_rotate.py index 61f5c76a..8f67961b 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -150,7 +150,7 @@ def test_no_captcha(self): result = instance.captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} @@ -164,7 +164,7 @@ async def test_aio_no_captcha(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} @@ -176,7 +176,7 @@ def test_wrong_link(self): result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -187,7 +187,7 @@ def test_wrong_base64(self): result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -199,7 +199,7 @@ async def test_aio_wrong_link(self): result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -213,7 +213,7 @@ async def test_aio_wrong_base64(self): ) assert isinstance(result, dict) is True - assert result["error"] is True + assert result["errorId"] is True assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 6cb2adfda0da0c020c864b90b782121acf08233f Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:21:42 +0300 Subject: [PATCH 151/175] Update image_captcha.py --- src/python_rucaptcha/image_captcha.py | 74 +++++---------------------- 1 file changed, 12 insertions(+), 62 deletions(-) diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index 3cd01cff..81be8d68 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -1,10 +1,8 @@ -import base64 import shutil from typing import Optional from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, ImageCaptchaEnm -from .core.serializer import GetTaskResultResponseSer class ImageCaptcha(BaseCaptcha): @@ -177,7 +175,6 @@ def __init__( self.save_format = save_format self.img_clearing = img_clearing self.img_path = img_path - self.result = GetTaskResultResponseSer() def captcha_handler( self, @@ -201,36 +198,12 @@ def captcha_handler( Notes: Check class docstirng for more info """ - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = self.url_open(url=captcha_link, **kwargs).content - except Exception as error: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - self.result.errorDescription = str(error) - return self.result.to_dict() - - # according to the value of the passed parameter, select the function to save the image - if self.save_format == SaveFormatsEnm.CONST.value: - self._file_const_saver(content, self.img_path) - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - - else: - # if none of the parameters are passed - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - return self.result.to_dict() - - return self._processing_response(**kwargs) + self._body_file_processing( + captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + ) + if not self.result.errorId: + return self._processing_response(**kwargs) + return self.result.to_dict() async def aio_captcha_handler( self, @@ -254,35 +227,12 @@ async def aio_captcha_handler( Notes: Check class docstirng for more info """ - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = await self.aio_url_read(url=captcha_link, **kwargs) - except Exception as error: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - self.result.errorDescription = str(error) - return self.result.to_dict() - - # according to the value of the passed parameter, select the function to save the image - if self.save_format == SaveFormatsEnm.CONST.value: - self._file_const_saver(content, self.img_path) - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - - else: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - return self.result.to_dict() - - return await self._aio_processing_response() + await self._aio_body_file_processing( + captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + ) + if not self.result.errorId: + return await self._aio_processing_response() + return self.result.to_dict() def __del__(self): if self.save_format == SaveFormatsEnm.CONST.value and self.img_clearing: From 1283349172ac671d963fcadf005da7e7b5d8d281 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:21:45 +0300 Subject: [PATCH 152/175] Update rotate_captcha.py --- src/python_rucaptcha/rotate_captcha.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index 27a138b6..aabe0505 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -1,12 +1,19 @@ -import logging +import shutil from typing import Optional from .core.base import BaseCaptcha -from .core.enums import RotateCaptchaEnm +from .core.enums import SaveFormatsEnm, RotateCaptchaEnm class RotateCaptcha(BaseCaptcha): - def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwargs): + def __init__( + self, + save_format: str = SaveFormatsEnm.TEMP.value, + img_clearing: bool = True, + img_path: str = "PythonRotateCaptchaFiles", + *args, + **kwargs, + ): """ The class is used to work with Rotate Captcha. @@ -105,11 +112,11 @@ def __init__(self, method: str = RotateCaptchaEnm.RotateTask.value, *args, **kwa Notes: https://rucaptcha.com/api-docs/rotate """ - super().__init__(method=method, *args, **kwargs) + super().__init__(method=RotateCaptchaEnm.RotateTask, *args, **kwargs) - # check user params - if method not in RotateCaptchaEnm.list_values(): - raise ValueError(f"Invalid method parameter set, available - {RotateCaptchaEnm.list_values()}") + self.save_format = save_format + self.img_clearing = img_clearing + self.img_path = img_path def captcha_handler( self, @@ -169,3 +176,7 @@ async def aio_captcha_handler( if not self.result.errorId: return await self._aio_processing_response() return self.result.to_dict() + + def __del__(self): + if self.save_format == SaveFormatsEnm.CONST.value and self.img_clearing: + shutil.rmtree(self.img_path) From 5c481a94c88adb35824a742705efec906ebd9e5d Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:21:48 +0300 Subject: [PATCH 153/175] Update test_rotate.py --- tests/test_rotate.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_rotate.py b/tests/test_rotate.py index 8f67961b..a5a67818 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -150,7 +150,7 @@ def test_no_captcha(self): result = instance.captcha_handler() assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} @@ -164,7 +164,7 @@ async def test_aio_no_captcha(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR assert result["captchaSolve"] == {} @@ -176,7 +176,7 @@ def test_wrong_link(self): result = instance.captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -187,7 +187,7 @@ def test_wrong_base64(self): result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -199,7 +199,7 @@ async def test_aio_wrong_link(self): result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @@ -213,7 +213,7 @@ async def test_aio_wrong_base64(self): ) assert isinstance(result, dict) is True - assert result["errorId"] is True + assert result["errorId"] != 0 assert result["taskId"] is None assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From 404bedf0d436b02f4165c7768248888aa48edf9c Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:47:53 +0300 Subject: [PATCH 154/175] Update base.py --- src/python_rucaptcha/core/base.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 3d68add5..006ba6b9 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -12,6 +12,7 @@ from requests.adapters import HTTPAdapter from . import enums +from .enums import SaveFormatsEnm from .config import RETRIES, ASYNC_RETRIES from .serializer import ( TaskSer, @@ -31,7 +32,7 @@ def __init__( self, rucaptcha_key: str, method: str, - sleep_time: int = 15, + sleep_time: int = 6, service_type: str = enums.ServiceEnm.TWOCAPTCHA.value, **kwargs, ): @@ -164,6 +165,9 @@ def _file_const_saver(self, content: bytes, file_path: str, file_extension: str def _body_file_processing( self, + save_format: SaveFormatsEnm, + file_path: str, + file_extension: str = "png", captcha_link: Optional[str] = None, captcha_file: Optional[str] = None, captcha_base64: Optional[bytes] = None, @@ -181,6 +185,9 @@ def _body_file_processing( elif captcha_link: try: content = self.url_open(url=captcha_link, **kwargs).content + # according to the value of the passed parameter, select the function to save the image + if save_format == SaveFormatsEnm.CONST.value: + self._file_const_saver(content, file_path, file_extension=file_extension) self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) except Exception as error: self.result.errorId = 12 @@ -193,6 +200,9 @@ def _body_file_processing( async def _aio_body_file_processing( self, + save_format: SaveFormatsEnm, + file_path: str, + file_extension: str = "png", captcha_link: Optional[str] = None, captcha_file: Optional[str] = None, captcha_base64: Optional[bytes] = None, @@ -210,6 +220,9 @@ async def _aio_body_file_processing( elif captcha_link: try: content = await self.aio_url_read(url=captcha_link, **kwargs) + # according to the value of the passed parameter, select the function to save the image + if save_format == SaveFormatsEnm.CONST.value: + self._file_const_saver(content, file_path, file_extension=file_extension) self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) except Exception as error: self.result.errorId = 12 From 10780d2f1d60e5c89d5eeef63585572d1c3f1ab0 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:47:56 +0300 Subject: [PATCH 155/175] Update audio_captcha.py --- src/python_rucaptcha/audio_captcha.py | 88 ++++++++------------------- 1 file changed, 27 insertions(+), 61 deletions(-) diff --git a/src/python_rucaptcha/audio_captcha.py b/src/python_rucaptcha/audio_captcha.py index 56e18dda..afedcc3a 100644 --- a/src/python_rucaptcha/audio_captcha.py +++ b/src/python_rucaptcha/audio_captcha.py @@ -1,6 +1,5 @@ -import base64 import shutil -from typing import Optional +from typing import Union, Optional from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, AudioCaptchaEnm @@ -10,7 +9,7 @@ class AudioCaptcha(BaseCaptcha): def __init__( self, - save_format: str = SaveFormatsEnm.TEMP.value, + save_format: Union[str, SaveFormatsEnm] = SaveFormatsEnm.TEMP, audio_clearing: bool = True, audio_path: str = "PythonRuCaptchaAudio", lang: str = "en", @@ -108,35 +107,19 @@ def captcha_handler( Notes: Check class docstirng for more info """ - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = self.url_open(url=captcha_link, **kwargs).content - except Exception as error: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - self.result.errorDescription = str(error) - return self.result.to_dict() - - # according to the value of the passed parameter, select the function to save the file - if self.save_format == SaveFormatsEnm.CONST.value: - self._file_const_saver(content, self.audio_path, file_extension="mp3") - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - - else: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - return self.result.to_dict() - - return self._processing_response(**kwargs) + + self._body_file_processing( + save_format=self.save_format, + file_path=self.audio_path, + file_extension="mp3", + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, + ) + if not self.result.errorId: + return self._processing_response(**kwargs) + return self.result.to_dict() async def aio_captcha_handler( self, @@ -160,35 +143,18 @@ async def aio_captcha_handler( Notes: Check class docstirng for more info """ - # if a local file link is passed - if captcha_file: - self.create_task_payload["task"].update( - {"body": base64.b64encode(self._local_file_captcha(captcha_file)).decode("utf-8")} - ) - # if the file is transferred in base64 encoding - elif captcha_base64: - self.create_task_payload["task"].update({"body": base64.b64encode(captcha_base64).decode("utf-8")}) - # if a URL is passed - elif captcha_link: - try: - content = await self.aio_url_read(url=captcha_link, **kwargs) - except Exception as error: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - self.result.errorDescription = str(error) - return self.result.to_dict() - - # according to the value of the passed parameter, select the function to save the file - if self.save_format == SaveFormatsEnm.CONST.value: - self._file_const_saver(content, self.audio_path, file_extension="mp3") - self.create_task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")}) - - else: - self.result.errorId = 12 - self.result.errorCode = self.NO_CAPTCHA_ERR - return self.result.to_dict() - - return await self._aio_processing_response() + await self._aio_body_file_processing( + save_format=self.save_format, + file_path=self.audio_path, + file_extension="mp3", + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, + ) + if not self.result.errorId: + return await self._aio_processing_response() + return self.result.to_dict() def __del__(self): if self.save_format == SaveFormatsEnm.CONST.value and self.audio_clearing: From d0e5163869c4a718606f9afaef0b10d2c3cb1f4d Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:47:59 +0300 Subject: [PATCH 156/175] Update image_captcha.py --- src/python_rucaptcha/image_captcha.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/python_rucaptcha/image_captcha.py b/src/python_rucaptcha/image_captcha.py index 81be8d68..7f78bb92 100644 --- a/src/python_rucaptcha/image_captcha.py +++ b/src/python_rucaptcha/image_captcha.py @@ -1,5 +1,5 @@ import shutil -from typing import Optional +from typing import Union, Optional from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, ImageCaptchaEnm @@ -8,7 +8,7 @@ class ImageCaptcha(BaseCaptcha): def __init__( self, - save_format: str = SaveFormatsEnm.TEMP.value, + save_format: Union[str, SaveFormatsEnm] = SaveFormatsEnm.TEMP, img_clearing: bool = True, img_path: str = "PythonRuCaptchaImages", *args, @@ -199,7 +199,12 @@ def captcha_handler( Check class docstirng for more info """ self._body_file_processing( - captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + save_format=self.save_format, + file_path=self.img_path, + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, ) if not self.result.errorId: return self._processing_response(**kwargs) @@ -228,7 +233,12 @@ async def aio_captcha_handler( Check class docstirng for more info """ await self._aio_body_file_processing( - captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + save_format=self.save_format, + file_path=self.img_path, + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, ) if not self.result.errorId: return await self._aio_processing_response() From bb6a97cfbc4966e97964560c00a362bd53f65bfa Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:48:01 +0300 Subject: [PATCH 157/175] Update rotate_captcha.py --- src/python_rucaptcha/rotate_captcha.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index aabe0505..e5ab8670 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -1,5 +1,6 @@ +import logging import shutil -from typing import Optional +from typing import Union, Optional from .core.base import BaseCaptcha from .core.enums import SaveFormatsEnm, RotateCaptchaEnm @@ -8,7 +9,7 @@ class RotateCaptcha(BaseCaptcha): def __init__( self, - save_format: str = SaveFormatsEnm.TEMP.value, + save_format: Union[str, SaveFormatsEnm] = SaveFormatsEnm.TEMP, img_clearing: bool = True, img_path: str = "PythonRotateCaptchaFiles", *args, @@ -141,8 +142,14 @@ def captcha_handler( Check class docstirng for more info """ self._body_file_processing( - captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + save_format=self.save_format, + file_path=self.img_path, + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, ) + logging.warning(f'{self.result = }') if not self.result.errorId: return self._processing_response(**kwargs) return self.result.to_dict() @@ -171,8 +178,14 @@ async def aio_captcha_handler( """ await self._aio_body_file_processing( - captcha_link=captcha_link, captcha_file=captcha_file, captcha_base64=captcha_base64, **kwargs + save_format=self.save_format, + file_path=self.img_path, + captcha_link=captcha_link, + captcha_file=captcha_file, + captcha_base64=captcha_base64, + **kwargs, ) + logging.warning(f'{self.result = }') if not self.result.errorId: return await self._aio_processing_response() return self.result.to_dict() From 4a84e36a09ca4893078c1e20b1db3812b175e27a Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:48:13 +0300 Subject: [PATCH 158/175] Update test_rotate.py --- tests/test_rotate.py | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/tests/test_rotate.py b/tests/test_rotate.py index a5a67818..dc33a1d4 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import RotateCaptchaEnm from python_rucaptcha.rotate_captcha import RotateCaptcha -from python_rucaptcha.core.serializer import GetTaskResultResponseSer +from python_rucaptcha.core.serializer import CreateTaskResponseSer, GetTaskResultResponseSer class TestRotateCaptcha(BaseTest): @@ -140,10 +140,6 @@ async def test_aio_basic_data_base64(self): Fail tests """ - def test_wrong_method(self): - with pytest.raises(ValueError): - RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=self.get_random_string(length=5)) - def test_no_captcha(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -152,10 +148,8 @@ def test_no_captcha(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result.keys() == CreateTaskResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -166,8 +160,6 @@ async def test_aio_no_captcha(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["errorBody"] == RotateCaptcha.NO_CAPTCHA_ERR - assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_link(self): @@ -178,7 +170,6 @@ def test_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_wrong_base64(self): @@ -189,8 +180,7 @@ def test_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result.keys() == CreateTaskResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_wrong_link(self): @@ -201,7 +191,6 @@ async def test_aio_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["captchaSolve"] == {} assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio @@ -215,5 +204,4 @@ async def test_aio_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result["captchaSolve"] == {} - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + assert result.keys() == CreateTaskResponseSer().to_dict().keys() From 4bcacdad680d3940723fda7e437688388a6b5fd3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:56:50 +0300 Subject: [PATCH 159/175] Update test_rotate.py --- tests/test_rotate.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_rotate.py b/tests/test_rotate.py index dc33a1d4..0e343f63 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -3,7 +3,7 @@ from tests.conftest import BaseTest from python_rucaptcha.core.enums import RotateCaptchaEnm from python_rucaptcha.rotate_captcha import RotateCaptcha -from python_rucaptcha.core.serializer import CreateTaskResponseSer, GetTaskResultResponseSer +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestRotateCaptcha(BaseTest): @@ -149,7 +149,7 @@ def test_no_captcha(self): assert result["errorId"] != 0 assert result["taskId"] is None - assert result.keys() == CreateTaskResponseSer().to_dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() @pytest.mark.asyncio async def test_aio_no_captcha(self): @@ -172,21 +172,21 @@ def test_wrong_link(self): assert result["taskId"] is None assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - def test_wrong_base64(self): + @pytest.mark.asyncio + async def test_aio_wrong_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) + result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result.keys() == CreateTaskResponseSer().to_dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio - async def test_aio_wrong_link(self): + def test_wrong_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) - result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) + result = instance.captcha_handler(captcha_base64=self.get_random_string(length=50).encode(encoding="UTF-8")) assert isinstance(result, dict) is True assert result["errorId"] != 0 @@ -204,4 +204,4 @@ async def test_aio_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] != 0 assert result["taskId"] is None - assert result.keys() == CreateTaskResponseSer().to_dict().keys() + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() From ccb4f6fda359240b3a7d6e31b8f7fd75615f1c6d Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:56:53 +0300 Subject: [PATCH 160/175] Update rotate_captcha.py --- src/python_rucaptcha/rotate_captcha.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/python_rucaptcha/rotate_captcha.py b/src/python_rucaptcha/rotate_captcha.py index e5ab8670..25f2568d 100644 --- a/src/python_rucaptcha/rotate_captcha.py +++ b/src/python_rucaptcha/rotate_captcha.py @@ -1,5 +1,5 @@ -import logging import shutil +import logging from typing import Union, Optional from .core.base import BaseCaptcha @@ -149,9 +149,10 @@ def captcha_handler( captcha_base64=captcha_base64, **kwargs, ) - logging.warning(f'{self.result = }') + logging.warning(f"{self.result = }") if not self.result.errorId: return self._processing_response(**kwargs) + logging.warning("ERROR ID IS EXISTS") return self.result.to_dict() async def aio_captcha_handler( @@ -185,7 +186,7 @@ async def aio_captcha_handler( captcha_base64=captcha_base64, **kwargs, ) - logging.warning(f'{self.result = }') + logging.warning(f"{self.result = }") if not self.result.errorId: return await self._aio_processing_response() return self.result.to_dict() From 1c29527496d11d09ba37d29e03fa80b1b6f6ba05 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:56:57 +0300 Subject: [PATCH 161/175] Update serializer.py --- src/python_rucaptcha/core/serializer.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/python_rucaptcha/core/serializer.py b/src/python_rucaptcha/core/serializer.py index 87f5c200..b25b0d85 100644 --- a/src/python_rucaptcha/core/serializer.py +++ b/src/python_rucaptcha/core/serializer.py @@ -62,11 +62,6 @@ def urls_set(self): """ -class CreateTaskResponseSer(MyBaseModel, ErrorFieldsSer, kw_only=True): - errorId: int - taskId: int = None - - class GetTaskResultResponseSer(MyBaseModel, ErrorFieldsSer): errorId: int = 0 status: str = "ready" From 0a800c9bdda16a47b4c95569758bac336da73d58 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 00:57:00 +0300 Subject: [PATCH 162/175] Update base.py --- src/python_rucaptcha/core/base.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index 006ba6b9..bb46f814 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -3,7 +3,6 @@ import uuid import base64 import asyncio -import logging from typing import Union, Optional from pathlib import Path @@ -14,14 +13,7 @@ from . import enums from .enums import SaveFormatsEnm from .config import RETRIES, ASYNC_RETRIES -from .serializer import ( - TaskSer, - CaptchaOptionsSer, - CreateTaskBaseSer, - CreateTaskResponseSer, - GetTaskResultRequestSer, - GetTaskResultResponseSer, -) +from .serializer import TaskSer, CaptchaOptionsSer, CreateTaskBaseSer, GetTaskResultRequestSer, GetTaskResultResponseSer from .result_handler import get_sync_result, get_async_result @@ -69,9 +61,8 @@ def _processing_response(self, **kwargs: dict) -> Union[dict, Exception]: Method processing captcha solving task creation result :param kwargs: additional params for Requests library """ - logging.warning(f"{self.create_task_payload = }") try: - response = CreateTaskResponseSer( + response = GetTaskResultResponseSer( **self.session.post(self.params.url_request, json=self.create_task_payload, **kwargs).json() ) # check response status @@ -112,7 +103,6 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: try: # make async or sync request response = await self.__aio_create_task() - logging.warning(f"{response = }") # check response status if response.errorId == 0: self.get_task_payload.taskId = response.taskId @@ -121,7 +111,6 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: except Exception as error: return error - logging.warning(f"{self.get_task_payload = }") # wait captcha solving await asyncio.sleep(self.params.sleep_time) return await get_async_result( @@ -130,7 +119,7 @@ async def _aio_processing_response(self) -> Union[dict, Exception]: url_response=self.params.url_response, ) - async def __aio_create_task(self) -> CreateTaskResponseSer: + async def __aio_create_task(self) -> GetTaskResultResponseSer: async with aiohttp.ClientSession() as session: async for attempt in ASYNC_RETRIES: with attempt: @@ -138,7 +127,7 @@ async def __aio_create_task(self) -> CreateTaskResponseSer: self.params.url_request, json=self.create_task_payload, raise_for_status=True ) as resp: response_json = await resp.json(content_type=None) - return CreateTaskResponseSer(**response_json) + return GetTaskResultResponseSer(**response_json) # Working with images methods From 2767acbb3338cb9eb04c6e53195232e85613b320 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 01:05:43 +0300 Subject: [PATCH 163/175] upd --- tests/test_audio.py | 7 ------- tests/test_capypuzzle.py | 2 -- tests/test_control.py | 8 -------- tests/test_core.py | 3 --- tests/test_funcaptcha.py | 2 -- tests/test_geetest.py | 2 -- tests/test_hcaptcha.py | 2 -- tests/test_image.py | 18 ++++++------------ tests/test_key_captcha.py | 2 -- tests/test_lemin.py | 2 -- tests/test_recaptcha.py | 2 -- tests/test_rotate.py | 26 +++++++++++++++++++------- tests/test_text.py | 1 - tests/test_turnstile.py | 2 -- 14 files changed, 25 insertions(+), 54 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index b9e5ec34..a63018fb 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -74,7 +74,6 @@ def test_basic_data_base64(self, save_format): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_file(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -92,7 +91,6 @@ async def test_aio_basic_data_file(self, save_format): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_link(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -110,7 +108,6 @@ async def test_aio_basic_data_link(self, save_format): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) async def test_aio_basic_data_base64(self, save_format): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -141,7 +138,6 @@ def test_no_captcha(self): assert isinstance(result, dict) is True assert result["errorId"] in (12, 5) - @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -174,7 +170,6 @@ def test_wrong_base64(self): assert isinstance(result, dict) is True assert result["errorId"] in (12, 5) - @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -183,14 +178,12 @@ async def test_aio_wrong_link(self): assert isinstance(result, dict) is True assert result["errorId"] in (12, 5) - @pytest.mark.asyncio async def test_aio_wrong_path(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) with pytest.raises(FileNotFoundError): await instance.aio_captcha_handler(captcha_file=self.get_random_string(length=50)) - @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = AudioCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) diff --git a/tests/test_capypuzzle.py b/tests/test_capypuzzle.py index 251e7644..4bb481ee 100644 --- a/tests/test_capypuzzle.py +++ b/tests/test_capypuzzle.py @@ -58,7 +58,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = CapyPuzzle( websiteURL=self.pageurl, @@ -103,7 +102,6 @@ def test_context_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with CapyPuzzle( websiteURL=self.pageurl, diff --git a/tests/test_control.py b/tests/test_control.py index 16d677e9..5ee402c9 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -1,7 +1,5 @@ import random -import pytest - from tests.conftest import BaseTest from python_rucaptcha.control import Control from python_rucaptcha.core.serializer import GetTaskResultResponseSer @@ -33,7 +31,6 @@ def test_context_get_balance(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert instance.getBalance() - @pytest.mark.asyncio async def test_aio_get_balance(self): instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -43,7 +40,6 @@ async def test_aio_get_balance(self): assert result["balance"] > 1 assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_context_get_balance(self): async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert await instance.aio_getBalance() @@ -62,14 +58,12 @@ def test_context_report_bad(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert instance.reportIncorrect(id=random.randint(20, 50)) - @pytest.mark.asyncio async def test_aio_report_bad(self): instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) result = await instance.aio_reportIncorrect(id=random.randint(20, 50)) assert isinstance(result, dict) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_context_report_bad(self): async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert await instance.aio_reportIncorrect(id=random.randint(20, 50)) @@ -84,7 +78,6 @@ def test_context_report_good(self): with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert instance.reportCorrect(id=random.randint(20, 50)) - @pytest.mark.asyncio async def test_aio_report_good(self): instance = Control(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -93,7 +86,6 @@ async def test_aio_report_good(self): assert isinstance(result, dict) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_context_report_good(self): async with Control(rucaptcha_key=self.RUCAPTCHA_KEY) as instance: assert await instance.aio_reportCorrect(id=random.randint(20, 50)) diff --git a/tests/test_core.py b/tests/test_core.py index 5cef10a1..4038cc94 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -26,7 +26,6 @@ def test_context_class_create(self): def test_class_create(self): bc = BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=ControlEnm.control.value) - @pytest.mark.asyncio async def test_aio_context_class_create(self): async with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method=ControlEnm.control.value) as bc: pass @@ -63,7 +62,6 @@ def test_custom_service_api_key(self, elements): service_type=self.get_random_string(length=10), ) - @pytest.mark.asyncio @pytest.mark.parametrize("elements", [31, 33]) async def test_aio_context_custom_service_api_key(self, elements): async with BaseCaptcha( @@ -82,7 +80,6 @@ def test_context_err(self): with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method="some_method") as instance: raise ValueError - @pytest.mark.asyncio async def test_aio_context_err(self): with pytest.raises(ValueError): async with BaseCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, method="some_method") as instance: diff --git a/tests/test_funcaptcha.py b/tests/test_funcaptcha.py index d249108d..c136fa7c 100644 --- a/tests/test_funcaptcha.py +++ b/tests/test_funcaptcha.py @@ -73,7 +73,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -104,7 +103,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with FunCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_geetest.py b/tests/test_geetest.py index 82dcfd4a..c99d47dd 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -196,7 +196,6 @@ def test_basic_data(self): assert result["errorId"] in (1, 12) assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -230,7 +229,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler(challenge=self.challenge) - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with GeeTest( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_hcaptcha.py b/tests/test_hcaptcha.py index 0d16b48d..ca722bb2 100644 --- a/tests/test_hcaptcha.py +++ b/tests/test_hcaptcha.py @@ -70,7 +70,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -101,7 +100,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with HCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_image.py b/tests/test_image.py index f780e653..a9bbcc38 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -41,7 +41,7 @@ def test_kwargs(self): assert set(self.kwargs_params.keys()).issubset(set(instance.create_task_payload["task"].keys())) assert set(self.kwargs_params.values()).issubset(set(instance.create_task_payload["task"].values())) - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) def test_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) result = instance.captcha_handler(captcha_link=self.captcha_url) @@ -55,7 +55,7 @@ def test_basic_link(self, save_format): assert result["errorId"] in (1, 12) assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) def test_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) result = instance.captcha_handler(captcha_file=self.captcha_file) @@ -70,7 +70,7 @@ def test_basic_file(self, save_format): assert result["errorId"] in (1, 12) assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) def test_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -88,8 +88,7 @@ def test_basic_base64(self, save_format): assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) async def test_aio_basic_link(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -105,8 +104,7 @@ async def test_aio_basic_link(self, save_format): assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) async def test_aio_basic_file(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -122,8 +120,7 @@ async def test_aio_basic_file(self, save_format): assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio - @pytest.mark.parametrize("save_format", [SaveFormatsEnm.TEMP, SaveFormatsEnm.CONST]) + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) async def test_aio_basic_base64(self, save_format): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format) @@ -152,7 +149,6 @@ def test_no_captcha(self): assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) result = await instance.aio_captcha_handler() @@ -176,7 +172,6 @@ def test_wrong_base64(self): assert result["errorId"] == 15 assert result["taskId"] is None - @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) result = await instance.aio_captcha_handler(captcha_link=self.get_random_string(length=50)) @@ -185,7 +180,6 @@ async def test_aio_wrong_link(self): assert isinstance(result["errorCode"], str) is True assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = ImageCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) result = await instance.aio_captcha_handler( diff --git a/tests/test_key_captcha.py b/tests/test_key_captcha.py index a9c4d1bc..a1cd48a0 100644 --- a/tests/test_key_captcha.py +++ b/tests/test_key_captcha.py @@ -84,7 +84,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -120,7 +119,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with KeyCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_lemin.py b/tests/test_lemin.py index 00c3d24d..a5e13fd9 100644 --- a/tests/test_lemin.py +++ b/tests/test_lemin.py @@ -75,7 +75,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -109,7 +108,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with LeminCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_recaptcha.py b/tests/test_recaptcha.py index a451865a..e4a2db0a 100644 --- a/tests/test_recaptcha.py +++ b/tests/test_recaptcha.py @@ -71,7 +71,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -102,7 +101,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with ReCaptcha( rucaptcha_key=self.RUCAPTCHA_KEY, diff --git a/tests/test_rotate.py b/tests/test_rotate.py index 0e343f63..2eb4107a 100644 --- a/tests/test_rotate.py +++ b/tests/test_rotate.py @@ -1,7 +1,7 @@ import pytest from tests.conftest import BaseTest -from python_rucaptcha.core.enums import RotateCaptchaEnm +from python_rucaptcha.core.enums import SaveFormatsEnm, RotateCaptchaEnm from python_rucaptcha.rotate_captcha import RotateCaptcha from python_rucaptcha.core.serializer import GetTaskResultResponseSer @@ -84,7 +84,6 @@ def test_basic_data_base64(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -101,7 +100,6 @@ async def test_aio_basic_data_link(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data_file(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -118,7 +116,6 @@ async def test_aio_basic_data_file(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -136,6 +133,24 @@ async def test_aio_basic_data_base64(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + @pytest.mark.parametrize("save_format", SaveFormatsEnm.list_values()) + @pytest.mark.parametrize("img_clearing", (True, False)) + def test_const_data_link(self, save_format: str, img_clearing: bool): + instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, save_format=save_format, img_clearing=img_clearing) + + result = instance.captcha_handler(captcha_link=self.captcha_url) + + assert isinstance(result, dict) is True + if not result["errorId"]: + assert result["status"] == "ready" + assert isinstance(result["solution"]["rotate"], int) is True + assert isinstance(result["taskId"], int) is True + else: + assert result["errorId"] in (1, 12) + assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() + """ Fail tests """ @@ -151,7 +166,6 @@ def test_no_captcha(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_no_captcha(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -172,7 +186,6 @@ def test_wrong_link(self): assert result["taskId"] is None assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_wrong_link(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) @@ -193,7 +206,6 @@ def test_wrong_base64(self): assert result["taskId"] is None assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_wrong_base64(self): instance = RotateCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY) diff --git a/tests/test_text.py b/tests/test_text.py index d456e79a..03a89d3f 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -40,7 +40,6 @@ def test_basic(self, lang_code: str, question: str): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio @pytest.mark.parametrize("lang_code, question", questions) async def test_aio_basic(self, lang_code, question): instance = TextCaptcha(rucaptcha_key=self.RUCAPTCHA_KEY, languagePool=lang_code) diff --git a/tests/test_turnstile.py b/tests/test_turnstile.py index 3395f7d6..a1c8badd 100644 --- a/tests/test_turnstile.py +++ b/tests/test_turnstile.py @@ -73,7 +73,6 @@ def test_basic_data(self): assert result.keys() == GetTaskResultResponseSer().to_dict().keys() - @pytest.mark.asyncio async def test_aio_basic_data(self): instance = Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, @@ -106,7 +105,6 @@ def test_context_basic_data(self): ) as instance: assert instance.captcha_handler() - @pytest.mark.asyncio async def test_context_aio_basic_data(self): async with Turnstile( rucaptcha_key=self.RUCAPTCHA_KEY, From d3f1f5d985ce52c94c670a96bb6126aa6a7c6f8b Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 02:06:23 +0300 Subject: [PATCH 164/175] Update test_capypuzzle.py --- tests/test_capypuzzle.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/test_capypuzzle.py b/tests/test_capypuzzle.py index 4bb481ee..0e06c752 100644 --- a/tests/test_capypuzzle.py +++ b/tests/test_capypuzzle.py @@ -12,6 +12,10 @@ class TestCapyPuzzle(BaseTest): api_server = "https://jp.api.capy.me/" versions = ["puzzle", "avatar"] + def test_methods_exists(self): + assert "captcha_handler" in CapyPuzzle.__dict__.keys() + assert "aio_captcha_handler" in CapyPuzzle.__dict__.keys() + @pytest.mark.parametrize("method", CapyPuzzleEnm.list_values()) def test_args(self, method: str): instance = CapyPuzzle( @@ -31,10 +35,6 @@ def test_args(self, method: str): Success tests """ - def test_methods_exists(self): - assert "captcha_handler" in CapyPuzzle.__dict__.keys() - assert "aio_captcha_handler" in CapyPuzzle.__dict__.keys() - def test_basic_data(self): instance = CapyPuzzle( websiteURL=self.pageurl, @@ -49,8 +49,7 @@ def test_basic_data(self): assert isinstance(result, dict) is True if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True + assert result["status"] in ("ready", "processing") assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -72,8 +71,7 @@ async def test_aio_basic_data(self): assert isinstance(result, dict) is True if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True + assert result["status"] in ("ready", "processing") assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -93,8 +91,7 @@ def test_context_basic_data(self): result = instance.captcha_handler() assert isinstance(result, dict) is True if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True + assert result["status"] in ("ready", "processing") assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) @@ -114,8 +111,7 @@ async def test_context_aio_basic_data(self): result = await instance.aio_captcha_handler() assert isinstance(result, dict) is True if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True + assert result["status"] in ("ready", "processing") assert isinstance(result["taskId"], int) is True else: assert result["errorId"] in (1, 12) From 98bb411e0994fd7fafd62526bb98426b7cc55e43 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 03:41:55 +0300 Subject: [PATCH 165/175] Update base.py --- src/python_rucaptcha/core/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/base.py b/src/python_rucaptcha/core/base.py index bb46f814..274dfdc7 100644 --- a/src/python_rucaptcha/core/base.py +++ b/src/python_rucaptcha/core/base.py @@ -24,7 +24,7 @@ def __init__( self, rucaptcha_key: str, method: str, - sleep_time: int = 6, + sleep_time: int = 10, service_type: str = enums.ServiceEnm.TWOCAPTCHA.value, **kwargs, ): From cec25e8bedadc2940ce571e9f3bb3942ffe55fb5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 03:41:58 +0300 Subject: [PATCH 166/175] Update config.py --- src/python_rucaptcha/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python_rucaptcha/core/config.py b/src/python_rucaptcha/core/config.py index 3e8b5c8d..4f194704 100644 --- a/src/python_rucaptcha/core/config.py +++ b/src/python_rucaptcha/core/config.py @@ -8,7 +8,7 @@ # Connection retry generator -def attempts_generator(amount: int = 15): +def attempts_generator(amount: int = 20): """ Function generates a generator of length equal to `amount` From 7165cfcf47206b6b6abc5160408f287c25082c3f Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 03:44:42 +0300 Subject: [PATCH 167/175] Update test_lemin.py --- tests/test_lemin.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/tests/test_lemin.py b/tests/test_lemin.py index a5e13fd9..a585b87f 100644 --- a/tests/test_lemin.py +++ b/tests/test_lemin.py @@ -64,15 +64,6 @@ def test_basic_data(self): result = instance.captcha_handler() - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() async def test_aio_basic_data(self): @@ -87,15 +78,6 @@ async def test_aio_basic_data(self): result = await instance.aio_captcha_handler() - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): From 4bda42a38f4844f744f4f537f92818ee6d0e3d4a Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 03:44:43 +0300 Subject: [PATCH 168/175] Update test_key_captcha.py --- tests/test_key_captcha.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/tests/test_key_captcha.py b/tests/test_key_captcha.py index a1cd48a0..220e53cb 100644 --- a/tests/test_key_captcha.py +++ b/tests/test_key_captcha.py @@ -73,15 +73,6 @@ def test_basic_data(self): result = instance.captcha_handler() - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" - assert result.keys() == GetTaskResultResponseSer().to_dict().keys() async def test_aio_basic_data(self): @@ -97,14 +88,6 @@ async def test_aio_basic_data(self): result = instance.captcha_handler() - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): From 122b455b300d7f3938b0b6e2886fa5827e0581cd Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 03:44:45 +0300 Subject: [PATCH 169/175] Update test_geetest.py --- tests/test_geetest.py | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/tests/test_geetest.py b/tests/test_geetest.py index c99d47dd..9de7667f 100644 --- a/tests/test_geetest.py +++ b/tests/test_geetest.py @@ -4,6 +4,7 @@ from tests.conftest import BaseTest from python_rucaptcha.gee_test import GeeTest from python_rucaptcha.core.enums import GeetestEnm +from python_rucaptcha.core.serializer import GetTaskResultResponseSer class TestGeeTestBase(BaseTest): @@ -84,14 +85,7 @@ def test_basic_data(self): result = instance.captcha_handler(challenge=self.challenge) - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() async def test_aio_basic_data(self): instance = GeeTest( @@ -103,14 +97,7 @@ async def test_aio_basic_data(self): result = await instance.aio_captcha_handler(challenge=self.challenge) - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"]["text"], str) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with GeeTest( @@ -187,14 +174,7 @@ def test_basic_data(self): ) result = instance.captcha_handler(challenge=self.challenge) - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() async def test_aio_basic_data(self): instance = GeeTest( @@ -208,14 +188,7 @@ async def test_aio_basic_data(self): ) result = await instance.aio_captcha_handler(challenge=self.challenge) - assert isinstance(result, dict) is True - if not result["errorId"]: - assert result["status"] == "ready" - assert isinstance(result["solution"], dict) is True - assert isinstance(result["taskId"], int) is True - else: - assert result["errorId"] in (1, 12) - assert result["errorCode"] == "ERROR_CAPTCHA_UNSOLVABLE" + assert result.keys() == GetTaskResultResponseSer().to_dict().keys() def test_context_basic_data(self): with GeeTest( From 6b0c3fc23a2013f81e0900d38da4798079691bbe Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:01:53 +0300 Subject: [PATCH 170/175] Update conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index faef9c5e..11afbdfc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -60,7 +60,7 @@ "DeathByCaptcha", "https://deathbycaptcha.com?refid=1237267242", ), - ProjectLink("RedPandaDev", "https://red-panda-dev.xyz/"), + ProjectLink("RedPandaDev group", "https://red-panda-dev.xyz/blog/"), ] } html_sidebars = { From cb79bd885eab3288e09ac5dff8356e588fff4ece Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:01:55 +0300 Subject: [PATCH 171/175] Update index.rst --- docs/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/index.rst b/docs/index.rst index 5d8af917..d8630ede 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -11,6 +11,8 @@ The library is intended for software developers and is used to work with the `Ru Support of the service `Death By Captcha `_ is integrated into this library, more information in the library documentation or in the `service docs `_. +Check our other projects here - `RedPandaDev group `_. For example - `Torrents Tracker bot `_ for Telegram + .. toctree:: :maxdepth: 1 :caption: Start here: From c573a8ba7fe6f339248e1ea4a2ece90682664ae2 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:02:03 +0300 Subject: [PATCH 172/175] Update info.rst --- docs/modules/enum/info.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/enum/info.rst b/docs/modules/enum/info.rst index 81caf405..81866f5b 100644 --- a/docs/modules/enum/info.rst +++ b/docs/modules/enum/info.rst @@ -40,7 +40,7 @@ To import this module: :members: :undoc-members: -.. autoclass:: python_rucaptcha.core.enums.LeminCroppedCaptchaEnm +.. autoclass:: python_rucaptcha.core.enums.LeminCaptchaEnm :members: :undoc-members: From e2cb5c7288a8d53d942d437487caaff12358dcfe Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:02:05 +0300 Subject: [PATCH 173/175] Update example.rst --- docs/modules/lemin/example.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/modules/lemin/example.rst b/docs/modules/lemin/example.rst index 17fcdaea..eafcff70 100644 --- a/docs/modules/lemin/example.rst +++ b/docs/modules/lemin/example.rst @@ -5,8 +5,8 @@ To import this module: .. code-block:: python - from python_rucaptcha.lemin_cropped_captcha import LeminCaptcha + from python_rucaptcha.lemin_captcha import LeminCaptcha -.. autoclass:: python_rucaptcha.lemin_cropped_captcha.LeminCaptcha +.. autoclass:: python_rucaptcha.lemin_captcha.LeminCaptcha :members: \ No newline at end of file From a53de1ebf797c921fe5c1159db03a413954cf9e9 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:02:07 +0300 Subject: [PATCH 174/175] Update info.md --- docs/modules/other-libs/info.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/modules/other-libs/info.md b/docs/modules/other-libs/info.md index 5a5ca784..b8f53b47 100644 --- a/docs/modules/other-libs/info.md +++ b/docs/modules/other-libs/info.md @@ -4,4 +4,6 @@ 1. [RuCaptcha / 2Captcha](https://github.com/AndreiDrang/python-rucaptcha) 2. [AntiCaptcha](https://github.com/AndreiDrang/python3-anticaptcha) 3. [Capsolver](https://github.com/AndreiDrang/python3-captchaai) -4. [RedPandaDev group](https://red-panda-dev.xyz/) + +Our other projects: +- [RedPandaDev group](https://red-panda-dev.xyz/blog/) From eda564e9844e0008399c37b60b8f7bdc8d96a891 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 8 Dec 2023 04:13:18 +0300 Subject: [PATCH 175/175] upd docs and typehinting --- src/python_rucaptcha/amazon_waf.py | 4 +++- src/python_rucaptcha/audio_captcha.py | 2 +- src/python_rucaptcha/capy_puzzle.py | 13 ++++++++++--- src/python_rucaptcha/fun_captcha.py | 8 +++++--- src/python_rucaptcha/hcaptcha.py | 12 +++++++----- src/python_rucaptcha/key_captcha.py | 10 ++++++---- src/python_rucaptcha/lemin_captcha.py | 8 +++++--- src/python_rucaptcha/re_captcha.py | 10 +++++++--- src/python_rucaptcha/turnstile.py | 8 +++++--- 9 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/python_rucaptcha/amazon_waf.py b/src/python_rucaptcha/amazon_waf.py index befd1421..eddc6623 100644 --- a/src/python_rucaptcha/amazon_waf.py +++ b/src/python_rucaptcha/amazon_waf.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import AmazonWAFCaptchaEnm @@ -9,7 +11,7 @@ def __init__( websiteKey: str, iv: str, context: str, - method: str = AmazonWAFCaptchaEnm.AmazonTaskProxyless.value, + method: Union[str, AmazonWAFCaptchaEnm] = AmazonWAFCaptchaEnm.AmazonTaskProxyless, *args, **kwargs, ): diff --git a/src/python_rucaptcha/audio_captcha.py b/src/python_rucaptcha/audio_captcha.py index afedcc3a..52421e91 100644 --- a/src/python_rucaptcha/audio_captcha.py +++ b/src/python_rucaptcha/audio_captcha.py @@ -74,7 +74,7 @@ def __init__( Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#audio + https://rucaptcha.com/api-docs/audio """ super().__init__(method=AudioCaptchaEnm.AudioTask.value, *args, **kwargs) diff --git a/src/python_rucaptcha/capy_puzzle.py b/src/python_rucaptcha/capy_puzzle.py index 0281f37e..e1de1e82 100644 --- a/src/python_rucaptcha/capy_puzzle.py +++ b/src/python_rucaptcha/capy_puzzle.py @@ -1,10 +1,17 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import CapyPuzzleEnm class CapyPuzzle(BaseCaptcha): def __init__( - self, websiteURL: str, websiteKey: str, method: str = CapyPuzzleEnm.CapyTaskProxyless.value, *args, **kwargs + self, + websiteURL: str, + websiteKey: str, + method: Union[str, CapyPuzzleEnm] = CapyPuzzleEnm.CapyTaskProxyless, + *args, + **kwargs, ): """ The class is used to work with CapyPuzzle. @@ -102,7 +109,7 @@ def __init__( if method not in CapyPuzzleEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {CapyPuzzleEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -118,7 +125,7 @@ def captcha_handler(self, **kwargs): return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/fun_captcha.py b/src/python_rucaptcha/fun_captcha.py index 885f8fcf..5e36e893 100644 --- a/src/python_rucaptcha/fun_captcha.py +++ b/src/python_rucaptcha/fun_captcha.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import FunCaptchaEnm @@ -7,7 +9,7 @@ def __init__( self, websiteURL: str, websitePublicKey: str, - method: str = FunCaptchaEnm.FunCaptchaTaskProxyless.value, + method: Union[str, FunCaptchaEnm] = FunCaptchaEnm.FunCaptchaTaskProxyless, *args, **kwargs, ): @@ -73,7 +75,7 @@ def __init__( if method not in FunCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {FunCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -88,7 +90,7 @@ def captcha_handler(self, **kwargs): """ return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/hcaptcha.py b/src/python_rucaptcha/hcaptcha.py index cbd6ab7c..25aadb8c 100644 --- a/src/python_rucaptcha/hcaptcha.py +++ b/src/python_rucaptcha/hcaptcha.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import HCaptchaEnm @@ -7,7 +9,7 @@ def __init__( self, websiteURL: str, websiteKey: str, - method: str = HCaptchaEnm.HCaptchaTaskProxyless.value, + method: Union[str, HCaptchaEnm] = HCaptchaEnm.HCaptchaTaskProxyless, *args, **kwargs, ): @@ -33,7 +35,7 @@ def __init__( "solution":{ "token":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A", "respKey":"E0_eyJ0eXAiOiJK...y2w5_YbP8PGuJBBo", - "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5614.0 Safari/537.36", + "userAgent":"Mozilla/5.0 (.......", "gRecaptchaResponse":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A" }, "cost":"0.00299", @@ -55,7 +57,7 @@ def __init__( "solution":{ "token":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A", "respKey":"E0_eyJ0eXAiOiJK...y2w5_YbP8PGuJBBo", - "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5614.0 Safari/537.36", + "userAgent":"Mozilla/5.0 (........", "gRecaptchaResponse":"P1_eyJ0eXAiOiJKV...1LDq89KyJ5A" }, "cost":"0.00299", @@ -80,7 +82,7 @@ def __init__( if method not in HCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {HCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -96,7 +98,7 @@ def captcha_handler(self, **kwargs): return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/key_captcha.py b/src/python_rucaptcha/key_captcha.py index 257b8ac6..28a31d1d 100644 --- a/src/python_rucaptcha/key_captcha.py +++ b/src/python_rucaptcha/key_captcha.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import KeyCaptchaEnm @@ -10,7 +12,7 @@ def __init__( s_s_c_session_id: str, s_s_c_web_server_sign: str, s_s_c_web_server_sign2: str, - method: str = KeyCaptchaEnm.KeyCaptchaTaskProxyless.value, + method: Union[str, KeyCaptchaEnm] = KeyCaptchaEnm.KeyCaptchaTaskProxyless, *args, **kwargs, ): @@ -62,7 +64,7 @@ def __init__( Dict with full server response Notes: - https://rucaptcha.com/api-rucaptcha#solving_keycaptcha + https://rucaptcha.com/api-docs/keycaptcha """ super().__init__(method=method, *args, **kwargs) @@ -80,7 +82,7 @@ def __init__( if method not in KeyCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {KeyCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -96,7 +98,7 @@ def captcha_handler(self, **kwargs): return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/lemin_captcha.py b/src/python_rucaptcha/lemin_captcha.py index d3c274af..0c637db9 100644 --- a/src/python_rucaptcha/lemin_captcha.py +++ b/src/python_rucaptcha/lemin_captcha.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import LeminCaptchaEnm @@ -8,7 +10,7 @@ def __init__( websiteURL: str, captchaId: str, div_id: str, - method: str = LeminCaptchaEnm.LeminTaskProxyless.value, + method: Union[str, LeminCaptchaEnm] = LeminCaptchaEnm.LeminTaskProxyless, *args, **kwargs, ): @@ -82,7 +84,7 @@ def __init__( if method not in LeminCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {LeminCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -97,7 +99,7 @@ def captcha_handler(self, **kwargs): """ return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/re_captcha.py b/src/python_rucaptcha/re_captcha.py index 5d653dc3..2ecfbada 100644 --- a/src/python_rucaptcha/re_captcha.py +++ b/src/python_rucaptcha/re_captcha.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import ReCaptchaEnm @@ -8,7 +10,7 @@ def __init__( websiteURL: str, websiteKey: str, minScore: float = 0.3, - method: str = ReCaptchaEnm.RecaptchaV2TaskProxyless.value, + method: Union[str, ReCaptchaEnm] = ReCaptchaEnm.RecaptchaV2TaskProxyless.value, *args, **kwargs, ): @@ -127,7 +129,9 @@ def __init__( Notes: https://rucaptcha.com/api-docs/recaptcha-v2 + https://rucaptcha.com/api-docs/recaptcha-v3 + https://rucaptcha.com/api-docs/recaptcha-v2-enterprise """ super().__init__(method=method, *args, **kwargs) @@ -140,7 +144,7 @@ def __init__( if method not in ReCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {ReCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -155,7 +159,7 @@ def captcha_handler(self, **kwargs): """ return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method diff --git a/src/python_rucaptcha/turnstile.py b/src/python_rucaptcha/turnstile.py index 431da884..a1aa3786 100644 --- a/src/python_rucaptcha/turnstile.py +++ b/src/python_rucaptcha/turnstile.py @@ -1,3 +1,5 @@ +from typing import Union + from .core.base import BaseCaptcha from .core.enums import TurnstileCaptchaEnm @@ -8,7 +10,7 @@ def __init__( websiteURL: str, websiteKey: str, userAgent: str, - method: str = TurnstileCaptchaEnm.TurnstileTaskProxyless.value, + method: Union[str, TurnstileCaptchaEnm] = TurnstileCaptchaEnm.TurnstileTaskProxyless, *args, **kwargs, ): @@ -81,7 +83,7 @@ def __init__( if method not in TurnstileCaptchaEnm.list_values(): raise ValueError(f"Invalid method parameter set, available - {TurnstileCaptchaEnm.list_values()}") - def captcha_handler(self, **kwargs): + def captcha_handler(self, **kwargs) -> dict: """ Sync solving method @@ -96,7 +98,7 @@ def captcha_handler(self, **kwargs): """ return self._processing_response(**kwargs) - async def aio_captcha_handler(self): + async def aio_captcha_handler(self) -> dict: """ Async solving method

-;W9>NlJ9>25|CcTmLhf=Y#VKy9@j$^bp!1W$F*5n@rxWji{~n`1 v@xJStl$-;8!Q;AY>6*O%n@h(%P;&LksIOiPTl*8E&Yp30`Ulf4yYGJiAO=E3 From 181acc065937ce68d9b8758d71e47d3a8dd46d7e Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 7 Oct 2023 09:39:26 +0300 Subject: [PATCH 032/175] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cbbffa8..f19f6c7e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # python-rucaptcha -![](https://github.com/AndreiDrang/python-rucaptcha/blob/master/files/RuCaptcha.png) +![](files/RuCaptchaHigh.png) Capsolver's Banner From a0176adcc6f3a9cc3cedf5b28b3472dfdd8dbe0f Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 7 Oct 2023 09:40:24 +0300 Subject: [PATCH 033/175] Create RuCaptchaMedium.png --- files/RuCaptchaMedium.png | Bin 0 -> 382860 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 files/RuCaptchaMedium.png diff --git a/files/RuCaptchaMedium.png b/files/RuCaptchaMedium.png new file mode 100644 index 0000000000000000000000000000000000000000..fbedef3b4085a478a8fcc6ac8fd314611d2dd269 GIT binary patch literal 382860 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 z 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