capmonstercloudclient 1.6.0__py3-none-any.whl → 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. capmonstercloudclient/CapMonsterCloudClient.py +36 -41
  2. capmonstercloudclient/GetResultTimeouts.py +3 -0
  3. capmonstercloudclient/requests/AmazonWafRequest.py +18 -11
  4. capmonstercloudclient/requests/BasiliskCustomTaskRequest.py +11 -9
  5. capmonstercloudclient/requests/BinanceTaskRequest.py +18 -11
  6. capmonstercloudclient/requests/CustomTaskRequestBase.py +3 -3
  7. capmonstercloudclient/requests/DataDomeCustomTaskRequest.py +9 -8
  8. capmonstercloudclient/requests/FuncaptchaRequest.py +15 -10
  9. capmonstercloudclient/requests/GeetestRequest.py +25 -10
  10. capmonstercloudclient/requests/HcaptchaRequest.py +16 -9
  11. capmonstercloudclient/requests/ImageToTextRequest.py +1 -1
  12. capmonstercloudclient/requests/ImpervaCustomTaskRequest.py +9 -8
  13. capmonstercloudclient/requests/RecaptchaComplexImageTask.py +2 -2
  14. capmonstercloudclient/requests/RecaptchaV2EnterpiseRequest.py +14 -10
  15. capmonstercloudclient/requests/RecaptchaV2Request.py +14 -9
  16. capmonstercloudclient/requests/RecognitionComplexImageTaskRequest.py +45 -0
  17. capmonstercloudclient/requests/TenDiCustomTaskRequest.py +12 -10
  18. capmonstercloudclient/requests/TurnstileRequest.py +43 -5
  19. capmonstercloudclient/requests/__init__.py +15 -21
  20. capmonstercloudclient/requests/baseRequest.py +2 -1
  21. capmonstercloudclient/requests/baseRequestWithProxy.py +7 -0
  22. capmonstercloudclient/version.txt +1 -1
  23. {capmonstercloudclient-1.6.0.dist-info → capmonstercloudclient-3.0.0.dist-info}/METADATA +21 -4
  24. capmonstercloudclient-3.0.0.dist-info/RECORD +39 -0
  25. {capmonstercloudclient-1.6.0.dist-info → capmonstercloudclient-3.0.0.dist-info}/WHEEL +1 -1
  26. capmonstercloudclient/requests/AmazonWafProxylessRequest.py +0 -22
  27. capmonstercloudclient/requests/AmazonWafRequestBase.py +0 -13
  28. capmonstercloudclient/requests/BasiliskCustomTaskProxylessRequest.py +0 -16
  29. capmonstercloudclient/requests/BasiliskCustomTaskRequestBase.py +0 -11
  30. capmonstercloudclient/requests/BinanceTaskProxylessRequest.py +0 -17
  31. capmonstercloudclient/requests/BinanceTaskRequestBase.py +0 -11
  32. capmonstercloudclient/requests/DataDomeCustomTaskProxylessRequest.py +0 -36
  33. capmonstercloudclient/requests/DataDomeCustomTaskRequestBase.py +0 -8
  34. capmonstercloudclient/requests/FuncaptchaProxylessRequest.py +0 -18
  35. capmonstercloudclient/requests/FuncaptchaRequestBase.py +0 -10
  36. capmonstercloudclient/requests/GeetestProxylessRequest.py +0 -31
  37. capmonstercloudclient/requests/GeetestRequestBase.py +0 -20
  38. capmonstercloudclient/requests/HcaptchaProxylessRequest.py +0 -25
  39. capmonstercloudclient/requests/HcaptchaRequestBase.py +0 -13
  40. capmonstercloudclient/requests/ImpervaCustomTaskProxylessRequest.py +0 -33
  41. capmonstercloudclient/requests/ImpervaCustomTaskRequestBase.py +0 -8
  42. capmonstercloudclient/requests/RecaptchaV2EnterpriseProxylessRequest.py +0 -18
  43. capmonstercloudclient/requests/RecaptchaV2EnterpriseRequestBase.py +0 -11
  44. capmonstercloudclient/requests/RecaptchaV2ProxylessRequest.py +0 -30
  45. capmonstercloudclient/requests/RecaptchaV2RequestBase.py +0 -12
  46. capmonstercloudclient/requests/TenDiCustomTaskProxylessRequest.py +0 -16
  47. capmonstercloudclient/requests/TenDiCustomTaskRequestBase.py +0 -11
  48. capmonstercloudclient/requests/TurnstileProxylessRequest.py +0 -10
  49. capmonstercloudclient/requests/TurnstileRequestBase.py +0 -47
  50. capmonstercloudclient-1.6.0.dist-info/RECORD +0 -61
  51. {capmonstercloudclient-1.6.0.dist-info → capmonstercloudclient-3.0.0.dist-info/licenses}/LICENSE +0 -0
  52. {capmonstercloudclient-1.6.0.dist-info → capmonstercloudclient-3.0.0.dist-info}/top_level.txt +0 -0
@@ -14,22 +14,23 @@ from .utils import parseVersion
14
14
 
15
15
 
16
16
  _instance_config = (
17
- ((RecaptchaV2ProxylessRequest, RecaptchaV2Request), getRecaptchaV2Timeouts),
18
- ((RecaptchaV2EnterpriseProxylessRequest, RecaptchaV2EnterpriseRequest), getRecaptchaV2EnterpriseTimeouts),
17
+ ((RecaptchaV2Request,), getRecaptchaV2Timeouts),
18
+ ((RecaptchaV2EnterpriseRequest,), getRecaptchaV2EnterpriseTimeouts),
19
19
  ((RecaptchaV3ProxylessRequest), getRecaptchaV3Timeouts),
20
20
  ((ImageToTextRequest), getImage2TextTimeouts),
21
- ((FuncaptchaProxylessRequest, FuncaptchaRequest), getFuncaptchaTimeouts),
22
- ((HcaptchaProxylessRequest, HcaptchaRequest), getHcaptchaTimeouts),
23
- ((GeetestProxylessRequest, GeetestRequest), getGeetestTimeouts),
24
- ((TurnstileProxylessRequest, TurnstileRequest), getTurnstileTimeouts),
21
+ ((FuncaptchaRequest,), getFuncaptchaTimeouts),
22
+ ((HcaptchaRequest,), getHcaptchaTimeouts),
23
+ ((GeetestRequest,), getGeetestTimeouts),
24
+ ((TurnstileRequest,), getTurnstileTimeouts),
25
25
  ((RecaptchaComplexImageTaskRequest, HcaptchaComplexImageTaskRequest,
26
26
  FunCaptchaComplexImageTaskRequest), getImage2TextTimeouts),
27
- ((DataDomeCustomTaskRequest, DataDomeCustomTaskProxylessRequest), getDatadomeTimeouts),
28
- ((TenDiCustomTaskRequest, TenDiCustomTaskProxylessRequest), getTenDiTimeouts),
29
- ((BasiliskCustomTaskRequest, BasiliskCustomTaskProxylessRequest), getBasiliskTimeouts),
30
- ((AmazonWafRequest, AmazonWafProxylessRequest), getAmazonWafTimeouts),
31
- ((BinanceTaskRequest, BinanceTaskProxylessRequest), getBinanceTimeouts),
32
- ((ImpervaCustomTaskRequest, ImpervaCustomTaskProxylessRequest), getImpervaTimeouts)
27
+ ((DataDomeCustomTaskRequest,), getDatadomeTimeouts),
28
+ ((TenDiCustomTaskRequest,), getTenDiTimeouts),
29
+ ((BasiliskCustomTaskRequest,), getBasiliskTimeouts),
30
+ ((AmazonWafRequest,), getAmazonWafTimeouts),
31
+ ((BinanceTaskRequest,), getBinanceTimeouts),
32
+ ((ImpervaCustomTaskRequest,), getImpervaTimeouts),
33
+ ((RecognitionComplexImageTaskRequest), getCITTimeouts)
33
34
  )
34
35
 
35
36
 
@@ -60,29 +61,25 @@ class CapMonsterClient:
60
61
  return result
61
62
 
62
63
 
