-
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.
- Loading branch information
1 parent
fcabd72
commit fbd84d7
Showing
5 changed files
with
185 additions
and
4 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 |
---|---|---|
@@ -0,0 +1,120 @@ | ||
from typing import Union | ||
|
||
from python3_capsolver.core.base import BaseCaptcha | ||
from python3_capsolver.core.enum import AntiImpervaTaskEnm | ||
from python3_capsolver.core.serializer import AntiImpervaTaskSer, CaptchaResponseSer | ||
|
||
|
||
class Imperva(BaseCaptcha): | ||
""" | ||
The class is used to work with Capsolver Imperva method. | ||
Args: | ||
api_key: Capsolver API key | ||
captcha_type: Captcha type name, like ``AntiImpervaTask`` and etc. | ||
websiteUrl: The website url | ||
userAgent: Browser userAgent | ||
Examples: | ||
>>> Imperva(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type="AntiImpervaTask", | ||
... websiteUrl="https://www.milanuncios.com/", | ||
... userAgent="Mozilla/5.0 (Windows ....", | ||
... proxy="socks5:98.181.137.83:4145", | ||
... utmvc=True, | ||
... reese84=True, | ||
... reeseScriptUrl="https://www.milanuncios.com/librarym.js", | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'token': '90F9EAF...'} | ||
) | ||
>>> Imperva(api_key="CAI-BA9XXXXXXXXXXXXX2702E010", | ||
... captcha_type=AntiImpervaTaskEnm.AntiImpervaTask, | ||
... websiteUrl="https://www.milanuncios.com/", | ||
... userAgent="Mozilla/5.0 (Windows ....", | ||
... proxy="socks5:98.181.137.83:4145", | ||
... utmvc=True, | ||
... reese84=True, | ||
... reeseScriptUrl="https://www.milanuncios.com/librarym.js", | ||
... ).captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'token': '90F9EAF...'} | ||
) | ||
>>> await Imperva(api_key="CAI-BA9650D2B9C2786B21120D512702E010", | ||
... captcha_type=AntiImpervaTaskEnm.AntiImpervaTask, | ||
... websiteUrl="https://www.milanuncios.com/", | ||
... userAgent="Mozilla/5.0 (Windows ....", | ||
... proxy="socks5:98.181.137.83:4145", | ||
... utmvc=True, | ||
... reese84=True, | ||
... reeseScriptUrl="https://www.milanuncios.com/librarym.js", | ||
... ).aio_captcha_handler() | ||
CaptchaResponseSer(errorId=0, | ||
errorCode=None, | ||
errorDescription=None, | ||
taskId='73bdcd28-6c77-4414-8....', | ||
status=<ResponseStatusEnm.Ready: 'ready'>, | ||
solution={'token': '90F9EAF...'} | ||
) | ||
Returns: | ||
CaptchaResponseSer model with full server response | ||
Notes: | ||
https://docs.capsolver.com/guide/antibots/imperva.html | ||
""" | ||
|
||
def __init__( | ||
self, | ||
captcha_type: Union[AntiImpervaTaskEnm, str], | ||
websiteUrl: str, | ||
userAgent: str, | ||
*args, | ||
**kwargs, | ||
): | ||
super().__init__(*args, **kwargs) | ||
|
||
if captcha_type == AntiImpervaTaskEnm.AntiImpervaTask: | ||
self.task_params = AntiImpervaTaskSer(**locals()).dict() | ||
else: | ||
raise ValueError( | ||
f"""Invalid `captcha_type` parameter set for `{self.__class__.__name__}`, | ||
available - {AntiImpervaTaskEnm.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 | ||
""" | ||
return self._processing_captcha(create_params=self.task_params) | ||
|
||
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 | ||
""" | ||
return await self._aio_processing_captcha(create_params=self.task_params) |
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,46 @@ | ||
import pytest | ||
|
||
from tests.conftest import BaseTest | ||
from python3_capsolver.imperva import Imperva | ||
from python3_capsolver.core.enum import AntiImpervaTaskEnm | ||
|
||
|
||
class TestImpervaBase(BaseTest): | ||
def test_captcha_handler_exist(self): | ||
assert "captcha_handler" in Imperva.__dict__.keys() | ||
|
||
def test_aio_captcha_handler_exist(self): | ||
assert "aio_captcha_handler" in Imperva.__dict__.keys() | ||
|
||
def test_wrong_captcha_type(self): | ||
with pytest.raises(ValueError): | ||
Imperva( | ||
api_key=self.get_random_string(36), | ||
captcha_type="test", | ||
websiteUrl=self.get_random_string(36), | ||
userAgent=self.get_random_string(36), | ||
) | ||
|
||
def test_no_captcha_type(self): | ||
with pytest.raises(TypeError): | ||
Imperva( | ||
api_key=self.get_random_string(36), | ||
websiteUrl=self.get_random_string(36), | ||
userAgent=self.get_random_string(36), | ||
) | ||
|
||
def test_no_websiteUrl(self): | ||
with pytest.raises(TypeError): | ||
Imperva( | ||
api_key=self.get_random_string(36), | ||
captcha_type=AntiImpervaTaskEnm.AntiImpervaTask, | ||
userAgent=self.get_random_string(36), | ||
) | ||
|
||
def test_no_userAgent(self): | ||
with pytest.raises(TypeError): | ||
Imperva( | ||
api_key=self.get_random_string(36), | ||
captcha_type=AntiImpervaTaskEnm.AntiImpervaTask, | ||
websiteUrl=self.get_random_string(36), | ||
) |