capmonstercloudclient 1.3.4__tar.gz → 1.5.0__tar.gz

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 (67) hide show
  1. capmonstercloudclient-1.5.0/PKG-INFO +87 -0
  2. capmonstercloudclient-1.5.0/README.md +49 -0
  3. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/CapMonsterCloudClient.py +8 -1
  4. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/GetResultTimeouts.py +13 -1
  5. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/exceptions.py +5 -0
  6. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/AmazonWafProxylessRequest.py +22 -0
  7. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/AmazonWafRequest.py +28 -0
  8. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/AmazonWafRequestBase.py +13 -0
  9. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/BasiliskCustomTaskProxylessRequest.py +16 -0
  10. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/BasiliskCustomTaskRequest.py +22 -0
  11. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/BasiliskCustomTaskRequestBase.py +11 -0
  12. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/CustomTaskRequestBase.py +10 -0
  13. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/DataDomeCustomTaskProxylessRequest.py +36 -0
  14. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/DataDomeCustomTaskRequest.py +42 -0
  15. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/DataDomeCustomTaskRequestBase.py +8 -0
  16. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/HcaptchaComplexImageTask.py +45 -4
  17. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/HcaptchaProxylessRequest.py +2 -0
  18. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/HcaptchaRequest.py +2 -0
  19. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/HcaptchaRequestBase.py +2 -1
  20. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/TenDiCustomTaskProxylessRequest.py +16 -0
  21. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/TenDiCustomTaskRequest.py +22 -0
  22. capmonstercloudclient-1.5.0/capmonstercloud_client/requests/TenDiCustomTaskRequestBase.py +11 -0
  23. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/__init__.py +11 -1
  24. capmonstercloudclient-1.5.0/capmonstercloud_client/version.txt +1 -0
  25. capmonstercloudclient-1.5.0/capmonstercloudclient.egg-info/PKG-INFO +87 -0
  26. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloudclient.egg-info/SOURCES.txt +13 -0
  27. capmonstercloudclient-1.3.4/PKG-INFO +0 -86
  28. capmonstercloudclient-1.3.4/README.md +0 -48
  29. capmonstercloudclient-1.3.4/capmonstercloud_client/version.txt +0 -1
  30. capmonstercloudclient-1.3.4/capmonstercloudclient.egg-info/PKG-INFO +0 -86
  31. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/LICENSE +0 -0
  32. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/MANIFEST.in +0 -0
  33. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/__init__.py +0 -0
  34. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/captchaResult.py +0 -0
  35. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/clientOptions.py +0 -0
  36. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requestController.py +0 -0
  37. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/ComplexImageTaskBase.py +0 -0
  38. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/FuncaptchaComplexImageTask.py +0 -0
  39. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/FuncaptchaProxylessRequest.py +0 -0
  40. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/FuncaptchaRequest.py +0 -0
  41. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/FuncaptchaRequestBase.py +0 -0
  42. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/GeetestProxylessRequest.py +0 -0
  43. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/GeetestRequest.py +0 -0
  44. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/GeetestRequestBase.py +0 -0
  45. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/ImageToTextRequest.py +0 -0
  46. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaComplexImageTask.py +0 -0
  47. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2EnterpiseRequest.py +0 -0
  48. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2EnterpriseProxylessRequest.py +0 -0
  49. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2EnterpriseRequestBase.py +0 -0
  50. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2ProxylessRequest.py +0 -0
  51. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2Request.py +0 -0
  52. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV2RequestBase.py +0 -0
  53. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py +0 -0
  54. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/TurnstileProxylessRequest.py +0 -0
  55. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/TurnstileRequest.py +0 -0
  56. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/TurnstileRequestBase.py +0 -0
  57. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/baseRequest.py +0 -0
  58. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/enums.py +0 -0
  59. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/requests/proxy_info.py +0 -0
  60. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloud_client/utils.py +0 -0
  61. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloudclient.egg-info/dependency_links.txt +0 -0
  62. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloudclient.egg-info/requires.txt +0 -0
  63. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/capmonstercloudclient.egg-info/top_level.txt +0 -0
  64. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/pyproject.toml +0 -0
  65. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/requirements.txt +0 -0
  66. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/setup.cfg +0 -0
  67. {capmonstercloudclient-1.3.4 → capmonstercloudclient-1.5.0}/setup.py +0 -0
@@ -0,0 +1,87 @@
1
+ Metadata-Version: 2.1
2
+ Name: capmonstercloudclient
3
+ Version: 1.5.0
4
+ Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
+ Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
+ Author: Andrey Ilyin
7
+ Author-email: andrey.ilyin@zennolab.com
8
+ License: AGPL-3.0
9
+ Keywords: captcha
10
+ recaptcha
11
+ geetest
12
+ hcaptcha
13
+ funcaptcha
14
+ python3
15
+ python-library
16
+ capmonster
17
+ capmonstercloud
18
+ capmonstercloudclient
19
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
20
+ Classifier: Programming Language :: Python
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3 :: Only
23
+ Classifier: Programming Language :: Python :: 3.6
24
+ Classifier: Programming Language :: Python :: 3.7
25
+ Classifier: Programming Language :: Python :: 3.8
26
+ Classifier: Programming Language :: Python :: 3.9
27
+ Classifier: Programming Language :: Python :: 3.10
28
+ Classifier: Development Status :: 5 - Production/Stable
29
+ Classifier: Framework :: AsyncIO
30
+ Classifier: Operating System :: Unix
31
+ Classifier: Operating System :: Microsoft :: Windows
32
+ Classifier: Operating System :: MacOS
33
+ Requires-Python: >=3.6
34
+ Description-Content-Type: text/markdown
35
+ License-File: LICENSE
36
+ Requires-Dist: aiohttp>=3.7.4
37
+ Requires-Dist: pydantic==2.1.*
38
+
39
+ # Zennolab.CapMonsterCloud.Client
40
+
41
+ Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
42
+
43
+ ## Installation
44
+
45
+ python3 -m pip install capmonstercloudclient
46
+
47
+ ## Usage
48
+
49
+ ***
50
+ import asyncio
51
+
52
+ from capmonstercloudclient import CapMonsterClient, ClientOptions
53
+ from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
54
+
55
+ client_options = ClientOptions(api_key=<YOUR_API_KEY>)
56
+ cap_monster_client = CapMonsterClient(options=client_options)
57
+
58
+ async def solve_captcha():
59
+ return await cap_monster_client.solve_captcha(recaptcha2request)
60
+
61
+ recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
62
+ websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
63
+
64
+ responses = asyncio.run(solve_captcha())
65
+ print(responses)
66
+ ***
67
+
68
+ Supported captcha recognition requests:
69
+
70
+ - [GeeTestProxylessRequest](https://zenno.link/doc-geetest-en)
71
+ - [GeeTestRequest](https://zenno.link/doc-geetest-proxy-en)
72
+ - [HCaptchaProxylessRequest](https://zenno.link/doc-hcaptcha-en)
73
+ - [HCaptchaRequest](https://zenno.link/doc-hcaptcha-proxy-en)
74
+ - [ImageToTextRequest](https://zenno.link/doc-ImageToTextTask-en)
75
+ - [RecaptchaV2ProxylessRequest](https://zenno.link/doc-recaptcha2-en)
76
+ - [RecaptchaV2Request](https://zenno.link/doc-recaptcha2-proxy-en)
77
+ - [RecaptchaV3ProxylessRequest](https://zenno.link/doc-recaptcha3-en)
78
+ - [RecaptchaV2EnterpriseProxylessRequest](https://zenno.link/doc-recaptcha2e-en)
79
+ - [RecaptchaV2EnterpriseRequest](https://zenno.link/doc-recaptcha2e-proxy-en)
80
+ - [TurnstileProxylessRequest](https://zenno.link/doc-turnstile-en)
81
+ - [TurnstileRequest](https://zenno.link/doc-turnstile-proxy-en)
82
+ - [RecaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-rc-en)
83
+ - [HcaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-hc-en)
84
+ - [DataDomeCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/datadome)
85
+ - [TenDiCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/tendi)
86
+ - [BasiliskCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/Basilisk-task)
87
+ - [AmazonWafRequest](https://docs.capmonster.cloud/docs/captchas/amazon-task)
@@ -0,0 +1,49 @@
1
+ # Zennolab.CapMonsterCloud.Client
2
+
3
+ Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
4
+
5
+ ## Installation
6
+
7
+ python3 -m pip install capmonstercloudclient
8
+
9
+ ## Usage
10
+
11
+ ***
12
+ import asyncio
13
+
14
+ from capmonstercloudclient import CapMonsterClient, ClientOptions
15
+ from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
16
+
17
+ client_options = ClientOptions(api_key=<YOUR_API_KEY>)
18
+ cap_monster_client = CapMonsterClient(options=client_options)
19
+
20
+ async def solve_captcha():
21
+ return await cap_monster_client.solve_captcha(recaptcha2request)
22
+
23
+ recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
24
+ websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
25
+
26
+ responses = asyncio.run(solve_captcha())
27
+ print(responses)
28
+ ***
29
+
30
+ Supported captcha recognition requests:
31
+
32
+ - [GeeTestProxylessRequest](https://zenno.link/doc-geetest-en)
33
+ - [GeeTestRequest](https://zenno.link/doc-geetest-proxy-en)
34
+ - [HCaptchaProxylessRequest](https://zenno.link/doc-hcaptcha-en)
35
+ - [HCaptchaRequest](https://zenno.link/doc-hcaptcha-proxy-en)
36
+ - [ImageToTextRequest](https://zenno.link/doc-ImageToTextTask-en)
37
+ - [RecaptchaV2ProxylessRequest](https://zenno.link/doc-recaptcha2-en)
38
+ - [RecaptchaV2Request](https://zenno.link/doc-recaptcha2-proxy-en)
39
+ - [RecaptchaV3ProxylessRequest](https://zenno.link/doc-recaptcha3-en)
40
+ - [RecaptchaV2EnterpriseProxylessRequest](https://zenno.link/doc-recaptcha2e-en)
41
+ - [RecaptchaV2EnterpriseRequest](https://zenno.link/doc-recaptcha2e-proxy-en)
42
+ - [TurnstileProxylessRequest](https://zenno.link/doc-turnstile-en)
43
+ - [TurnstileRequest](https://zenno.link/doc-turnstile-proxy-en)
44
+ - [RecaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-rc-en)
45
+ - [HcaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-hc-en)
46
+ - [DataDomeCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/datadome)
47
+ - [TenDiCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/tendi)
48
+ - [BasiliskCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/Basilisk-task)
49
+ - [AmazonWafRequest](https://docs.capmonster.cloud/docs/captchas/amazon-task)
@@ -24,6 +24,11 @@ _instance_config = (
24
24
  ((TurnstileProxylessRequest, 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
+
27
32
  )
28
33
 
29
34
 
@@ -70,7 +75,9 @@ class CapMonsterClient:
70
75
  TurnstileRequest,
71
76
  HcaptchaComplexImageTaskRequest,
72
77
  RecaptchaComplexImageTaskRequest,
73
- FunCaptchaComplexImageTaskRequest],
78
+ FunCaptchaComplexImageTaskRequest,
79
+ DataDomeCustomTaskProxylessRequest,
80
+ DataDomeCustomTaskRequest],
74
81
  ) -> Dict[str, str]:
75
82
  '''
76
83
  Non-blocking method for captcha solving.
@@ -30,4 +30,16 @@ def getGeetestTimeouts() -> GetResultTimeouts:
30
30
  return GetResultTimeouts(1, 0, 1, 80)
31
31
 
32
32
  def getTurnstileTimeouts() -> GetResultTimeouts:
33
- return GetResultTimeouts(1, 0, 1, 80)
33
+ return GetResultTimeouts(1, 0, 1, 80)
34
+
35
+ def getDatadomeTimeouts() -> GetResultTimeouts:
36
+ return GetResultTimeouts(1, 0, 1, 80)
37
+
38
+ def getTenDiTimeouts() -> GetResultTimeouts:
39
+ return GetResultTimeouts(1, 10, 3, 180)
40
+
41
+ def getBasiliskTimeouts() -> GetResultTimeouts:
42
+ return GetResultTimeouts(1, 10, 3, 100)
43
+
44
+ def getAmazonWafTimeouts() -> GetResultTimeouts:
45
+ return GetResultTimeouts(1, 10, 3, 180)
@@ -21,6 +21,11 @@ class ZeroImagesErrors(BaseError):
21
21
  class TaskNotDefinedError(BaseError):
22
22
  pass
23
23
 
24
+ class ExtraParamsError(BaseError):
25
+ pass
26
+
27
+
28
+
24
29
  class UserAgentNotDefinedError(BaseError):
25
30
 
26
31
  default_message = 'If "imageUrls" is not defined, then "userAgent" must explicitly specify signature ' \
@@ -0,0 +1,22 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .proxy_info import ProxyInfo
5
+ from .AmazonWafRequestBase import AmazonWafRequestBase
6
+
7
+ class AmazonWafProxylessRequest(AmazonWafRequestBase):
8
+ type: str = 'AmazonTaskProxyless'
9
+
10
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
+ task = {}
12
+ task['type'] = self.type
13
+ task['websiteURL'] = self.websiteUrl
14
+ task['challengeScript'] = self.challengeScript
15
+ task['captchaScript'] = self.captchaScript
16
+ task['websiteKey'] = self.websiteKey
17
+ task['context'] = self.context
18
+ task['iv'] = self.iv
19
+
20
+ if self.cookieSolution is not None:
21
+ task['cookieSolution'] = self.cookieSolution
22
+ return task
@@ -0,0 +1,28 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .proxy_info import ProxyInfo
5
+ from .AmazonWafRequestBase import AmazonWafRequestBase
6
+
7
+ class AmazonWafRequest(AmazonWafRequestBase, ProxyInfo):
8
+ type: str = 'AmazonTask'
9
+
10
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
11
+ task = {}
12
+ task['type'] = self.type
13
+ task['websiteURL'] = self.websiteUrl
14
+ task['challengeScript'] = self.challengeScript
15
+ task['captchaScript'] = self.captchaScript
16
+ task['websiteKey'] = self.websiteKey
17
+ task['context'] = self.context
18
+ 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.cookieSolution is not None:
27
+ task['cookieSolution'] = self.cookieSolution
28
+ return task
@@ -0,0 +1,13 @@
1
+ from pydantic import Field
2
+ from typing import Optional
3
+
4
+ from .baseRequest import BaseRequest
5
+
6
+ class AmazonWafRequestBase(BaseRequest):
7
+ websiteUrl: str
8
+ challengeScript: str
9
+ captchaScript: str
10
+ websiteKey: str
11
+ context: str
12
+ iv: str
13
+ cookieSolution: Optional[bool] = Field(default=None)
@@ -0,0 +1,16 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .BasiliskCustomTaskRequestBase import BasiliskCustomTaskRequestBase
5
+
6
+ class BasiliskCustomTaskProxylessRequest(BasiliskCustomTaskRequestBase):
7
+
8
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
9
+ task = {}
10
+ task['type'] = self.type
11
+ task['class'] = self.captchaClass
12
+ task['websiteURL'] = self.websiteUrl
13
+ task['websiteKey'] = self.websiteKey
14
+ if self.userAgent is not None:
15
+ task['userAgent'] = self.userAgent
16
+ return task
@@ -0,0 +1,22 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .proxy_info import ProxyInfo
5
+ from .BasiliskCustomTaskRequestBase import BasiliskCustomTaskRequestBase
6
+
7
+ class BasiliskCustomTaskRequest(BasiliskCustomTaskRequestBase, ProxyInfo):
8
+
9
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10
+ task = {}
11
+ task['type'] = self.type
12
+ task['class'] = self.captchaClass
13
+ task['websiteURL'] = self.websiteUrl
14
+ 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
20
+ if self.userAgent is not None:
21
+ task['userAgent'] = self.userAgent
22
+ return task
@@ -0,0 +1,11 @@
1
+ from .baseRequest import BaseRequest, Field
2
+ from typing import Optional
3
+ from pydantic import validator, model_validator
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
5
+
6
+
7
+ class BasiliskCustomTaskRequestBase(CustomTaskRequestBase):
8
+
9
+ type: str = Field(default='CustomTask')
10
+ captchaClass: str = Field(default='Basilisk')
11
+ websiteKey: str = Field()
@@ -0,0 +1,10 @@
1
+ from typing import Optional, List, Dict
2
+
3
+ from .baseRequest import BaseRequest
4
+
5
+ class CustomTaskRequestBase(BaseRequest):
6
+ captchaClass: str # Class(subtype) of ComplexImageTask
7
+ type: str = "CustomTask" # Recognition task type
8
+ websiteUrl: str # Address of a webpage with captcha
9
+ userAgent: Optional[str] = None # It is required that you use a signature of a modern browser
10
+ domains: Optional[List[str]] = None # Collection with base64 encoded images. Must be populated if <see cref="ImageUrls"/> not.
@@ -0,0 +1,36 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .DataDomeCustomTaskRequestBase import DataDomeCustomTaskRequestBase
5
+
6
+ class DataDomeCustomTaskProxylessRequest(DataDomeCustomTaskRequestBase):
7
+ metadata : Dict[str, str]
8
+
9
+ @validator('metadata')
10
+ def validate_metadata(cls, value):
11
+ if value.get('datadomeCookie') is None:
12
+ raise ValueError(f'Expect that datadomeCookie will be defined.')
13
+ if value.get('captchaUrl') and value.get('htmlPageBase64'):
14
+ raise ValueError(f'Expected only one of [captchaUrl, htmlPageBase64]')
15
+ elif value.get('captchaUrl'):
16
+ if not isinstance(value.get('captchaUrl'), str):
17
+ raise ValueError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("captchaUrl"))}')
18
+ return {i: value[i] for i in value if i != 'htmlPageBase64'}
19
+ elif value.get('htmlPageBase64'):
20
+ if not isinstance(value.get('htmlPageBase64'), str):
21
+ raise ValueError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("htmlPageBase64"))}')
22
+ return {i: value[i] for i in value if i != 'captchaUrl'}
23
+ else:
24
+ raise ValueError(f'Expected one of [captchaUrl, htmlPageBase64]')
25
+
26
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
27
+ task = {}
28
+ task['type'] = self.type
29
+ task['class'] = self.captchaClass
30
+ task['websiteURL'] = self.websiteUrl
31
+ task['metadata'] = self.metadata
32
+ if self.userAgent is not None:
33
+ task['userAgent'] = self.userAgent
34
+ if self.domains is not None:
35
+ task['domains'] = self.domains
36
+ return task
@@ -0,0 +1,42 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+ from .DataDomeCustomTaskRequestBase import DataDomeCustomTaskRequestBase
4
+ from .proxy_info import ProxyInfo
5
+
6
+ class DataDomeCustomTaskRequest(DataDomeCustomTaskRequestBase, ProxyInfo):
7
+ metadata : Dict[str, str]
8
+
9
+ @validator('metadata')
10
+ def validate_metadata(cls, value):
11
+ if value.get('datadomeCookie') is None:
12
+ raise TypeError(f'Expect that datadomeCookie will be defined.')
13
+ if value.get('captchaUrl') and value.get('htmlPageBase64'):
14
+ raise TypeError(f'Expected only one of [captchaUrl, htmlPageBase64]')
15
+ elif value.get('captchaUrl'):
16
+ if not isinstance(value.get('captchaUrl'), str):
17
+ raise TypeError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("captchaUrl"))}')
18
+ return {i: value[i] for i in value if i != 'htmlPageBase64'}
19
+ elif value.get('htmlPageBase64'):
20
+ if not isinstance(value.get('htmlPageBase64'), str):
21
+ raise TypeError(f'Expect that type imagesUrls array will be <str>, got {type(value.get("htmlPageBase64"))}')
22
+ return {i: value[i] for i in value if i != 'captchaUrl'}
23
+ else:
24
+ raise TypeError(f'Expected one of [captchaUrl, htmlPageBase64]')
25
+
26
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
27
+ task = {}
28
+ task['type'] = self.type
29
+ task['class'] = self.captchaClass
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
36
+ task['domains'] = self.domains
37
+ task['metadata'] = self.metadata
38
+ if self.userAgent is not None:
39
+ task['userAgent'] = self.userAgent
40
+ if self.domains is not None:
41
+ task['domains'] = self.domains
42
+ return task
@@ -0,0 +1,8 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field
3
+
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
5
+
6
+ class DataDomeCustomTaskRequestBase(CustomTaskRequestBase):
7
+ type: str = Field(default='CustomTask')
8
+ captchaClass: str = Field(default='DataDome')
@@ -1,13 +1,15 @@
1
- from typing import Dict, Union
1
+ from typing import Dict, Union, List, Optional
2
2
  from pydantic import Field, validator
3
3
 
4
4
  from .ComplexImageTaskBase import ComplexImageTaskRequestBase
5
- from ..exceptions import NumbersImagesErrors, ZeroImagesErrors, TaskNotDefinedError
5
+ from ..exceptions import NumbersImagesErrors, ZeroImagesErrors, TaskNotDefinedError, ExtraParamsError
6
6
 
7
7
  class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
8
8
 
9
9
  captchaClass: str = Field(default='hcaptcha')
10
10
  metadata : Dict[str, str]
11
+ exampleImageUrls: Optional[List[str]]
12
+ exampleImagesBase64: Optional[List[str]]
11
13
 
12
14
  @validator('metadata')
13
15
  def validate_metadata(cls, value):
@@ -16,13 +18,43 @@ class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
16
18
  else:
17
19
  return value
18
20
 
21
+ @validator('exampleImageUrls')
22
+ def validate_urls_array(cls, value):
23
+ if value is not None:
24
+ if not isinstance(value, (list, tuple)):
25
+ raise TypeError(f'Expect that type exampleImageUrls array will be <list> or <tuple>, got {type(value)}')
26
+ elif len(value) > 1:
27
+ raise NumbersImagesErrors(f'Maximum number of images in list 1, got {len(value)}')
28
+ elif not len(value):
29
+ raise ZeroImagesErrors(f'At least one image url expected, got {len(value)}')
30
+ # Check for each element type
31
+ contain_types = [isinstance(x, str) for x in value]
32
+ if not all(contain_types):
33
+ raise TypeError(f'Next images from imagesUrls array are not string: {contain_types}')
34
+ return value
35
+
36
+ @validator('exampleImagesBase64')
37
+ def validate_urls_array(cls, value):
38
+ if value is not None:
39
+ if not isinstance(value, (list, tuple)):
40
+ raise TypeError(f'Expect that type exampleImagesBase64 array will be <list> or <tuple>, got {type(value)}')
41
+ elif len(value) > 1:
42
+ raise NumbersImagesErrors(f'Maximum number of images in list 1, got {len(value)}')
43
+ elif not len(value):
44
+ raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
45
+ # Check for each element type
46
+ contain_types = [isinstance(x, str) for x in value]
47
+ if not all(contain_types):
48
+ raise TypeError(f'Next images from imagesBase64 array are not string: {contain_types}')
49
+ return value
50
+
19
51
  @validator('imagesUrls')
20
52
  def validate_urls_array(cls, value):
21
53
  if value is not None:
22
54
  if not isinstance(value, (list, tuple)):
23
55
  raise TypeError(f'Expect that type imagesUrls array will be <list> or <tuple>, got {type(value)}')
24
56
  elif len(value) > 18:
25
- raise NumbersImagesErrors(f'Maximum numbers images in list 18, got {len(value)}')
57
+ raise NumbersImagesErrors(f'Maximum number of images in list 18, got {len(value)}')
26
58
  elif not len(value):
27
59
  raise ZeroImagesErrors(f'At least one image url expected, got {len(value)}')
28
60
  # Check for each element type
@@ -37,7 +69,7 @@ class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
37
69
  if not isinstance(value, (list, tuple)):
38
70
  raise TypeError(f'Expect that type imagesBase64 array will be <list> or <tuple>, got {type(value)}')
39
71
  elif len(value) > 18:
40
- raise NumbersImagesErrors(f'Maximum numbers images in list 18, got {len(value)}')
72
+ raise NumbersImagesErrors(f'Maximum number of images in list 18, got {len(value)}')
41
73
  elif not len(value):
42
74
  raise ZeroImagesErrors(f'At least one image base64 expected, got {len(value)}')
43
75
  # Check for each element type
@@ -64,6 +96,15 @@ class HcaptchaComplexImageTaskRequest(ComplexImageTaskRequestBase):
64
96
 
65
97
  task['metadata'] = self.metadata
66
98
 
99
+ if self.exampleImageUrls and self.exampleImagesBase64:
100
+ raise ExtraParamsError('Expect only one of [exampleImageUrls, exampleImagesBase64]')
101
+
102
+ if self.exampleImageUrls is not None:
103
+ task['exampleImageUrls'] = self.exampleImageUrls
104
+
105
+ if self.exampleImagesBase64 is not None:
106
+ task['exampleImagesBase64'] = self.exampleImagesBase64
107
+
67
108
  if self.userAgent is not None:
68
109
  task['userAgent'] = self.userAgent
69
110
 
@@ -20,4 +20,6 @@ class HcaptchaProxylessRequest(HcaptchaRequestBase):
20
20
  task['userAgent'] = self.user_agent
21
21
  if self.cookies is not None:
22
22
  task['cookies'] = self.cookies
23
+ if self.fallbackToActualUA is not None:
24
+ task['fallbackToActualUA'] = self.fallbackToActualUA
23
25
  return task
@@ -26,5 +26,7 @@ class HcaptchaRequest(HcaptchaRequestBase, ProxyInfo):
26
26
  task['userAgent'] = self.user_agent
27
27
  if self.cookies is not None:
28
28
  task['cookies'] = self.cookies
29
+ if self.fallbackToActualUA is not None:
30
+ task['fallbackToActualUA'] = self.fallbackToActualUA
29
31
 
30
32
  return task
@@ -9,4 +9,5 @@ class HcaptchaRequestBase(BaseRequest):
9
9
  is_invisible: Optional[bool] = Field(default=None)
10
10
  data: Optional[str] = Field(default=None)
11
11
  user_agent: Optional[str] = Field(default=None)
12
- cookies: Optional[str] = Field(default=None)
12
+ cookies: Optional[str] = Field(default=None)
13
+ fallbackToActualUA: Optional[bool] = Field(default=None)
@@ -0,0 +1,16 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .TenDiCustomTaskRequestBase import TenDiCustomTaskRequestBase
5
+
6
+ class TenDiCustomTaskProxylessRequest(TenDiCustomTaskRequestBase):
7
+
8
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
9
+ task = {}
10
+ task['type'] = self.type
11
+ task['class'] = self.captchaClass
12
+ task['websiteURL'] = self.websiteUrl
13
+ task['websiteKey'] = self.websiteKey
14
+ if self.userAgent is not None:
15
+ task['userAgent'] = self.userAgent
16
+ return task
@@ -0,0 +1,22 @@
1
+ from typing import Dict, Union
2
+ from pydantic import Field, validator
3
+
4
+ from .proxy_info import ProxyInfo
5
+ from .TenDiCustomTaskRequestBase import TenDiCustomTaskRequestBase
6
+
7
+ class TenDiCustomTaskRequest(TenDiCustomTaskRequestBase, ProxyInfo):
8
+
9
+ def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10
+ task = {}
11
+ task['type'] = self.type
12
+ task['class'] = self.captchaClass
13
+ task['websiteURL'] = self.websiteUrl
14
+ 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
20
+ if self.userAgent is not None:
21
+ task['userAgent'] = self.userAgent
22
+ return task
@@ -0,0 +1,11 @@
1
+ from .baseRequest import BaseRequest, Field
2
+ from typing import Optional
3
+ from pydantic import validator, model_validator
4
+ from .CustomTaskRequestBase import CustomTaskRequestBase
5
+
6
+
7
+ class TenDiCustomTaskRequestBase(CustomTaskRequestBase):
8
+
9
+ type: str = Field(default='CustomTask')
10
+ captchaClass: str = Field(default='TenDI')
11
+ websiteKey: str = Field()
@@ -16,9 +16,19 @@ from .TurnstileRequest import TurnstileRequest
16
16
  from .HcaptchaComplexImageTask import HcaptchaComplexImageTaskRequest
17
17
  from .RecaptchaComplexImageTask import RecaptchaComplexImageTaskRequest
18
18
  from .baseRequest import BaseRequest
19
+ from .DataDomeCustomTaskRequest import DataDomeCustomTaskRequest
20
+ from .DataDomeCustomTaskProxylessRequest import DataDomeCustomTaskProxylessRequest
21
+ from .TenDiCustomTaskRequest import TenDiCustomTaskRequest
22
+ from .TenDiCustomTaskProxylessRequest import TenDiCustomTaskProxylessRequest
23
+ from .BasiliskCustomTaskRequest import BasiliskCustomTaskRequest
24
+ from .BasiliskCustomTaskProxylessRequest import BasiliskCustomTaskProxylessRequest
25
+ from .AmazonWafRequest import AmazonWafRequest
26
+ from .AmazonWafProxylessRequest import AmazonWafProxylessRequest
19
27
 
20
28
  REQUESTS = ['RecaptchaV2EnterpiseRequest', 'RecaptchaV2EnterpriseProxylessRequest',
21
29
  'RecaptchaV2ProxylessRequest', 'RecaptchaV2Request', 'RecaptchaV3ProxylessRequest',
22
30
  'ImageToTextRequest', 'FuncaptchaProxylessRequest', 'FuncaptchaRequest',
23
31
  'GeetestRequest', 'GeetestProxylessRequest', 'HcaptchaProxylessRequest',
24
- 'HcaptchaRequest']
32
+ 'HcaptchaRequest', 'DataDomeCustomTaskRequest', 'DataDomeCustomTaskProxylessRequest',
33
+ 'TenDiCustomTaskRequest', 'TenDiCustomTaskProxylessRequest', 'BasiliskCustomTaskRequest',
34
+ 'BasiliskCustomTaskProxylessRequest', 'AmazonWafRequest', 'AmazonWafProxylessRequest']
@@ -0,0 +1,87 @@
1
+ Metadata-Version: 2.1
2
+ Name: capmonstercloudclient
3
+ Version: 1.5.0
4
+ Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
+ Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
+ Author: Andrey Ilyin
7
+ Author-email: andrey.ilyin@zennolab.com
8
+ License: AGPL-3.0
9
+ Keywords: captcha
10
+ recaptcha
11
+ geetest
12
+ hcaptcha
13
+ funcaptcha
14
+ python3
15
+ python-library
16
+ capmonster
17
+ capmonstercloud
18
+ capmonstercloudclient
19
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
20
+ Classifier: Programming Language :: Python
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3 :: Only
23
+ Classifier: Programming Language :: Python :: 3.6
24
+ Classifier: Programming Language :: Python :: 3.7
25
+ Classifier: Programming Language :: Python :: 3.8
26
+ Classifier: Programming Language :: Python :: 3.9
27
+ Classifier: Programming Language :: Python :: 3.10
28
+ Classifier: Development Status :: 5 - Production/Stable
29
+ Classifier: Framework :: AsyncIO
30
+ Classifier: Operating System :: Unix
31
+ Classifier: Operating System :: Microsoft :: Windows
32
+ Classifier: Operating System :: MacOS
33
+ Requires-Python: >=3.6
34
+ Description-Content-Type: text/markdown
35
+ License-File: LICENSE
36
+ Requires-Dist: aiohttp>=3.7.4
37
+ Requires-Dist: pydantic==2.1.*
38
+
39
+ # Zennolab.CapMonsterCloud.Client
40
+
41
+ Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
42
+
43
+ ## Installation
44
+
45
+ python3 -m pip install capmonstercloudclient
46
+
47
+ ## Usage
48
+
49
+ ***
50
+ import asyncio
51
+
52
+ from capmonstercloudclient import CapMonsterClient, ClientOptions
53
+ from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
54
+
55
+ client_options = ClientOptions(api_key=<YOUR_API_KEY>)
56
+ cap_monster_client = CapMonsterClient(options=client_options)
57
+
58
+ async def solve_captcha():
59
+ return await cap_monster_client.solve_captcha(recaptcha2request)
60
+
61
+ recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
62
+ websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
63
+
64
+ responses = asyncio.run(solve_captcha())
65
+ print(responses)
66
+ ***
67
+
68
+ Supported captcha recognition requests:
69
+
70
+ - [GeeTestProxylessRequest](https://zenno.link/doc-geetest-en)
71
+ - [GeeTestRequest](https://zenno.link/doc-geetest-proxy-en)
72
+ - [HCaptchaProxylessRequest](https://zenno.link/doc-hcaptcha-en)
73
+ - [HCaptchaRequest](https://zenno.link/doc-hcaptcha-proxy-en)
74
+ - [ImageToTextRequest](https://zenno.link/doc-ImageToTextTask-en)
75
+ - [RecaptchaV2ProxylessRequest](https://zenno.link/doc-recaptcha2-en)
76
+ - [RecaptchaV2Request](https://zenno.link/doc-recaptcha2-proxy-en)
77
+ - [RecaptchaV3ProxylessRequest](https://zenno.link/doc-recaptcha3-en)
78
+ - [RecaptchaV2EnterpriseProxylessRequest](https://zenno.link/doc-recaptcha2e-en)
79
+ - [RecaptchaV2EnterpriseRequest](https://zenno.link/doc-recaptcha2e-proxy-en)
80
+ - [TurnstileProxylessRequest](https://zenno.link/doc-turnstile-en)
81
+ - [TurnstileRequest](https://zenno.link/doc-turnstile-proxy-en)
82
+ - [RecaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-rc-en)
83
+ - [HcaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-hc-en)
84
+ - [DataDomeCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/datadome)
85
+ - [TenDiCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/tendi)
86
+ - [BasiliskCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/Basilisk-task)
87
+ - [AmazonWafRequest](https://docs.capmonster.cloud/docs/captchas/amazon-task)
@@ -13,7 +13,17 @@ capmonstercloud_client/exceptions.py
13
13
  capmonstercloud_client/requestController.py
14
14
  capmonstercloud_client/utils.py
15
15
  capmonstercloud_client/version.txt
16
+ capmonstercloud_client/requests/AmazonWafProxylessRequest.py
17
+ capmonstercloud_client/requests/AmazonWafRequest.py
18
+ capmonstercloud_client/requests/AmazonWafRequestBase.py
19
+ capmonstercloud_client/requests/BasiliskCustomTaskProxylessRequest.py
20
+ capmonstercloud_client/requests/BasiliskCustomTaskRequest.py
21
+ capmonstercloud_client/requests/BasiliskCustomTaskRequestBase.py
16
22
  capmonstercloud_client/requests/ComplexImageTaskBase.py
23
+ capmonstercloud_client/requests/CustomTaskRequestBase.py
24
+ capmonstercloud_client/requests/DataDomeCustomTaskProxylessRequest.py
25
+ capmonstercloud_client/requests/DataDomeCustomTaskRequest.py
26
+ capmonstercloud_client/requests/DataDomeCustomTaskRequestBase.py
17
27
  capmonstercloud_client/requests/FuncaptchaComplexImageTask.py
18
28
  capmonstercloud_client/requests/FuncaptchaProxylessRequest.py
19
29
  capmonstercloud_client/requests/FuncaptchaRequest.py
@@ -34,6 +44,9 @@ capmonstercloud_client/requests/RecaptchaV2ProxylessRequest.py
34
44
  capmonstercloud_client/requests/RecaptchaV2Request.py
35
45
  capmonstercloud_client/requests/RecaptchaV2RequestBase.py
36
46
  capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py
47
+ capmonstercloud_client/requests/TenDiCustomTaskProxylessRequest.py
48
+ capmonstercloud_client/requests/TenDiCustomTaskRequest.py
49
+ capmonstercloud_client/requests/TenDiCustomTaskRequestBase.py
37
50
  capmonstercloud_client/requests/TurnstileProxylessRequest.py
38
51
  capmonstercloud_client/requests/TurnstileRequest.py
39
52
  capmonstercloud_client/requests/TurnstileRequestBase.py
@@ -1,86 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: capmonstercloudclient
3
- Version: 1.3.4
4
- Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
- Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
- Author: Andrey Ilyin
7
- Author-email: andrey.ilyin@zennolab.com
8
- License: AGPL-3.0
9
- Keywords: captcha
10
- recaptcha
11
- geetest
12
- hcaptcha
13
- funcaptcha
14
- python3
15
- python-library
16
- capmonster
17
- capmonstercloud
18
- capmonstercloudclient
19
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
20
- Classifier: Programming Language :: Python
21
- Classifier: Programming Language :: Python :: 3
22
- Classifier: Programming Language :: Python :: 3 :: Only
23
- Classifier: Programming Language :: Python :: 3.6
24
- Classifier: Programming Language :: Python :: 3.7
25
- Classifier: Programming Language :: Python :: 3.8
26
- Classifier: Programming Language :: Python :: 3.9
27
- Classifier: Programming Language :: Python :: 3.10
28
- Classifier: Development Status :: 5 - Production/Stable
29
- Classifier: Framework :: AsyncIO
30
- Classifier: Operating System :: Unix
31
- Classifier: Operating System :: Microsoft :: Windows
32
- Classifier: Operating System :: MacOS
33
- Requires-Python: >=3.6
34
- Description-Content-Type: text/markdown
35
- License-File: LICENSE
36
- Requires-Dist: aiohttp>=3.7.4
37
- Requires-Dist: pydantic==2.1.*
38
-
39
- # Zennolab.CapMonsterCloud.Client
40
-
41
- Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
42
-
43
- ## Installation
44
-
45
- python3 -m pip install capmonstercloudclient
46
-
47
- ## Usage
48
-
49
- ***
50
- import asyncio
51
-
52
- from capmonstercloudclient import CapMonsterClient, ClientOptions
53
- from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
54
-
55
- client_options = ClientOptions(api_key=<YOUR_API_KEY>)
56
- cap_monster_client = CapMonsterClient(options=client_options)
57
-
58
- async def solve_captcha():
59
- return await cap_monster_client.solve_captcha(recaptcha2request)
60
-
61
- recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
62
- websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
63
-
64
- responses = asyncio.run(solve_captcha())
65
- print(responses)
66
- ***
67
-
68
- Supported captcha recognition requests:
69
-
70
- - [FunCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/643629079/FunCaptchaTaskProxyless+solving+FunCaptcha)
71
- - [FunCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/735805497/FunCaptchaTask+solving+FunCaptcha)
72
- - [GeeTestProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940291626/GeeTestTaskProxyless+GeeTest+captcha+recognition+without+proxy)
73
- - [GeeTestRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940357159/GeeTestTask+GeeTest+captcha+recognition)
74
- - [HCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240977/HCaptchaTaskProxyless+hCaptcha+puzzle+solving)
75
- - [HCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240988/HCaptchaTask+hCaptcha+puzzle+solving)
76
- - [ImageToTextRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/589863/ImageToTextTask)
77
- - [RecaptchaV2ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/373161985/NoCaptchaTaskProxyless+solving+Google+recaptcha)
78
- - [RecaptchaV2Request](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/680689685/NoCaptchaTask+solving+Google+recaptcha)
79
- - [RecaptchaV3ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/566853650/RecaptchaV3TaskProxyless+solving+Google+ReCaptcha+v.3)
80
- - [RecaptchaV2EnterpriseProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2178383893/RecaptchaV2EnterpriseTaskProxyless+solving+Google+reCAPTCHA+Enterprise+without+proxy)
81
- - [RecaptchaV2EnterpriseRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2179104769/RecaptchaV2EnterpriseTask+solving+Google+reCAPTCHA+Enterprise)
82
- - [TurnstileProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2257879047/TurnstileTaskProxyless+solving+Turnstile+without+proxy)
83
- - [TurnstileRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2313814017/TurnstileTask+Cloudflare+Challenge)
84
- - [RecaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279538739/ComplexImageTask+Recaptcha+Google+captcha+solution)
85
- - [HcaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279604241/ComplexImageTask+HCaptcha+hCaptcha+captcha+solution)
86
- - [FunCaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2291400705/ComplexImageTask+Funcaptcha+Funcaptcha+solving)
@@ -1,48 +0,0 @@
1
- # Zennolab.CapMonsterCloud.Client
2
-
3
- Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
4
-
5
- ## Installation
6
-
7
- python3 -m pip install capmonstercloudclient
8
-
9
- ## Usage
10
-
11
- ***
12
- import asyncio
13
-
14
- from capmonstercloudclient import CapMonsterClient, ClientOptions
15
- from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
16
-
17
- client_options = ClientOptions(api_key=<YOUR_API_KEY>)
18
- cap_monster_client = CapMonsterClient(options=client_options)
19
-
20
- async def solve_captcha():
21
- return await cap_monster_client.solve_captcha(recaptcha2request)
22
-
23
- recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
24
- websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
25
-
26
- responses = asyncio.run(solve_captcha())
27
- print(responses)
28
- ***
29
-
30
- Supported captcha recognition requests:
31
-
32
- - [FunCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/643629079/FunCaptchaTaskProxyless+solving+FunCaptcha)
33
- - [FunCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/735805497/FunCaptchaTask+solving+FunCaptcha)
34
- - [GeeTestProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940291626/GeeTestTaskProxyless+GeeTest+captcha+recognition+without+proxy)
35
- - [GeeTestRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940357159/GeeTestTask+GeeTest+captcha+recognition)
36
- - [HCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240977/HCaptchaTaskProxyless+hCaptcha+puzzle+solving)
37
- - [HCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240988/HCaptchaTask+hCaptcha+puzzle+solving)
38
- - [ImageToTextRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/589863/ImageToTextTask)
39
- - [RecaptchaV2ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/373161985/NoCaptchaTaskProxyless+solving+Google+recaptcha)
40
- - [RecaptchaV2Request](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/680689685/NoCaptchaTask+solving+Google+recaptcha)
41
- - [RecaptchaV3ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/566853650/RecaptchaV3TaskProxyless+solving+Google+ReCaptcha+v.3)
42
- - [RecaptchaV2EnterpriseProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2178383893/RecaptchaV2EnterpriseTaskProxyless+solving+Google+reCAPTCHA+Enterprise+without+proxy)
43
- - [RecaptchaV2EnterpriseRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2179104769/RecaptchaV2EnterpriseTask+solving+Google+reCAPTCHA+Enterprise)
44
- - [TurnstileProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2257879047/TurnstileTaskProxyless+solving+Turnstile+without+proxy)
45
- - [TurnstileRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2313814017/TurnstileTask+Cloudflare+Challenge)
46
- - [RecaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279538739/ComplexImageTask+Recaptcha+Google+captcha+solution)
47
- - [HcaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279604241/ComplexImageTask+HCaptcha+hCaptcha+captcha+solution)
48
- - [FunCaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2291400705/ComplexImageTask+Funcaptcha+Funcaptcha+solving)
@@ -1,86 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: capmonstercloudclient
3
- Version: 1.3.4
4
- Summary: Official CapMonsterCloud Client: https://capmonster.cloud/
5
- Home-page: https://github.com/ZennoLab/capmonstercloud-client-python
6
- Author: Andrey Ilyin
7
- Author-email: andrey.ilyin@zennolab.com
8
- License: AGPL-3.0
9
- Keywords: captcha
10
- recaptcha
11
- geetest
12
- hcaptcha
13
- funcaptcha
14
- python3
15
- python-library
16
- capmonster
17
- capmonstercloud
18
- capmonstercloudclient
19
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
20
- Classifier: Programming Language :: Python
21
- Classifier: Programming Language :: Python :: 3
22
- Classifier: Programming Language :: Python :: 3 :: Only
23
- Classifier: Programming Language :: Python :: 3.6
24
- Classifier: Programming Language :: Python :: 3.7
25
- Classifier: Programming Language :: Python :: 3.8
26
- Classifier: Programming Language :: Python :: 3.9
27
- Classifier: Programming Language :: Python :: 3.10
28
- Classifier: Development Status :: 5 - Production/Stable
29
- Classifier: Framework :: AsyncIO
30
- Classifier: Operating System :: Unix
31
- Classifier: Operating System :: Microsoft :: Windows
32
- Classifier: Operating System :: MacOS
33
- Requires-Python: >=3.6
34
- Description-Content-Type: text/markdown
35
- License-File: LICENSE
36
- Requires-Dist: aiohttp>=3.7.4
37
- Requires-Dist: pydantic==2.1.*
38
-
39
- # Zennolab.CapMonsterCloud.Client
40
-
41
- Official python client library for [capmonster.cloud](https://capmonster.cloud/) captcha recognition service
42
-
43
- ## Installation
44
-
45
- python3 -m pip install capmonstercloudclient
46
-
47
- ## Usage
48
-
49
- ***
50
- import asyncio
51
-
52
- from capmonstercloudclient import CapMonsterClient, ClientOptions
53
- from capmonstercloudclient.requests import RecaptchaV2ProxylessRequest
54
-
55
- client_options = ClientOptions(api_key=<YOUR_API_KEY>)
56
- cap_monster_client = CapMonsterClient(options=client_options)
57
-
58
- async def solve_captcha():
59
- return await cap_monster_client.solve_captcha(recaptcha2request)
60
-
61
- recaptcha2request = RecaptchaV2ProxylessRequest(websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
62
- websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd")
63
-
64
- responses = asyncio.run(solve_captcha())
65
- print(responses)
66
- ***
67
-
68
- Supported captcha recognition requests:
69
-
70
- - [FunCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/643629079/FunCaptchaTaskProxyless+solving+FunCaptcha)
71
- - [FunCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/735805497/FunCaptchaTask+solving+FunCaptcha)
72
- - [GeeTestProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940291626/GeeTestTaskProxyless+GeeTest+captcha+recognition+without+proxy)
73
- - [GeeTestRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1940357159/GeeTestTask+GeeTest+captcha+recognition)
74
- - [HCaptchaProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240977/HCaptchaTaskProxyless+hCaptcha+puzzle+solving)
75
- - [HCaptchaRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/1203240988/HCaptchaTask+hCaptcha+puzzle+solving)
76
- - [ImageToTextRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/589863/ImageToTextTask)
77
- - [RecaptchaV2ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/373161985/NoCaptchaTaskProxyless+solving+Google+recaptcha)
78
- - [RecaptchaV2Request](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/680689685/NoCaptchaTask+solving+Google+recaptcha)
79
- - [RecaptchaV3ProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/566853650/RecaptchaV3TaskProxyless+solving+Google+ReCaptcha+v.3)
80
- - [RecaptchaV2EnterpriseProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2178383893/RecaptchaV2EnterpriseTaskProxyless+solving+Google+reCAPTCHA+Enterprise+without+proxy)
81
- - [RecaptchaV2EnterpriseRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2179104769/RecaptchaV2EnterpriseTask+solving+Google+reCAPTCHA+Enterprise)
82
- - [TurnstileProxylessRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2257879047/TurnstileTaskProxyless+solving+Turnstile+without+proxy)
83
- - [TurnstileRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2313814017/TurnstileTask+Cloudflare+Challenge)
84
- - [RecaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279538739/ComplexImageTask+Recaptcha+Google+captcha+solution)
85
- - [HcaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2279604241/ComplexImageTask+HCaptcha+hCaptcha+captcha+solution)
86
- - [FunCaptchaComplexImageTaskRequest](https://zennolab.atlassian.net/wiki/spaces/APIS/pages/2291400705/ComplexImageTask+Funcaptcha+Funcaptcha+solving)