63
- async def solve_captcha(self, request: Union[RecaptchaV2EnterpriseProxylessRequest,
64
+ async def solve_captcha(self, request: Union[
64
65
  RecaptchaV2EnterpriseRequest,
65
66
  RecaptchaV2Request,
66
- RecaptchaV2ProxylessRequest,
67
67
  RecaptchaV3ProxylessRequest,
68
- ImageToTextRequest,
69
- FuncaptchaProxylessRequest,
70
- FuncaptchaRequest,
71
- HcaptchaRequest,
72
- HcaptchaProxylessRequest,
73
- GeetestProxylessRequest,
74
- GeetestRequest,
75
- TurnstileProxylessRequest,
76
- TurnstileRequest,
77
- HcaptchaComplexImageTaskRequest,
78
68
  RecaptchaComplexImageTaskRequest,
69
+ ImageToTextRequest,
70
+ FuncaptchaRequest,
79
71
  FunCaptchaComplexImageTaskRequest,
80
- DataDomeCustomTaskProxylessRequest,
72
+ HcaptchaRequest,
73
+ HcaptchaComplexImageTaskRequest,
74
+ GeetestRequest,
81
75
  DataDomeCustomTaskRequest,
76
+ TenDiCustomTaskRequest,
77
+ BasiliskCustomTaskRequest,
78
+ AmazonWafRequest,
82
79
  BinanceTaskRequest,
83
- BinanceTaskProxylessRequest,
84
80
  ImpervaCustomTaskRequest,
85
- ImpervaCustomTaskProxylessRequest],
81
+ TurnstileRequest,
82
+ RecognitionComplexImageTaskRequest],
86
83
  ) -> Dict[str, str]:
87
84
  '''
88
85
  Non-blocking method for captcha solving.
@@ -97,27 +94,25 @@ class CapMonsterClient:
97
94
  raise UnknownRequestInstanceError(f'Unknown request instance "{type(request)}", ' \
98
95
  f'expected that request will belong next instances: {rs_all}')
99
96
 
100
- async def _solve(self, request: Union[RecaptchaV2EnterpriseProxylessRequest,
97
+ async def _solve(self, request: Union[
101
98
  RecaptchaV2EnterpriseRequest,
102
99
  RecaptchaV2Request,
103
- RecaptchaV2ProxylessRequest,
104
100
  RecaptchaV3ProxylessRequest,
105
- ImageToTextRequest,
106
- FuncaptchaProxylessRequest,
107
- FuncaptchaRequest,
108
- HcaptchaRequest,
109
- HcaptchaProxylessRequest,
110
- GeetestProxylessRequest,
111
- GeetestRequest,
112
- TurnstileProxylessRequest,
113
- TurnstileRequest,
114
- HcaptchaComplexImageTaskRequest,
115
101
  RecaptchaComplexImageTaskRequest,
102
+ ImageToTextRequest,
103
+ FuncaptchaRequest,
116
104
  FunCaptchaComplexImageTaskRequest,
105
+ HcaptchaRequest,
106
+ HcaptchaComplexImageTaskRequest,
107
+ GeetestRequest,
108
+ DataDomeCustomTaskRequest,
109
+ TenDiCustomTaskRequest,
110
+ BasiliskCustomTaskRequest,
111
+ AmazonWafRequest,
117
112
  BinanceTaskRequest,
118
- BinanceTaskProxylessRequest,
119
113
  ImpervaCustomTaskRequest,
120
- ImpervaCustomTaskProxylessRequest],
114
+ TurnstileRequest,
115
+ RecognitionComplexImageTaskRequest],
121
116
  timeouts: GetResultTimeouts,
122
117
  ) -> Dict[str, str]:
123
118
 
@@ -49,3 +49,6 @@ def getBinanceTimeouts() -> GetResultTimeouts:
49
49
 
50
50
  def getImpervaTimeouts() -> GetResultTimeouts:
51
51
  return GetResultTimeouts(1, 0, 1, 20)
52
+
53
+ def getCITTimeouts() -> GetResultTimeouts:
54
+ return GetResultTimeouts(0.35, 0, 0.2, 10)
@@ -1,11 +1,17 @@
1
- from typing import Dict, Union
2
- from pydantic import Field, validator
1
+ from typing import Dict, Union, Optional
2
+ from pydantic import Field
3
3
 
4
- from .proxy_info import ProxyInfo
5
- from .AmazonWafRequestBase import AmazonWafRequestBase
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
6
5
 
7
- class AmazonWafRequest(AmazonWafRequestBase, ProxyInfo):
6
+ class AmazonWafRequest(BaseRequestWithProxy):
8
7
  type: str = 'AmazonTask'
8
+ websiteUrl: str
9
+ challengeScript: str
10
+ captchaScript: str
11
+ websiteKey: str
12
+ context: str
13
+ iv: str
14
+ cookieSolution: Optional[bool] = Field(default=None)
9
15
 
10
16
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
17
  task = {}
@@ -16,12 +22,13 @@ class AmazonWafRequest(AmazonWafRequestBase, ProxyInfo):
16
22
  task['websiteKey'] = self.websiteKey
17
23
  task['context'] = self.context
18
24
  task['iv'] = self.iv
19
-
20
- task['proxyType'] = self.proxyType
21
- task['proxyAddress'] = self.proxyAddress
22
- task['proxyPort'] = self.proxyPort
23
- task['proxyLogin'] = self.proxyLogin
24
- task['proxyPassword'] = self.proxyPassword
25
+
26
+ if self.proxy:
27
+ task['proxyType'] = self.proxy.proxyType
28
+ task['proxyAddress'] = self.proxy.proxyAddress
29
+ task['proxyPort'] = self.proxy.proxyPort
30
+ task['proxyLogin'] = self.proxy.proxyLogin
31
+ task['proxyPassword'] = self.proxy.proxyPassword
25
32
 
26
33
  if self.cookieSolution is not None:
27
34
  task['cookieSolution'] = self.cookieSolution
@@ -1,10 +1,11 @@
1
1
  from typing import Dict, Union
2
- from pydantic import Field, validator
2
+ from pydantic import Field
3
3
 
4
- from .proxy_info import ProxyInfo
5
- from .BasiliskCustomTaskRequestBase import BasiliskCustomTaskRequestBase
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
6
5
 
7
- class BasiliskCustomTaskRequest(BasiliskCustomTaskRequestBase, ProxyInfo):
6
+ class BasiliskCustomTaskRequest(CustomTaskRequestBase):
7
+ captchaClass: str = Field(default='Basilisk')
8
+ websiteKey: str = Field()
8
9
 
9
10
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10
11
  task = {}
@@ -12,11 +13,12 @@ class BasiliskCustomTaskRequest(BasiliskCustomTaskRequestBase, ProxyInfo):
12
13
  task['class'] = self.captchaClass
13
14
  task['websiteURL'] = self.websiteUrl
14
15
  task['websiteKey'] = self.websiteKey
15
- task['proxyType'] = self.proxyType
16
- task['proxyAddress'] = self.proxyAddress
17
- task['proxyPort'] = self.proxyPort
18
- task['proxyLogin'] = self.proxyLogin
19
- task['proxyPassword'] = self.proxyPassword
16
+ if self.proxy:
17
+ task['proxyType'] = self.proxy.proxyType
18
+ task['proxyAddress'] = self.proxy.proxyAddress
19
+ task['proxyPort'] = self.proxy.proxyPort
20
+ task['proxyLogin'] = self.proxy.proxyLogin
21
+ task['proxyPassword'] = self.proxy.proxyPassword
20
22
  if self.userAgent is not None:
21
23
  task['userAgent'] = self.userAgent
22
24
  return task
@@ -1,22 +1,29 @@
1
- from typing import Dict, Union
2
- from pydantic import Field, validator
1
+ from typing import Dict, Union, Optional
2
+ from pydantic import Field
3
3
 
4
- from .proxy_info import ProxyInfo
5
- from .BinanceTaskRequestBase import BinanceTaskRequestBase
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
5
+
6
+ class BinanceTaskRequest(BaseRequestWithProxy):
7
+ type: str = Field(default='BinanceTask')
8
+ websiteKey: str = Field()
9
+ websiteUrl: str = Field()
10
+ validateId: str = Field()
11
+ userAgent: Optional[str] = None
6
12
 
7
- class BinanceTaskRequest(BinanceTaskRequestBase, ProxyInfo):
8
-
9
13
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10
14
  task = {}
11
15
  task['type'] = self.type
12
16
  task['validateId'] = self.validateId
13
17
  task['websiteURL'] = self.websiteUrl
14
18
  task['websiteKey'] = self.websiteKey
15
- task['proxyType'] = self.proxyType
16
- task['proxyAddress'] = self.proxyAddress
17
- task['proxyPort'] = self.proxyPort
18
- task['proxyLogin'] = self.proxyLogin
19
- task['proxyPassword'] = self.proxyPassword
19
+
20
+ if self.proxy:
21
+ task['proxyType'] = self.proxy.proxyType
22
+ task['proxyAddress'] = self.proxy.proxyAddress
23
+ task['proxyPort'] = self.proxy.proxyPort
24
+ task['proxyLogin'] = self.proxy.proxyLogin
25
+ task['proxyPassword'] = self.proxy.proxyPassword
26
+
20
27
  if self.userAgent is not None:
21
28
  task['userAgent'] = self.userAgent
22
29
  return task
@@ -1,8 +1,8 @@
1
- from typing import Optional, List, Dict
1
+ from typing import Optional, List
2
2
 
3
- from .baseRequest import BaseRequest
3
+ from .baseRequestWithProxy import BaseRequestWithProxy
4
4
 
5
- class CustomTaskRequestBase(BaseRequest):
5
+ class CustomTaskRequestBase(BaseRequestWithProxy):
6
6
  captchaClass: str # Class(subtype) of ComplexImageTask
7
7
  type: str = "CustomTask" # Recognition task type
8
8
  websiteUrl: str # Address of a webpage with captcha
@@ -1,9 +1,9 @@
1
1
  from typing import Dict, Union
2
2
  from pydantic import Field, validator
3
- from .DataDomeCustomTaskRequestBase import DataDomeCustomTaskRequestBase
4
- from .proxy_info import ProxyInfo
3
+ from .CustomTaskRequestBase import CustomTaskRequestBase
5
4
 
6
- class DataDomeCustomTaskRequest(DataDomeCustomTaskRequestBase, ProxyInfo):
5
+ class DataDomeCustomTaskRequest(CustomTaskRequestBase):
6
+ captchaClass: str = Field(default='DataDome')
7
7
  metadata : Dict[str, str]
8
8
 
9
9
  @validator('metadata')
@@ -28,11 +28,12 @@ class DataDomeCustomTaskRequest(DataDomeCustomTaskRequestBase, ProxyInfo):
28
28
  task['type'] = self.type
29
29
  task['class'] = self.captchaClass
30
30
  task['websiteURL'] = self.websiteUrl
31
- task['proxyType'] = self.proxyType
32
- task['proxyAddress'] = self.proxyAddress
33
- task['proxyPort'] = self.proxyPort
34
- task['proxyLogin'] = self.proxyLogin
35
- task['proxyPassword'] = self.proxyPassword
31
+ if self.proxy:
32
+ task['proxyType'] = self.proxy.proxyType
33
+ task['proxyAddress'] = self.proxy.proxyAddress
34
+ task['proxyPort'] = self.proxy.proxyPort
35
+ task['proxyLogin'] = self.proxy.proxyLogin
36
+ task['proxyPassword'] = self.proxy.proxyPassword
36
37
  task['domains'] = self.domains
37
38
  task['metadata'] = self.metadata
38
39
  if self.userAgent is not None:
@@ -1,22 +1,27 @@
1
- from typing import Dict, Union
1
+ from typing import Dict, Union, Optional
2
2
  from pydantic import Field
3
3
 
4
- from .FuncaptchaRequestBase import FuncaptchaRequestBase
5
- from .proxy_info import ProxyInfo
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
6
5
 
7
- class FuncaptchaRequest(FuncaptchaRequestBase, ProxyInfo):
6
+ class FuncaptchaRequest(BaseRequestWithProxy):
8
7
  type: str = Field(default='FunCaptchaTask')
9
-
8
+ websiteUrl: str
9
+ websitePublicKey: str
10
+ funcaptchaApiJSSubdomain: Optional[str] = Field(default=None)
11
+ data: Optional[str] = Field(default=None)
12
+
10
13
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
14
  task = {}
12
15
  task['type'] = self.type
13
16
  task['websiteURL'] = self.websiteUrl
14
17
  task['websitePublicKey'] = self.websitePublicKey
15
- task['proxyType'] = self.proxyType
16
- task['proxyAddress'] = self.proxyAddress
17
- task['proxyPort'] = self.proxyPort
18
- task['proxyLogin'] = self.proxyLogin
19
- task['proxyPassword'] = self.proxyPassword
18
+ if self.proxy:
19
+ task['proxyType'] = self.proxy.proxyType
20
+ task['proxyAddress'] = self.proxy.proxyAddress
21
+ task['proxyPort'] = self.proxy.proxyPort
22
+ task['proxyLogin'] = self.proxy.proxyLogin
23
+ task['proxyPassword'] = self.proxy.proxyPassword
24
+
20
25
  if self.funcaptchaApiJSSubdomain is not None:
21
26
  task['funcaptchaApiJSSubdomain'] = self.funcaptchaApiJSSubdomain
22
27
  if self.data is not None:
@@ -1,12 +1,26 @@
1
- from pydantic import Field
2
- from typing import Dict, Union
1
+ from pydantic import Field, validator
2
+ from typing import Dict, Union, Optional
3
3
 
4
- from .GeetestRequestBase import GeetestRequestBase
5
- from .proxy_info import ProxyInfo
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
6
5
 
7
- class GeetestRequest(GeetestRequestBase, ProxyInfo):
6
+
7
+ class GeetestRequest(BaseRequestWithProxy):
8
8
  type: str = Field(default='GeeTestTask')
9
+ websiteUrl: str
10
+ gt: str
11
+ challenge: Optional[str] = Field(default=None)
12
+ version: int = Field(default=3)
13
+ initParameters: Optional[Dict] = Field(default=None)
14
+ geetestApiServerSubdomain: Optional[str] = Field(default=None)
15
+ geetestGetLib: Optional[str] = Field(default=None)
16
+ user_agent: Optional[str] = Field(default=None)
9
17
 
18
+ @validator('version')
19
+ def validate_version(cls, value):
20
+ if value not in [3, 4]:
21
+ raise ValueError(f"Geetest version could be 3 or 4, not {value}")
22
+ return value
23
+
10
24
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
25
  task = {}
12
26
  task['type'] = self.type
@@ -30,9 +44,10 @@ class GeetestRequest(GeetestRequestBase, ProxyInfo):
30
44
  if self.user_agent is not None:
31
45
  task['userAgent'] = self.user_agent
32
46
 
33
- task['proxyType'] = self.proxyType
34
- task['proxyAddress'] = self.proxyAddress
35
- task['proxyPort'] = self.proxyPort
36
- task['proxyLogin'] = self.proxyLogin
37
- task['proxyPassword'] = self.proxyPassword
47
+ if self.proxy:
48
+ task['proxyType'] = self.proxy.proxyType
49
+ task['proxyAddress'] = self.proxy.proxyAddress
50
+ task['proxyPort'] = self.proxy.proxyPort
51
+ task['proxyLogin'] = self.proxy.proxyLogin
52
+ task['proxyPassword'] = self.proxy.proxyPassword
38
53
  return task
@@ -1,11 +1,17 @@
1
1
  from pydantic import Field
2
- from typing import Dict, Union
2
+ from typing import Dict, Union, Optional
3
3
 
4
- from .HcaptchaRequestBase import HcaptchaRequestBase
5
- from .proxy_info import ProxyInfo
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
6
5
 
7
- class HcaptchaRequest(HcaptchaRequestBase, ProxyInfo):
6
+ class HcaptchaRequest(BaseRequestWithProxy):
8
7
  type: str = Field(default='HCaptchaTask')
8
+ websiteUrl: str
9
+ websiteKey: str
10
+ is_invisible: Optional[bool] = Field(default=None)
11
+ data: Optional[str] = Field(default=None)
12
+ user_agent: Optional[str] = Field(default=None)
13
+ cookies: Optional[str] = Field(default=None)
14
+ fallbackToActualUA: Optional[bool] = Field(default=None)
9
15
 
10
16
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
17
 
@@ -13,11 +19,12 @@ class HcaptchaRequest(HcaptchaRequestBase, ProxyInfo):
13
19
  task['type'] = self.type
14
20
  task['websiteURL'] = self.websiteUrl
15
21
  task['websiteKey'] = self.websiteKey
16
- task['proxyType'] = self.proxyType
17
- task['proxyAddress'] = self.proxyAddress
18
- task['proxyPort'] = self.proxyPort
19
- task['proxyLogin'] = self.proxyLogin
20
- task['proxyPassword'] = self.proxyPassword
22
+ if self.proxy:
23
+ task['proxyType'] = self.proxy.proxyType
24
+ task['proxyAddress'] = self.proxy.proxyAddress
25
+ task['proxyPort'] = self.proxy.proxyPort
26
+ task['proxyLogin'] = self.proxy.proxyLogin
27
+ task['proxyPassword'] = self.proxy.proxyPassword
21
28
  if self.is_invisible is not None:
22
29
  task['isInvisible'] = self.is_invisible
23
30
  if self.data is not None:
@@ -1,6 +1,6 @@
1
1
  import base64
2
2
 
3
- from pydantic import validator, Field, BaseModel
3
+ from pydantic import validator, Field
4
4
  from typing import Optional, Dict, Union
5
5
  from .baseRequest import BaseRequest
6
6
  from .enums import TextModules
@@ -1,10 +1,10 @@
1
1
  from typing import Dict, Union
2
2
  from pydantic import Field, validator
3
3
 
4
- from .proxy_info import ProxyInfo
5
- from .ImpervaCustomTaskRequestBase import ImpervaCustomTaskRequestBase
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
6
5
 
7
- class ImpervaCustomTaskRequest(ImpervaCustomTaskRequestBase, ProxyInfo):
6
+ class ImpervaCustomTaskRequest(CustomTaskRequestBase):
7
+ captchaClass: str = Field(default='Imperva')
8
8
  metadata : Dict[str, str]
9
9
 
10
10
  @validator('metadata')
@@ -29,11 +29,12 @@ class ImpervaCustomTaskRequest(ImpervaCustomTaskRequestBase, ProxyInfo):
29
29
  task['class'] = self.captchaClass
30
30
  task['websiteURL'] = self.websiteUrl
31
31
  task['metadata'] = self.metadata
32
- task['proxyType'] = self.proxyType
33
- task['proxyAddress'] = self.proxyAddress
34
- task['proxyPort'] = self.proxyPort
35
- task['proxyLogin'] = self.proxyLogin
36
- task['proxyPassword'] = self.proxyPassword
32
+ if self.proxy:
33
+ task['proxyType'] = self.proxy.proxyType
34
+ task['proxyAddress'] = self.proxy.proxyAddress
35
+ task['proxyPort'] = self.proxy.proxyPort
36
+ task['proxyLogin'] = self.proxy.proxyLogin
37
+ task['proxyPassword'] = self.proxy.proxyPassword
37
38
  if self.userAgent is not None:
38
39
  task['userAgent'] = self.userAgent
39
40
  return task
@@ -1,4 +1,4 @@
1
- from typing import Dict, Union, Optional
1
+ from typing import Dict, Union
2
2
  from pydantic import Field, validator
3
3
 
4
4
  from .ComplexImageTaskBase import ComplexImageTaskRequestBase
@@ -71,7 +71,7 @@ class RecaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
71
71
 
72
72
  if self.websiteUrl is not None:
73
73
  task["websiteUrl"] = self.websiteUrl
74
-
74
+
75
75
  return task
76
76
 
77
77
 
@@ -1,22 +1,26 @@
1
- from typing import Dict, Union
1
+ from typing import Dict, Union, Optional
2
2
  from pydantic import Field
3
3
 
4
- from .RecaptchaV2EnterpriseRequestBase import RecaptchaV2EnterpriseRequestBase
5
- from .proxy_info import ProxyInfo
4
+ from .baseRequestWithProxy import BaseRequestWithProxy
6
5
 
7
- class RecaptchaV2EnterpriseRequest(RecaptchaV2EnterpriseRequestBase, ProxyInfo):
6
+ class RecaptchaV2EnterpriseRequest(BaseRequestWithProxy):
8
7
  type: str = Field(default='RecaptchaV2EnterpriseTask')
9
-
8
+ websiteUrl: str
9
+ websiteKey: str
10
+ enterprisePayload: Optional[str] = Field(default=None)
11
+ apiDomain: Optional[str] = Field(default=None)
12
+
10
13
  def getTaskDict(self) -> Dict[str, Union[str, int]]:
11
14
  task = {}
12
15
  task['type'] = self.type
13
16
  task['websiteURL'] = self.websiteUrl
14
17
  task['websiteKey'] = self.websiteKey
15
- task['proxyType'] = self.proxyType
16
- task['proxyAddress'] = self.proxyAddress
17
- task['proxyPort'] = self.proxyPort
18
- task['proxyLogin'] = self.proxyLogin
19
- task['proxyPassword'] = self.proxyPassword
18
+ if self.proxy:
19
+ task['proxyType'] = self.proxy.proxyType
20
+ task['proxyAddress'] = self.proxy.proxyAddress
21
+ task['proxyPort'] = self.proxy.proxyPort
22
+ task['proxyLogin'] = self.proxy.proxyLogin
23
+ task['proxyPassword'] = self.proxy.proxyPassword
20
24
  if self.enterprisePayload is not None:
21
25
  task['enterprisePayload'] = {'s': self.enterprisePayload}
22
26
  if self.apiDomain is not None:
@@ -1,23 +1,28 @@
1
- from typing import Dict, Union
1
+ from typing import Dict, Union, Optional
2
2
  from pydantic import Field
3
- from .RecaptchaV2RequestBase import RecaptchaV2RequestBase
4
- from .proxy_info import ProxyInfo
3
+ from .baseRequestWithProxy import BaseRequestWithProxy
5
4
 
6
5
 
7
- class RecaptchaV2Request(RecaptchaV2RequestBase, ProxyInfo):
6
+ class RecaptchaV2Request(BaseRequestWithProxy):
8
7
 
9
8
  type: str = Field(default="NoCaptchaTask")
9
+ websiteUrl: str
10
+ websiteKey: str
11
+ dataSValue: Optional[str] = Field(default=None)
12
+ userAgent: Optional[str] = Field(default=None)
13
+ cookies: Optional[str] = Field(default=None)
10
14
 
11
15
  def getTaskDict(self) -> Dict[str, Union[str, int]]:
12
16
  task = {}
13
17
  task['type'] = self.type
14
18
  task['websiteURL'] = self.websiteUrl
15
19
  task['websiteKey'] = self.websiteKey
16
- task['proxyType'] = self.proxyType
17
- task['proxyAddress'] = self.proxyAddress
18
- task['proxyPort'] = self.proxyPort
19
- task['proxyLogin'] = self.proxyLogin
20
- task['proxyPassword'] = self.proxyPassword
20
+ if self.proxy:
21
+ task['proxyType'] = self.proxy.proxyType
22
+ task['proxyAddress'] = self.proxy.proxyAddress
23
+ task['proxyPort'] = self.proxy.proxyPort
24
+ task['proxyLogin'] = self.proxy.proxyLogin
25
+ task['proxyPassword'] = self.proxy.proxyPassword
21
26
 
22
27
  if self.dataSValue is not None:
23
28
  task['recaptchaDataSValue'] = self.dataSValue
@@ -0,0 +1,45 @@
1
+ from typing import Dict, Union
2
+ from pydantic import validator
3
+ from .ComplexImageTaskBase import ComplexImageTaskRequestBase
4
+ from ..exceptions import ZeroImagesErrors, TaskNotDefinedError
5
+
6
+
7
+ class RecognitionComplexImageTaskRequest(ComplexImageTaskRequestBase):
8
+ captchaClass: str = 'recognition'
9
+ metadata: Dict[str, str]
10
+
11
+ @validator('metadata')
12
+ def validate_metadata(cls, value):
13
+ if value.get('Task') is None:
14
+ raise TaskNotDefinedError(f'Expect that Task will be defined.')
15
+ else:
16
+ if not isinstance(value.get('Task'), str):
17
+ raise TypeError(f'Expect that Task will be str.')
18
+ if not set(value.keys()).issubset(set(["Task", "TaskArgument"])):
19
+ raise TypeError(f'Allowed keys for metadata are "Task" and "TaskArgument"')
20
+ return value
21
+
22
+ @validator('imagesBase64')
23
+ def validate_images_array(cls, value):
24
+ if value is not None:
25
+ if not isinstance(value, (list, tuple)):
26
+ raise TypeError(f'Expect that type imagesBase64 array will be <list> or <tuple>, got {type(value)}')
27
+ elif not len(value):
28
+ raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
29
+ # Check for each element type
30
+ contain_types = [isinstance(x, str) for x in value]
31
+ if not all(contain_types):
32
+ raise TypeError(f'Next images from imagesBase64 array are not string: {contain_types}')
33
+ else:
34
+ raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
35
+ return value
36
+
37
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
38
+ task = {}
39
+ task['type'] = self.taskType
40
+ task['class'] = self.captchaClass
41
+ task['imagesBase64'] = self.imagesBase64
42
+ task['metadata'] = self.metadata
43
+ if self.userAgent is not None:
44
+ task['userAgent'] = self.userAgent
45
+ return task
@@ -1,22 +1,24 @@
1
1
  from typing import Dict, Union
2
- from pydantic import Field, validator
2
+ from pydantic import Field
3
3
 
4
- from .proxy_info import ProxyInfo
5
- from .TenDiCustomTaskRequestBase import TenDiCustomTaskRequestBase
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
5
+
6
+ class TenDiCustomTaskRequest(CustomTaskRequestBase):
7
+ captchaClass: str = Field(default='TenDI')
8
+ websiteKey: str = Field()
6
9
 
7
- class TenDiCustomTaskRequest(TenDiCustomTaskRequestBase, ProxyInfo):
8
-
9
10
  def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10
11
  task = {}
11
12
  task['type'] = self.type
12
13
  task['class'] = self.captchaClass
13
14
  task['websiteURL'] = self.websiteUrl
14
15
  task['websiteKey'] = self.websiteKey
15
- task['proxyType'] = self.proxyType
16
- task['proxyAddress'] = self.proxyAddress
17
- task['proxyPort'] = self.proxyPort
18
- task['proxyLogin'] = self.proxyLogin
19
- task['proxyPassword'] = self.proxyPassword
16
+ if self.proxy:
17
+ task['proxyType'] = self.proxy.proxyType
18
+ task['proxyAddress'] = self.proxy.proxyAddress
19
+ task['proxyPort'] = self.proxy.proxyPort
20
+ task['proxyLogin'] = self.proxy.proxyLogin
21
+ task['proxyPassword'] = self.proxy.proxyPassword
20
22
  if self.userAgent is not None:
21
23
  task['userAgent'] = self.userAgent
22
24
  return task