-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #39 from AndreiDrang/main
0.8
- Loading branch information
Showing
16 changed files
with
272 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
|
||
from python3_capsolver import ( | ||
core, | ||
akamai, | ||
gee_test, | ||
hcaptcha, | ||
recaptcha, | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
Akamai | ||
====== | ||
|
||
To import this module: | ||
|
||
.. code-block:: python | ||
from python3_capsolver.akamai import Akamai | ||
.. autoclass:: python3_capsolver.akamai.Akamai | ||
:members: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
pallets_sphinx_themes==2.* | ||
myst-parser==2.0.* | ||
autodoc_pydantic==1.9.* | ||
autodoc_pydantic==1.9.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# codestyle | ||
isort==5.* | ||
black==23.7.0 | ||
black==23.9.1 | ||
autoflake==2.* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
__version__ = "0.7.1" | ||
__version__ = "0.8" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
from typing import Union | ||
|
||
from python3_capsolver.core.base import BaseCaptcha | ||
from python3_capsolver.core.enum import AntiAkamaiTaskEnm, EndpointPostfixEnm | ||
from python3_capsolver.core.serializer import ( | ||
PostRequestSer, | ||
CaptchaResponseSer, | ||
AntiAkamaiBMPTaskSer, | ||
AntiAkamaiWebTaskSer, | ||
) | ||
|
||
|
||
class Akamai(BaseCaptcha): | ||
""" | ||
The class is used to work with Capsolver AntiAkamai methods. | ||
Args: | ||
api_key: Capsolver API key | ||
captcha_type: Captcha type name, like ``AntiAkamaiBMPTask`` and etc. | ||
packageName: Package name of AkamaiBMP mobile APP | ||
version: AKAMAI BMP Version number, default is: 3.2.6 , max support 3.3.1 | ||
Examples: | ||
>>> Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type="AntiAkamaiBMPTask", | ||
... packageName="de.zalando.iphone", | ||
... country="US", | ||
... deviceId="90F9EAF5-D6E5-4E30-BC8B-B7780AD02600", | ||
... deviceName="iPhone14,2/16.0.2", | ||
... count=10, | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'deviceId': '90F9EAF...'} | ||
) | ||
>>> Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type="AntiAkamaiWebTask", | ||
... url="https://www.xxxx.com/nMRH2/aYJ/PQ4b/32/0peDlm/b9f5NJcXf7tiYE/OE9CMGI1/Nzsn/bCVKCnA", | ||
... abck="14164862507BD4......", | ||
... bmsz="4E3C....33", | ||
... userAgent="Mozilla/5.0 (Wi....", | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'sensorData': '2;3159346;4338233...'} | ||
) | ||
>>> Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type=AntiAkamaiTaskEnm.AntiAkamaiBMPTask, | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'deviceId': '6DKFOD0...'} | ||
) | ||
>>> Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type=AntiAkamaiTaskEnm.AntiAkamaiWebTask, | ||
... url="https://www.xxxx.com/nMRH2/aYJ/PQ4b/32/0peDlm/b9f5NJcXf7tiYE/OE9CMGI1/Nzsn/bCVKCnA", | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'sensorData': '2;3159346;4338233...'} | ||
) | ||
>>> Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type=AntiAkamaiTaskEnm.AntiAkamaiBMPTask, | ||
... **{ | ||
... "version": "3.2.6", | ||
... "deviceId": "90F9EAF5-D6E5-4E30-BC8B-B7780AD02600", | ||
... "deviceName": "iPhone14,2/16.0.2", | ||
... "count": 10, | ||
... }, | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId="87f149f4-1c....", | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'deviceId': '90F9EAF...'} | ||
) | ||
>>> await Akamai(api_key="CAI-BA9650D2B9C2786B21120D512702E010", | ||
... captcha_type="AntiAkamaiBMPTask", | ||
... packageName="de.zalando.iphone", | ||
... country="US", | ||
... deviceId="90F9EAF5-D6E5-4E30-BC8B-B7780AD02600", | ||
... deviceName="iPhone14,2/16.0.2", | ||
... count=10, | ||
... ).aio_captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'deviceId': '90F9EAF...'} | ||
) | ||
>>> await Akamai(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type=AntiAkamaiTaskEnm.AntiAkamaiWebTask, | ||
... url="https://www.xxxx.com/nMRH2/aYJ/PQ4b/32/0peDlm/b9f5NJcXf7tiYE/OE9CMGI1/Nzsn/bCVKCnA", | ||
... ).aio_captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'sensorData': '2;3159346;4338233...'} | ||
) | ||
Returns: | ||
CaptchaResponseSer model with full server response | ||
Notes: | ||
https://docs.capsolver.com/guide/antibots/akamaibmp.html | ||
https://docs.capsolver.com/guide/antibots/akamaiweb.html | ||
""" | ||
|
||
def __init__( | ||
self, | ||
captcha_type: Union[AntiAkamaiTaskEnm, str], | ||
packageName: str = "de.zalando.iphone", | ||
version: str = "3.2.6", | ||
country: str = "US", | ||
url: str = None, | ||
*args, | ||
**kwargs, | ||
): | ||
super().__init__(*args, **kwargs) | ||
self.__serializer = PostRequestSer | ||
self.__url_postfix = None | ||
|
||
if captcha_type == AntiAkamaiTaskEnm.AntiAkamaiBMPTask: | ||
self.task_params = AntiAkamaiBMPTaskSer(**locals()).dict() | ||
self.__url_postfix = EndpointPostfixEnm.AKAMAI_BMP_INVOKE.value | ||
elif captcha_type == AntiAkamaiTaskEnm.AntiAkamaiWebTask: | ||
self.task_params = AntiAkamaiWebTaskSer(**locals()).dict() | ||
self.__url_postfix = EndpointPostfixEnm.AKAMAI_WEB_INVOKE.value | ||
else: | ||
raise ValueError( | ||
f"""Invalid `captcha_type` parameter set for `{self.__class__.__name__}`, | ||
available - {AntiAkamaiTaskEnm.list_values()}""" | ||
) | ||
|
||
for key in kwargs: | ||
self.task_params.update({key: kwargs[key]}) | ||
|
||
def captcha_handler(self) -> CaptchaResponseSer: | ||
""" | ||
Sync solving method | ||
Returns: | ||
CaptchaResponseSer model with full service response | ||
Notes: | ||
Check class docstring for more info | ||
""" | ||
self._prepare_create_task_payload(serializer=self.__serializer, create_params=self.task_params) | ||
return CaptchaResponseSer( | ||
**self._create_task( | ||
url_postfix=self.__url_postfix, | ||
) | ||
) | ||
|
||
async def aio_captcha_handler(self) -> CaptchaResponseSer: | ||
""" | ||
Async method for captcha solving | ||
Returns: | ||
CaptchaResponseSer model with full service response | ||
Notes: | ||
Check class docstring for more info | ||
""" | ||
self._prepare_create_task_payload(serializer=self.__serializer, create_params=self.task_params) | ||
return CaptchaResponseSer( | ||
**await self._aio_create_task( | ||
url_postfix=self.__url_postfix, | ||
) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
requests>=2.21.0 | ||
aiohttp>=3.7.4 | ||
pydantic==1.* | ||
pydantic==1.10.* | ||
tenacity==8.* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import pytest | ||
|
||
from tests.conftest import BaseTest | ||
from python3_capsolver.akamai import Akamai | ||
|
||
|
||
class TestAkamaiBase(BaseTest): | ||
AKAMAI_WEB_URL = "https://www.xxxx.com/nMRH2/aYJ/PQ4b/32/0peDlm/b9f5NJcXf7tiYE/OE9CMGI1/Nzsn/bCVKCnA" | ||
|
||
def test_captcha_handler_exist(self): | ||
assert "captcha_handler" in Akamai.__dict__.keys() | ||
|
||
def test_aio_captcha_handler_exist(self): | ||
assert "aio_captcha_handler" in Akamai.__dict__.keys() | ||
|
||
def test_wrong_captcha_type(self): | ||
with pytest.raises(ValueError): | ||
Akamai( | ||
api_key=self.get_random_string(36), | ||
captcha_type="test", | ||
) | ||
|
||
def test_no_captcha_type(self): | ||
with pytest.raises(TypeError): | ||
Akamai(api_key=self.get_random_string(36)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters