capmonstercloudclient 4.1.0__tar.gz → 4.3.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.
- capmonstercloudclient-4.3.0/PKG-INFO +252 -0
- capmonstercloudclient-4.3.0/README.md +177 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/CapMonsterCloudClient.py +17 -8
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/GetResultTimeouts.py +13 -32
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/clientOptions.py +7 -4
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/AlibabaCustomTaskRequest.py +65 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/AltchaCustomTaskRequest.py +51 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/AmazonWafRequest.py +98 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/BasiliskCustomTaskRequest.py +13 -2
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/BinanceTaskRequest.py +41 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/CastleCustomTaskRequest.py +18 -5
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/ComplexImageTaskBase.py +25 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/CustomTaskRequestBase.py +27 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/DataDomeCustomTaskRequest.py +54 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/FriendlyCustomTaskRequest.py +49 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/FuncaptchaComplexImageTask.py +28 -11
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/FuncaptchaRequest.py +60 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/GeetestRequest.py +74 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/HcaptchaComplexImageTask.py +121 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/HcaptchaRequest.py +57 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/HuntCustomTaskRequest.py +60 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/ImageToTextRequest.py +93 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/ImpervaCustomTaskRequest.py +59 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/MTCaptchaRequest.py +47 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/ProsopoTaskRequest.py +32 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/RecaptchaComplexImageTask.py +33 -13
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/RecaptchaV2EnterpiseRequest.py +65 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/RecaptchaV2Request.py +60 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/RecaptchaV3EnterpriseRequest.py +45 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py +50 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/RecognitionComplexImageTaskRequest.py +25 -10
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/TemuCustomTaskRequest.py +19 -6
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/TenDiCustomTaskRequest.py +18 -6
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/TspdCustomTaskRequest.py +60 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/TurnstileRequest.py +107 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/YidunRequest.py +64 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/__init__.py +6 -3
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/baseRequest.py +23 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/baseRequestWithProxy.py +16 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requests/enums.py +13 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/requests/proxy_info.py +68 -0
- capmonstercloudclient-4.3.0/capmonstercloud_client/version.txt +1 -0
- capmonstercloudclient-4.3.0/capmonstercloudclient.egg-info/PKG-INFO +252 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloudclient.egg-info/SOURCES.txt +3 -1
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloudclient.egg-info/requires.txt +16 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/requirements.txt +16 -1
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/setup.py +8 -3
- capmonstercloudclient-4.1.0/PKG-INFO +0 -140
- capmonstercloudclient-4.1.0/README.md +0 -75
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/AlibabaCustomTaskRequest.py +0 -42
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/AltchaCustomTaskRequest.py +0 -36
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/AmazonWafRequest.py +0 -35
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/BinanceTaskRequest.py +0 -29
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/ComplexImageTaskBase.py +0 -11
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/CustomTaskRequestBase.py +0 -10
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/DataDomeCustomTaskRequest.py +0 -46
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/FriendlyCaptchaRequest.py +0 -35
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/FuncaptchaRequest.py +0 -32
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/GeetestRequest.py +0 -53
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/HuntCustomTaskRequest.py +0 -41
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/ImageToTextRequest.py +0 -68
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/ImpervaCustomTaskRequest.py +0 -46
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/MTCaptchaRequest.py +0 -32
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/ProsopoTaskRequest.py +0 -23
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/RecaptchaV2EnterpiseRequest.py +0 -37
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/RecaptchaV2Request.py +0 -41
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/RecaptchaV3EnterpriseRequest.py +0 -22
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/RecaptchaV3ProxylessRequest.py +0 -30
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/TspdCustomTaskRequest.py +0 -44
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/TurnstileRequest.py +0 -81
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/YidunRequest.py +0 -41
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/baseRequest.py +0 -11
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/baseRequestWithProxy.py +0 -7
- capmonstercloudclient-4.1.0/capmonstercloud_client/requests/proxy_info.py +0 -41
- capmonstercloudclient-4.1.0/capmonstercloud_client/version.txt +0 -1
- capmonstercloudclient-4.1.0/capmonstercloudclient.egg-info/PKG-INFO +0 -140
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/LICENSE +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/MANIFEST.in +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/__init__.py +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/captchaResult.py +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/exceptions.py +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/requestController.py +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/utils.py +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloudclient.egg-info/dependency_links.txt +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloudclient.egg-info/top_level.txt +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/pyproject.toml +0 -0
- {capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/setup.cfg +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: capmonstercloudclient
|
|
3
|
+
Version: 4.3.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,recaptcha,geetest,hcaptcha,funcaptcha,python3,python-library,capmonster,capmonstercloud,capmonstercloudclient
|
|
10
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
11
|
+
Classifier: Programming Language :: Python
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
24
|
+
Classifier: Framework :: AsyncIO
|
|
25
|
+
Classifier: Operating System :: Unix
|
|
26
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
27
|
+
Classifier: Operating System :: MacOS
|
|
28
|
+
Requires-Python: >=3.6
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: aiohappyeyeballs==2.4.4; python_version >= "3.9" and python_version <= "3.13"
|
|
32
|
+
Requires-Dist: aiohttp==3.11.10; python_version >= "3.9" and python_version <= "3.13"
|
|
33
|
+
Requires-Dist: aiosignal==1.3.1; python_version >= "3.9" and python_version <= "3.13"
|
|
34
|
+
Requires-Dist: annotated-types==0.7.0; python_version >= "3.9" and python_version <= "3.13"
|
|
35
|
+
Requires-Dist: async-timeout==5.0.1; python_version >= "3.9" and python_version <= "3.11"
|
|
36
|
+
Requires-Dist: attrs==24.2.0; python_version >= "3.9" and python_version <= "3.13"
|
|
37
|
+
Requires-Dist: frozenlist==1.5.0; python_version >= "3.9" and python_version <= "3.13"
|
|
38
|
+
Requires-Dist: idna==3.10; python_version >= "3.9" and python_version <= "3.13"
|
|
39
|
+
Requires-Dist: multidict==6.1.0; python_version >= "3.9" and python_version <= "3.13"
|
|
40
|
+
Requires-Dist: propcache==0.2.1; python_version >= "3.9" and python_version <= "3.13"
|
|
41
|
+
Requires-Dist: pydantic-core==2.27.1; python_version >= "3.9" and python_version <= "3.13"
|
|
42
|
+
Requires-Dist: pydantic==2.10.3; python_version >= "3.9" and python_version <= "3.13"
|
|
43
|
+
Requires-Dist: typing-extensions==4.12.2; python_version >= "3.9" and python_version <= "3.13"
|
|
44
|
+
Requires-Dist: yarl==1.18.3; python_version >= "3.9" and python_version <= "3.13"
|
|
45
|
+
Requires-Dist: aiohttp==3.7.4; python_version >= "3.6" and python_version <= "3.8"
|
|
46
|
+
Requires-Dist: pydantic==2.10.3; python_version >= "3.8" and python_version < "3.9"
|
|
47
|
+
Requires-Dist: pydantic==2.5.3; python_version >= "3.7" and python_version < "3.8"
|
|
48
|
+
Requires-Dist: pydantic==2.1.*; python_version < "3.7"
|
|
49
|
+
Requires-Dist: aiohappyeyeballs==2.7.1; python_version == "3.14"
|
|
50
|
+
Requires-Dist: aiohttp==3.14.3; python_version == "3.14"
|
|
51
|
+
Requires-Dist: aiosignal==1.4.0; python_version == "3.14"
|
|
52
|
+
Requires-Dist: annotated-types==0.8.0; python_version == "3.14"
|
|
53
|
+
Requires-Dist: attrs==26.1.0; python_version == "3.14"
|
|
54
|
+
Requires-Dist: frozenlist==1.8.0; python_version == "3.14"
|
|
55
|
+
Requires-Dist: idna==3.18; python_version == "3.14"
|
|
56
|
+
Requires-Dist: multidict==6.7.1; python_version == "3.14"
|
|
57
|
+
Requires-Dist: propcache==0.5.2; python_version == "3.14"
|
|
58
|
+
Requires-Dist: pydantic-core==2.46.4; python_version == "3.14"
|
|
59
|
+
Requires-Dist: pydantic==2.13.4; python_version == "3.14"
|
|
60
|
+
Requires-Dist: typing-extensions==4.16.0; python_version == "3.14"
|
|
61
|
+
Requires-Dist: typing-inspection==0.4.2; python_version == "3.14"
|
|
62
|
+
Requires-Dist: yarl==1.24.5; python_version == "3.14"
|
|
63
|
+
Dynamic: author
|
|
64
|
+
Dynamic: author-email
|
|
65
|
+
Dynamic: classifier
|
|
66
|
+
Dynamic: description
|
|
67
|
+
Dynamic: description-content-type
|
|
68
|
+
Dynamic: home-page
|
|
69
|
+
Dynamic: keywords
|
|
70
|
+
Dynamic: license
|
|
71
|
+
Dynamic: license-file
|
|
72
|
+
Dynamic: requires-dist
|
|
73
|
+
Dynamic: requires-python
|
|
74
|
+
Dynamic: summary
|
|
75
|
+
|
|
76
|
+
# CapMonster Cloud Python SDK: AI Captcha Solver & Anti-Bot Bypass
|
|
77
|
+
|
|
78
|
+
<p align="center">
|
|
79
|
+
<a href="https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme">
|
|
80
|
+
<img src="https://img.shields.io/badge/CapMonster%20Cloud-Python%20Captcha%20Solver-00B2FF?style=for-the-badge&logo=python&logoColor=white" alt="CapMonster Cloud Python SDK" height="40">
|
|
81
|
+
</a>
|
|
82
|
+
</p>
|
|
83
|
+
|
|
84
|
+
<p align="center">
|
|
85
|
+
<strong>Fast, AI-driven CAPTCHA solving client for Python. Seamlessly bypass Cloudflare Turnstile, reCAPTCHA v2/v3/Enterprise, DataDome, GeeTest, and Amazon WAF in web scraping and browser automation.</strong>
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
<p align="center">
|
|
89
|
+
<a href="https://pypi.org/project/capmonstercloudclient/"><img src="https://img.shields.io/pypi/v/capmonstercloudclient.svg?style=flat-square&color=blue" alt="PyPI version"></a>
|
|
90
|
+
<a href="https://pepy.tech/project/capmonstercloudclient"><img src="https://static.pepy.tech/badge/capmonstercloudclient/month" alt="PyPI downloads"></a>
|
|
91
|
+
<a href="https://pypi.org/project/capmonstercloudclient/"><img src="https://img.shields.io/pypi/pyversions/capmonstercloudclient.svg?style=flat-square" alt="Python Versions"></a>
|
|
92
|
+
<a href="https://github.com/CapMonsterCloud/capmonster-python-captcha-solver/stargazers"><img src="https://img.shields.io/github/stars/CapMonsterCloud/capmonster-python-captcha-solver?style=flat-square&color=yellow" alt="GitHub Stars"></a>
|
|
93
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square" alt="License: MIT"></a>
|
|
94
|
+
</p>
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
Official asynchronous Python SDK for [CapMonster Cloud](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme). Easily plug ultra-fast AI captcha recognition into **Playwright, Selenium, Puppeteer, Scrapy, BeautifulSoup, and Requests** automation workflows without human-in-the-loop delays.
|
|
99
|
+
|
|
100
|
+
**[👉 Get your Free API Key & Free Trial Balance on CapMonster Cloud](https://dash.capmonster.cloud/Account/SignUp?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)**
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## ⚡ Highlights & Benchmarks
|
|
105
|
+
|
|
106
|
+
- ⚡ **Sub-Second Speed:** Automated AI models solve captchas in 300 ms to 6 seconds depending on the system load.
|
|
107
|
+
- 🤖 **Zero Human Workers:** 100% automated machine learning pipeline with no manual latencies.
|
|
108
|
+
- 🌐 **Browser Automation Ready:** Works out-of-the-box with **Playwright, Selenium, and Puppeteer**.
|
|
109
|
+
- 🛡️ **Modern Anti-Bot Bypass:** Full support for Cloudflare Turnstile, reCAPTCHA Enterprise, GeeTest, and Amazon WAF.
|
|
110
|
+
- 💰 **Cost-Effective:** Low-cost pricing structure based on pay-as-you-go balance.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 📦 Installation
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pip install capmonstercloudclient
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🚀 Quick Start & Usage Examples
|
|
123
|
+
|
|
124
|
+
### 1. Asynchronous reCAPTCHA v2 Solving
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
import asyncio
|
|
128
|
+
from capmonstercloudclient import CapMonsterClient, ClientOptions
|
|
129
|
+
from capmonstercloudclient.requests import RecaptchaV2Request
|
|
130
|
+
|
|
131
|
+
# Initialize client with your API key from dashboard
|
|
132
|
+
options = ClientOptions(api_key="YOUR_CAPMONSTER_API_KEY")
|
|
133
|
+
client = CapMonsterClient(options=options)
|
|
134
|
+
|
|
135
|
+
async def main():
|
|
136
|
+
# Build the task payload
|
|
137
|
+
request = RecaptchaV2Request(
|
|
138
|
+
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
|
|
139
|
+
websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# Send task and receive token
|
|
143
|
+
result = await client.solve_captcha(request)
|
|
144
|
+
print("reCAPTCHA Token:", result.get("gRecaptchaResponse"))
|
|
145
|
+
|
|
146
|
+
if __name__ == "__main__":
|
|
147
|
+
asyncio.run(main())
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 2. Browser Automation (Playwright + Cloudflare Turnstile)
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
import asyncio
|
|
154
|
+
from playwright.async_api import async_playwright
|
|
155
|
+
from capmonstercloudclient import CapMonsterClient, ClientOptions
|
|
156
|
+
from capmonstercloudclient.requests import TurnstileRequest
|
|
157
|
+
|
|
158
|
+
options = ClientOptions(api_key="YOUR_CAPMONSTER_API_KEY")
|
|
159
|
+
client = CapMonsterClient(options=options)
|
|
160
|
+
|
|
161
|
+
async def run_scraper():
|
|
162
|
+
# Solve Turnstile challenge via CapMonster Cloud
|
|
163
|
+
turnstile_req = TurnstileRequest(
|
|
164
|
+
websiteURL="https://target-website.com/login",
|
|
165
|
+
websiteKey="0x4AAAAAAABnPIDnK2k_e-2"
|
|
166
|
+
)
|
|
167
|
+
solution = await client.solve_captcha(turnstile_req)
|
|
168
|
+
token = solution.get("token")
|
|
169
|
+
|
|
170
|
+
# Inject token into Playwright browser session
|
|
171
|
+
async with async_playwright() as p:
|
|
172
|
+
browser = await p.chromium.launch(headless=False)
|
|
173
|
+
page = await browser.new_page()
|
|
174
|
+
await page.goto("https://target-website.com/login")
|
|
175
|
+
|
|
176
|
+
await page.evaluate(f'document.querySelector("[name=cf-turnstile-response]").value = "{token}";')
|
|
177
|
+
await page.click("#submit-button")
|
|
178
|
+
await browser.close()
|
|
179
|
+
|
|
180
|
+
if __name__ == "__main__":
|
|
181
|
+
asyncio.run(run_scraper())
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 🛡️ Supported CAPTCHA Types
|
|
187
|
+
|
|
188
|
+
All task types conform to the official [CapMonster Cloud API Documentation](https://docs.capmonster.cloud/docs/captchas/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme):
|
|
189
|
+
|
|
190
|
+
| Protection Type | Task Request Class | Proxyless Mode |
|
|
191
|
+
| :--- | :--- | :---: |
|
|
192
|
+
| **Cloudflare Turnstile** | `TurnstileRequest` | ✅ Supported |
|
|
193
|
+
| **reCAPTCHA v2** | `RecaptchaV2Request` | ✅ Supported |
|
|
194
|
+
| **reCAPTCHA v3** | `RecaptchaV3ProxylessRequest` | ✅ Supported |
|
|
195
|
+
| **reCAPTCHA Enterprise** | `RecaptchaV2EnterpriseProxylessRequest` / `RecaptchaV2EnterpriseRequest` | ✅ Supported |
|
|
196
|
+
| **GeeTest (v3, v4)** | `GeeTestProxylessRequest` / `GeeTestRequest` | ✅ Supported |
|
|
197
|
+
| **Amazon WAF** | `AmazonWafRequest` | ✅ Supported |
|
|
198
|
+
| **DataDome** | `DataDomeCustomTaskRequest` | 🌐 Proxy Required |
|
|
199
|
+
| **Imperva / Incapsula** | `ImpervaCustomTaskRequest` / `ImpervaCustomTaskProxylessRequest` | ✅ Supported |
|
|
200
|
+
| **Binance CAPTCHA** | `BinanceTaskRequest` / `BinanceTaskProxylessRequest` | ✅ Supported |
|
|
201
|
+
| **Standard Text CAPTCHA** | `ImageToTextRequest` | ✅ Supported |
|
|
202
|
+
| **Complex Image Tasks** | `RecaptchaComplexImageTaskRequest` | ✅ Supported |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 🛠️ How It Works
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
[ Script / Scraper ]
|
|
210
|
+
│
|
|
211
|
+
▼
|
|
212
|
+
[ Extract sitekey & website URL ]
|
|
213
|
+
│
|
|
214
|
+
▼
|
|
215
|
+
[ CapMonsterClient API ] ──► POST createTask to https://api.capmonster.cloud
|
|
216
|
+
│
|
|
217
|
+
▼
|
|
218
|
+
[ Neural Network Processing ] ──► Poll getTaskResult (300ms - 6s)
|
|
219
|
+
│
|
|
220
|
+
▼
|
|
221
|
+
[ Receive Token & Autosubmit ] ──► Complete bypass
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## ⚙️ Best Practices
|
|
227
|
+
|
|
228
|
+
- **Token Expiration:** Most tokens (reCAPTCHA, Turnstile) remain valid for 120 seconds. Inject and submit the solution immediately after receiving the response.
|
|
229
|
+
- **Proxy Usage:** For custom tasks and strict protections, use the same proxy in your scraping session and the CapMonster task payload.
|
|
230
|
+
- **Balance Monitoring:** Ensure your account balance remains positive in the [Dashboard](https://dash.capmonster.cloud/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme).
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 📚 Official Documentation & Links
|
|
235
|
+
|
|
236
|
+
- 📖 [Getting Started Guide](https://docs.capmonster.cloud/docs/getting-start/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
237
|
+
- 🎯 [Supported Captchas Overview](https://docs.capmonster.cloud/docs/captchas/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
238
|
+
- ⚙️ [API Methods Reference](https://docs.capmonster.cloud/docs/methods/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
239
|
+
- 💬 [Support & Community](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme#support)
|
|
240
|
+
|
|
241
|
+
## Other official SDKs
|
|
242
|
+
|
|
243
|
+
- [.NET](https://github.com/CapMonsterCloud/capmonster-dotnet-captcha-solver)
|
|
244
|
+
- [Node.js](https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver)
|
|
245
|
+
- [n8n](https://github.com/CapMonsterCloud/capmonster-n8n-captcha-solver)
|
|
246
|
+
- [API Docs](https://github.com/CapMonsterCloud/capmonster-captcha-solver-docs)
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 📄 License
|
|
251
|
+
|
|
252
|
+
[MIT](./LICENSE) © [ZennoLab](https://zennolab.com/) / [CapMonster Cloud](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# CapMonster Cloud Python SDK: AI Captcha Solver & Anti-Bot Bypass
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme">
|
|
5
|
+
<img src="https://img.shields.io/badge/CapMonster%20Cloud-Python%20Captcha%20Solver-00B2FF?style=for-the-badge&logo=python&logoColor=white" alt="CapMonster Cloud Python SDK" height="40">
|
|
6
|
+
</a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<strong>Fast, AI-driven CAPTCHA solving client for Python. Seamlessly bypass Cloudflare Turnstile, reCAPTCHA v2/v3/Enterprise, DataDome, GeeTest, and Amazon WAF in web scraping and browser automation.</strong>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://pypi.org/project/capmonstercloudclient/"><img src="https://img.shields.io/pypi/v/capmonstercloudclient.svg?style=flat-square&color=blue" alt="PyPI version"></a>
|
|
15
|
+
<a href="https://pepy.tech/project/capmonstercloudclient"><img src="https://static.pepy.tech/badge/capmonstercloudclient/month" alt="PyPI downloads"></a>
|
|
16
|
+
<a href="https://pypi.org/project/capmonstercloudclient/"><img src="https://img.shields.io/pypi/pyversions/capmonstercloudclient.svg?style=flat-square" alt="Python Versions"></a>
|
|
17
|
+
<a href="https://github.com/CapMonsterCloud/capmonster-python-captcha-solver/stargazers"><img src="https://img.shields.io/github/stars/CapMonsterCloud/capmonster-python-captcha-solver?style=flat-square&color=yellow" alt="GitHub Stars"></a>
|
|
18
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square" alt="License: MIT"></a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
Official asynchronous Python SDK for [CapMonster Cloud](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme). Easily plug ultra-fast AI captcha recognition into **Playwright, Selenium, Puppeteer, Scrapy, BeautifulSoup, and Requests** automation workflows without human-in-the-loop delays.
|
|
24
|
+
|
|
25
|
+
**[👉 Get your Free API Key & Free Trial Balance on CapMonster Cloud](https://dash.capmonster.cloud/Account/SignUp?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ⚡ Highlights & Benchmarks
|
|
30
|
+
|
|
31
|
+
- ⚡ **Sub-Second Speed:** Automated AI models solve captchas in 300 ms to 6 seconds depending on the system load.
|
|
32
|
+
- 🤖 **Zero Human Workers:** 100% automated machine learning pipeline with no manual latencies.
|
|
33
|
+
- 🌐 **Browser Automation Ready:** Works out-of-the-box with **Playwright, Selenium, and Puppeteer**.
|
|
34
|
+
- 🛡️ **Modern Anti-Bot Bypass:** Full support for Cloudflare Turnstile, reCAPTCHA Enterprise, GeeTest, and Amazon WAF.
|
|
35
|
+
- 💰 **Cost-Effective:** Low-cost pricing structure based on pay-as-you-go balance.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 📦 Installation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install capmonstercloudclient
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🚀 Quick Start & Usage Examples
|
|
48
|
+
|
|
49
|
+
### 1. Asynchronous reCAPTCHA v2 Solving
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
import asyncio
|
|
53
|
+
from capmonstercloudclient import CapMonsterClient, ClientOptions
|
|
54
|
+
from capmonstercloudclient.requests import RecaptchaV2Request
|
|
55
|
+
|
|
56
|
+
# Initialize client with your API key from dashboard
|
|
57
|
+
options = ClientOptions(api_key="YOUR_CAPMONSTER_API_KEY")
|
|
58
|
+
client = CapMonsterClient(options=options)
|
|
59
|
+
|
|
60
|
+
async def main():
|
|
61
|
+
# Build the task payload
|
|
62
|
+
request = RecaptchaV2Request(
|
|
63
|
+
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
|
|
64
|
+
websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Send task and receive token
|
|
68
|
+
result = await client.solve_captcha(request)
|
|
69
|
+
print("reCAPTCHA Token:", result.get("gRecaptchaResponse"))
|
|
70
|
+
|
|
71
|
+
if __name__ == "__main__":
|
|
72
|
+
asyncio.run(main())
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 2. Browser Automation (Playwright + Cloudflare Turnstile)
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
import asyncio
|
|
79
|
+
from playwright.async_api import async_playwright
|
|
80
|
+
from capmonstercloudclient import CapMonsterClient, ClientOptions
|
|
81
|
+
from capmonstercloudclient.requests import TurnstileRequest
|
|
82
|
+
|
|
83
|
+
options = ClientOptions(api_key="YOUR_CAPMONSTER_API_KEY")
|
|
84
|
+
client = CapMonsterClient(options=options)
|
|
85
|
+
|
|
86
|
+
async def run_scraper():
|
|
87
|
+
# Solve Turnstile challenge via CapMonster Cloud
|
|
88
|
+
turnstile_req = TurnstileRequest(
|
|
89
|
+
websiteURL="https://target-website.com/login",
|
|
90
|
+
websiteKey="0x4AAAAAAABnPIDnK2k_e-2"
|
|
91
|
+
)
|
|
92
|
+
solution = await client.solve_captcha(turnstile_req)
|
|
93
|
+
token = solution.get("token")
|
|
94
|
+
|
|
95
|
+
# Inject token into Playwright browser session
|
|
96
|
+
async with async_playwright() as p:
|
|
97
|
+
browser = await p.chromium.launch(headless=False)
|
|
98
|
+
page = await browser.new_page()
|
|
99
|
+
await page.goto("https://target-website.com/login")
|
|
100
|
+
|
|
101
|
+
await page.evaluate(f'document.querySelector("[name=cf-turnstile-response]").value = "{token}";')
|
|
102
|
+
await page.click("#submit-button")
|
|
103
|
+
await browser.close()
|
|
104
|
+
|
|
105
|
+
if __name__ == "__main__":
|
|
106
|
+
asyncio.run(run_scraper())
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 🛡️ Supported CAPTCHA Types
|
|
112
|
+
|
|
113
|
+
All task types conform to the official [CapMonster Cloud API Documentation](https://docs.capmonster.cloud/docs/captchas/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme):
|
|
114
|
+
|
|
115
|
+
| Protection Type | Task Request Class | Proxyless Mode |
|
|
116
|
+
| :--- | :--- | :---: |
|
|
117
|
+
| **Cloudflare Turnstile** | `TurnstileRequest` | ✅ Supported |
|
|
118
|
+
| **reCAPTCHA v2** | `RecaptchaV2Request` | ✅ Supported |
|
|
119
|
+
| **reCAPTCHA v3** | `RecaptchaV3ProxylessRequest` | ✅ Supported |
|
|
120
|
+
| **reCAPTCHA Enterprise** | `RecaptchaV2EnterpriseProxylessRequest` / `RecaptchaV2EnterpriseRequest` | ✅ Supported |
|
|
121
|
+
| **GeeTest (v3, v4)** | `GeeTestProxylessRequest` / `GeeTestRequest` | ✅ Supported |
|
|
122
|
+
| **Amazon WAF** | `AmazonWafRequest` | ✅ Supported |
|
|
123
|
+
| **DataDome** | `DataDomeCustomTaskRequest` | 🌐 Proxy Required |
|
|
124
|
+
| **Imperva / Incapsula** | `ImpervaCustomTaskRequest` / `ImpervaCustomTaskProxylessRequest` | ✅ Supported |
|
|
125
|
+
| **Binance CAPTCHA** | `BinanceTaskRequest` / `BinanceTaskProxylessRequest` | ✅ Supported |
|
|
126
|
+
| **Standard Text CAPTCHA** | `ImageToTextRequest` | ✅ Supported |
|
|
127
|
+
| **Complex Image Tasks** | `RecaptchaComplexImageTaskRequest` | ✅ Supported |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 🛠️ How It Works
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
[ Script / Scraper ]
|
|
135
|
+
│
|
|
136
|
+
▼
|
|
137
|
+
[ Extract sitekey & website URL ]
|
|
138
|
+
│
|
|
139
|
+
▼
|
|
140
|
+
[ CapMonsterClient API ] ──► POST createTask to https://api.capmonster.cloud
|
|
141
|
+
│
|
|
142
|
+
▼
|
|
143
|
+
[ Neural Network Processing ] ──► Poll getTaskResult (300ms - 6s)
|
|
144
|
+
│
|
|
145
|
+
▼
|
|
146
|
+
[ Receive Token & Autosubmit ] ──► Complete bypass
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## ⚙️ Best Practices
|
|
152
|
+
|
|
153
|
+
- **Token Expiration:** Most tokens (reCAPTCHA, Turnstile) remain valid for 120 seconds. Inject and submit the solution immediately after receiving the response.
|
|
154
|
+
- **Proxy Usage:** For custom tasks and strict protections, use the same proxy in your scraping session and the CapMonster task payload.
|
|
155
|
+
- **Balance Monitoring:** Ensure your account balance remains positive in the [Dashboard](https://dash.capmonster.cloud/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme).
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 📚 Official Documentation & Links
|
|
160
|
+
|
|
161
|
+
- 📖 [Getting Started Guide](https://docs.capmonster.cloud/docs/getting-start/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
162
|
+
- 🎯 [Supported Captchas Overview](https://docs.capmonster.cloud/docs/captchas/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
163
|
+
- ⚙️ [API Methods Reference](https://docs.capmonster.cloud/docs/methods/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
164
|
+
- 💬 [Support & Community](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme#support)
|
|
165
|
+
|
|
166
|
+
## Other official SDKs
|
|
167
|
+
|
|
168
|
+
- [.NET](https://github.com/CapMonsterCloud/capmonster-dotnet-captcha-solver)
|
|
169
|
+
- [Node.js](https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver)
|
|
170
|
+
- [n8n](https://github.com/CapMonsterCloud/capmonster-n8n-captcha-solver)
|
|
171
|
+
- [API Docs](https://github.com/CapMonsterCloud/capmonster-captcha-solver-docs)
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 📄 License
|
|
176
|
+
|
|
177
|
+
[MIT](./LICENSE) © [ZennoLab](https://zennolab.com/) / [CapMonster Cloud](https://capmonster.cloud/en/?utm_source=github&utm_medium=referral&utm_campaign=python_repo_readme)
|
|
@@ -20,9 +20,11 @@ _instance_config = (
|
|
|
20
20
|
((RecaptchaV3EnterpriseRequest,), getRecaptchaV3Timeouts),
|
|
21
21
|
((ImageToTextRequest,), getImage2TextTimeouts),
|
|
22
22
|
((FuncaptchaRequest,), getFuncaptchaTimeouts),
|
|
23
|
+
((HcaptchaRequest,), getHcaptchaTimeouts),
|
|
23
24
|
((GeetestRequest,), getGeetestTimeouts),
|
|
24
25
|
((TurnstileRequest,), getTurnstileTimeouts),
|
|
25
|
-
((RecaptchaComplexImageTaskRequest,
|
|
26
|
+
((RecaptchaComplexImageTaskRequest, HcaptchaComplexImageTaskRequest,
|
|
27
|
+
FunCaptchaComplexImageTaskRequest), getImage2TextTimeouts),
|
|
26
28
|
((DataDomeCustomTaskRequest,), getDatadomeTimeouts),
|
|
27
29
|
((TenDiCustomTaskRequest,), getTenDiTimeouts),
|
|
28
30
|
((BasiliskCustomTaskRequest,), getBasiliskTimeouts),
|
|
@@ -30,7 +32,7 @@ _instance_config = (
|
|
|
30
32
|
((BinanceTaskRequest,), getBinanceTimeouts),
|
|
31
33
|
((ImpervaCustomTaskRequest,), getImpervaTimeouts),
|
|
32
34
|
((RecognitionComplexImageTaskRequest,), getCITTimeouts),
|
|
33
|
-
((MTCaptchaRequest,),
|
|
35
|
+
((MTCaptchaRequest,), getMTCaptchaTimeouts),
|
|
34
36
|
((YidunRequest,), getYidunTimeouts),
|
|
35
37
|
((TemuCustomTaskRequest,), getTemuTimeouts),
|
|
36
38
|
((ProsopoTaskRequest,), getProsopoTimeouts),
|
|
@@ -38,8 +40,8 @@ _instance_config = (
|
|
|
38
40
|
((CastleCustomTaskRequest,), getCastleTimeouts),
|
|
39
41
|
((TspdCustomTaskRequest,), getTspdTimeouts),
|
|
40
42
|
((HuntCustomTaskRequest,), getHuntTimeouts),
|
|
41
|
-
((FriendlyCaptchaRequest,), getFriendlyCaptchaTimeouts),
|
|
42
43
|
((AlibabaCustomTaskRequest,), getAlibabaTimeouts),
|
|
44
|
+
((FriendlyCustomTaskRequest,), getFriendlyTimeouts),
|
|
43
45
|
)
|
|
44
46
|
|
|
45
47
|
|
|
@@ -88,6 +90,8 @@ class CapMonsterClient:
|
|
|
88
90
|
ImageToTextRequest,
|
|
89
91
|
FuncaptchaRequest,
|
|
90
92
|
FunCaptchaComplexImageTaskRequest,
|
|
93
|
+
HcaptchaRequest,
|
|
94
|
+
HcaptchaComplexImageTaskRequest,
|
|
91
95
|
GeetestRequest,
|
|
92
96
|
DataDomeCustomTaskRequest,
|
|
93
97
|
TenDiCustomTaskRequest,
|
|
@@ -105,8 +109,8 @@ class CapMonsterClient:
|
|
|
105
109
|
CastleCustomTaskRequest,
|
|
106
110
|
TspdCustomTaskRequest,
|
|
107
111
|
HuntCustomTaskRequest,
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
AlibabaCustomTaskRequest,
|
|
113
|
+
FriendlyCustomTaskRequest],
|
|
110
114
|
) -> Dict[str, str]:
|
|
111
115
|
'''
|
|
112
116
|
Non-blocking method for captcha solving.
|
|
@@ -130,6 +134,8 @@ class CapMonsterClient:
|
|
|
130
134
|
ImageToTextRequest,
|
|
131
135
|
FuncaptchaRequest,
|
|
132
136
|
FunCaptchaComplexImageTaskRequest,
|
|
137
|
+
HcaptchaRequest,
|
|
138
|
+
HcaptchaComplexImageTaskRequest,
|
|
133
139
|
GeetestRequest,
|
|
134
140
|
DataDomeCustomTaskRequest,
|
|
135
141
|
TenDiCustomTaskRequest,
|
|
@@ -144,8 +150,11 @@ class CapMonsterClient:
|
|
|
144
150
|
TemuCustomTaskRequest,
|
|
145
151
|
ProsopoTaskRequest,
|
|
146
152
|
AltchaCustomTaskRequest,
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
CastleCustomTaskRequest,
|
|
154
|
+
TspdCustomTaskRequest,
|
|
155
|
+
HuntCustomTaskRequest,
|
|
156
|
+
AlibabaCustomTaskRequest,
|
|
157
|
+
FriendlyCustomTaskRequest],
|
|
149
158
|
timeouts: GetResultTimeouts,
|
|
150
159
|
) -> Dict[str, str]:
|
|
151
160
|
|
|
@@ -215,4 +224,4 @@ class CapMonsterClient:
|
|
|
215
224
|
raise HTTPException(f'Cannot create task. Status code: {resp.status}.')
|
|
216
225
|
else:
|
|
217
226
|
return await resp.json(content_type=None)
|
|
218
|
-
|
|
227
|
+
|
|
@@ -1,106 +1,87 @@
|
|
|
1
1
|
from typing import Union
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
|
|
4
|
-
|
|
5
4
|
@dataclass
|
|
6
5
|
class GetResultTimeouts:
|
|
7
6
|
firstRequestDelay: Union[int, float]
|
|
8
7
|
firstRequestNoCacheDelay: Union[int, float]
|
|
9
|
-
requestsInterval: Union[int, float]
|
|
8
|
+
requestsInterval: Union[int, float]
|
|
10
9
|
timeout: Union[int, float]
|
|
11
10
|
|
|
12
|
-
|
|
13
11
|
def getRecaptchaV2Timeouts() -> GetResultTimeouts:
|
|
14
12
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
15
13
|
|
|
16
|
-
|
|
17
14
|
def getRecaptchaV2EnterpriseTimeouts() -> GetResultTimeouts:
|
|
18
15
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
19
16
|
|
|
20
|
-
|
|
21
17
|
def getRecaptchaV3Timeouts() -> GetResultTimeouts:
|
|
22
18
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
23
19
|
|
|
24
|
-
|
|
25
20
|
def getRecaptchaV3EnterpriseTimeouts() -> GetResultTimeouts:
|
|
26
21
|
return GetResultTimeouts(1, 10, 3, 150)
|
|
27
22
|
|
|
28
|
-
|
|
29
23
|
def getImage2TextTimeouts() -> GetResultTimeouts:
|
|
30
24
|
return GetResultTimeouts(0.35, 0, 0.2, 10)
|
|
31
25
|
|
|
32
|
-
|
|
33
26
|
def getFuncaptchaTimeouts() -> GetResultTimeouts:
|
|
34
27
|
return GetResultTimeouts(1, 10, 1, 80)
|
|
35
28
|
|
|
29
|
+
def getHcaptchaTimeouts() -> GetResultTimeouts:
|
|
30
|
+
return GetResultTimeouts(1, 10, 3, 180)
|
|
36
31
|
|
|
37
32
|
def getGeetestTimeouts() -> GetResultTimeouts:
|
|
38
33
|
return GetResultTimeouts(1, 0, 1, 80)
|
|
39
34
|
|
|
40
|
-
|
|
41
35
|
def getTurnstileTimeouts() -> GetResultTimeouts:
|
|
42
36
|
return GetResultTimeouts(1, 0, 1, 80)
|
|
43
37
|
|
|
44
|
-
|
|
45
38
|
def getDatadomeTimeouts() -> GetResultTimeouts:
|
|
46
|
-
return GetResultTimeouts(1, 0,
|
|
47
|
-
|
|
39
|
+
return GetResultTimeouts(1, 0, 3, 180)
|
|
48
40
|
|
|
49
41
|
def getTenDiTimeouts() -> GetResultTimeouts:
|
|
50
42
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
51
43
|
|
|
52
|
-
|
|
53
44
|
def getBasiliskTimeouts() -> GetResultTimeouts:
|
|
54
45
|
return GetResultTimeouts(1, 10, 3, 100)
|
|
55
46
|
|
|
56
|
-
|
|
57
47
|
def getAmazonWafTimeouts() -> GetResultTimeouts:
|
|
58
48
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
59
49
|
|
|
60
|
-
|
|
61
50
|
def getBinanceTimeouts() -> GetResultTimeouts:
|
|
62
51
|
return GetResultTimeouts(1, 0, 1, 20)
|
|
63
52
|
|
|
64
|
-
|
|
65
53
|
def getImpervaTimeouts() -> GetResultTimeouts:
|
|
66
|
-
return GetResultTimeouts(1, 0, 1,
|
|
67
|
-
|
|
54
|
+
return GetResultTimeouts(1, 0, 1, 15)
|
|
68
55
|
|
|
69
56
|
def getAltchaTimeouts() -> GetResultTimeouts:
|
|
70
57
|
return GetResultTimeouts(1, 0, 1, 50)
|
|
71
58
|
|
|
72
|
-
|
|
73
59
|
def getCastleTimeouts() -> GetResultTimeouts:
|
|
74
60
|
return GetResultTimeouts(1, 0, 1, 60)
|
|
75
61
|
|
|
76
|
-
|
|
77
62
|
def getTspdTimeouts() -> GetResultTimeouts:
|
|
78
63
|
return GetResultTimeouts(1, 0, 1, 60)
|
|
79
64
|
|
|
80
|
-
|
|
81
65
|
def getHuntTimeouts() -> GetResultTimeouts:
|
|
82
|
-
return GetResultTimeouts(1, 0,
|
|
66
|
+
return GetResultTimeouts(1, 0, 3, 180)
|
|
67
|
+
|
|
68
|
+
def getAlibabaTimeouts() -> GetResultTimeouts:
|
|
69
|
+
return GetResultTimeouts(1, 0, 3, 120)
|
|
83
70
|
|
|
71
|
+
def getFriendlyTimeouts() -> GetResultTimeouts:
|
|
72
|
+
return GetResultTimeouts(1, 0, 3, 180)
|
|
84
73
|
|
|
85
74
|
def getCITTimeouts() -> GetResultTimeouts:
|
|
86
75
|
return GetResultTimeouts(0.35, 0, 0.2, 10)
|
|
87
76
|
|
|
77
|
+
def getMTCaptchaTimeouts() -> GetResultTimeouts:
|
|
78
|
+
return GetResultTimeouts(1, 10, 3, 180)
|
|
88
79
|
|
|
89
80
|
def getYidunTimeouts() -> GetResultTimeouts:
|
|
90
81
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
91
82
|
|
|
92
|
-
|
|
93
83
|
def getProsopoTimeouts() -> GetResultTimeouts:
|
|
94
84
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
95
85
|
|
|
96
|
-
|
|
97
86
|
def getTemuTimeouts() -> GetResultTimeouts:
|
|
98
87
|
return GetResultTimeouts(1, 10, 3, 180)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def getFriendlyCaptchaTimeouts() -> GetResultTimeouts:
|
|
102
|
-
return GetResultTimeouts(1, 0, 1, 180)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def getAlibabaTimeouts() -> GetResultTimeouts:
|
|
106
|
-
return GetResultTimeouts(1, 0, 1, 180)
|
{capmonstercloudclient-4.1.0 → capmonstercloudclient-4.3.0}/capmonstercloud_client/clientOptions.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from pydantic import BaseModel,
|
|
1
|
+
from pydantic import BaseModel, field_validator, Field
|
|
2
2
|
from .requests import ClientProxyInfo
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
@@ -10,19 +10,22 @@ class ClientOptions(BaseModel):
|
|
|
10
10
|
client_timeout: float = Field(default=20.0)
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
@
|
|
13
|
+
@field_validator('api_key')
|
|
14
|
+
@classmethod
|
|
14
15
|
def validate_api_key(cls, value):
|
|
15
16
|
if not isinstance(value, str):
|
|
16
17
|
raise TypeError(f'Api Key must be <str> type, got {type(value)}')
|
|
17
18
|
return value
|
|
18
19
|
|
|
19
|
-
@
|
|
20
|
+
@field_validator('service_url')
|
|
21
|
+
@classmethod
|
|
20
22
|
def validate_service_url(cls, value):
|
|
21
23
|
if not isinstance(value, str):
|
|
22
24
|
raise TypeError(f'Service url must be <str> type, got {type(value)}')
|
|
23
25
|
return value
|
|
24
26
|
|
|
25
|
-
@
|
|
27
|
+
@field_validator('default_soft_id')
|
|
28
|
+
@classmethod
|
|
26
29
|
def validate_soft_id(cls, value):
|
|
27
30
|
if not isinstance(value, int):
|
|
28
31
|
raise TypeError(f'Soft id must be <int> type, got {type(value)}')
|