Skip to content

Commit 9c22486

Browse files
authored
Merge pull request #31 from ZennoLab/grk717-binance
Binance, imperva, docs
2 parents 27f8c9c + 0c7cc4e commit 9c22486

17 files changed

Lines changed: 378 additions & 8 deletions

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ Supported captcha recognition requests:
3131

3232
- [GeeTestProxylessRequest](https://zenno.link/doc-geetest-en)
3333
- [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)
3634
- [ImageToTextRequest](https://zenno.link/doc-ImageToTextTask-en)
3735
- [RecaptchaV2ProxylessRequest](https://zenno.link/doc-recaptcha2-en)
3836
- [RecaptchaV2Request](https://zenno.link/doc-recaptcha2-proxy-en)
@@ -42,8 +40,11 @@ Supported captcha recognition requests:
4240
- [TurnstileProxylessRequest](https://zenno.link/doc-turnstile-en)
4341
- [TurnstileRequest](https://zenno.link/doc-turnstile-proxy-en)
4442
- [RecaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-rc-en)
45-
- [HcaptchaComplexImageTaskRequest](https://zenno.link/doc-complextask-hc-en)
4643
- [DataDomeCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/datadome)
4744
- [TenDiCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/tendi)
4845
- [BasiliskCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/Basilisk-task)
4946
- [AmazonWafRequest](https://docs.capmonster.cloud/docs/captchas/amazon-task)
47+
- [BinanceTaskRequest](https://docs.capmonster.cloud/docs/captchas/binance)
48+
- [BinanceTaskProxylessRequest](https://docs.capmonster.cloud/docs/captchas/binance)
49+
- [ImpervaCustomTaskRequest](https://docs.capmonster.cloud/docs/captchas/incapsula)
50+
- [ImpervaCustomTaskProxylessRequest](https://docs.capmonster.cloud/docs/captchas/incapsula)

capmonstercloud_client/CapMonsterCloudClient.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
((TenDiCustomTaskRequest, TenDiCustomTaskProxylessRequest), getTenDiTimeouts),
2929
((BasiliskCustomTaskRequest, BasiliskCustomTaskProxylessRequest), getBasiliskTimeouts),
3030
((AmazonWafRequest, AmazonWafProxylessRequest), getAmazonWafTimeouts),
31-
31+
((BinanceTaskRequest, BinanceTaskProxylessRequest), getBinanceTimeouts),
32+
((ImpervaCustomTaskRequest, ImpervaCustomTaskProxylessRequest), getImpervaTimeouts)
3233
)
3334

3435

@@ -77,7 +78,11 @@ async def solve_captcha(self, request: Union[RecaptchaV2EnterpriseProxylessReque
7778
RecaptchaComplexImageTaskRequest,
7879
FunCaptchaComplexImageTaskRequest,
7980
DataDomeCustomTaskProxylessRequest,
80-
DataDomeCustomTaskRequest],
81+
DataDomeCustomTaskRequest,
82+
BinanceTaskRequest,
83+
BinanceTaskProxylessRequest,
84+
ImpervaCustomTaskRequest,
85+
ImpervaCustomTaskProxylessRequest],
8186
) -> Dict[str, str]:
8287
'''
8388
Non-blocking method for captcha solving.
@@ -108,7 +113,11 @@ async def _solve(self, request: Union[RecaptchaV2EnterpriseProxylessRequest,
108113
TurnstileRequest,
109114
HcaptchaComplexImageTaskRequest,
110115
RecaptchaComplexImageTaskRequest,
111-
FunCaptchaComplexImageTaskRequest],
116+
FunCaptchaComplexImageTaskRequest,
117+
BinanceTaskRequest,
118+
BinanceTaskProxylessRequest,
119+
ImpervaCustomTaskRequest,
120+
ImpervaCustomTaskProxylessRequest],
112121
timeouts: GetResultTimeouts,
113122
) -> Dict[str, str]:
114123

capmonstercloud_client/GetResultTimeouts.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,9 @@ def getBasiliskTimeouts() -> GetResultTimeouts:
4343

4444
def getAmazonWafTimeouts() -> GetResultTimeouts:
4545
return GetResultTimeouts(1, 10, 3, 180)
46+
47+
def getBinanceTimeouts() -> GetResultTimeouts:
48+
return GetResultTimeouts(1, 0, 1, 20)
49+
50+
def getImpervaTimeouts() -> GetResultTimeouts:
51+
return GetResultTimeouts(1, 0, 1, 20)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from typing import Dict, Union
2+
3+
from .BinanceTaskRequestBase import BinanceTaskRequestBase
4+
5+
6+
class BinanceTaskProxylessRequest(BinanceTaskRequestBase):
7+
type: str = 'BinanceTaskProxyless'
8+
9+
def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10+
task = {}
11+
task['type'] = self.type
12+
task['validateId'] = self.validateId
13+
task['websiteURL'] = self.websiteUrl
14+
task['websiteKey'] = self.websiteKey
15+
if self.userAgent is not None:
16+
task['userAgent'] = self.userAgent
17+
return task
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 .BinanceTaskRequestBase import BinanceTaskRequestBase
6+
7+
class BinanceTaskRequest(BinanceTaskRequestBase, ProxyInfo):
8+
9+
def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
10+
task = {}
11+
task['type'] = self.type
12+
task['validateId'] = self.validateId
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
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from .baseRequest import BaseRequest, Field
2+
from typing import Optional
3+
4+
5+
class BinanceTaskRequestBase(BaseRequest):
6+
7+
type: str = Field(default='BinanceTask')
8+
websiteKey: str = Field()
9+
websiteUrl: str = Field()
10+
validateId: str = Field()
11+
userAgent: Optional[str] = None
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from typing import Dict, Union
2+
from pydantic import Field, validator
3+
4+
from .ImpervaCustomTaskRequestBase import ImpervaCustomTaskRequestBase
5+
6+
class ImpervaCustomTaskProxylessRequest(ImpervaCustomTaskRequestBase):
7+
metadata : Dict[str, str]
8+
9+
@validator('metadata')
10+
def validate_metadata(cls, value):
11+
if value.get('incapsulaScriptBase64') is None:
12+
raise TypeError(f'Expect that incapsulaScriptBase64 will be defined.')
13+
else:
14+
if not isinstance(value.get('incapsulaScriptBase64'), str):
15+
raise TypeError(f'Expect that incapsulaScriptBase64 will be str.')
16+
if value.get('incapsulaSessionCookie') is None:
17+
raise TypeError(f'Expect that incapsulaSessionCookie will be defined.')
18+
else:
19+
if not isinstance(value.get('incapsulaSessionCookie'), str):
20+
raise TypeError(f'Expect that incapsulaSessionCookie will be str.')
21+
if value.get('reese84UrlEndpoint') is not None and not isinstance(value.get('incapsulaSessionCookie'), str):
22+
raise TypeError(f'Expect that reese84UrlEndpoint will be str.')
23+
return value
24+
25+
def getTaskDict(self) -> Dict[str, Union[str, int, bool]]:
26+
task = {}
27+
task['type'] = self.type
28+
task['class'] = self.captchaClass
29+
task['websiteURL'] = self.websiteUrl
30+
task['metadata'] = self.metadata
31+
if self.userAgent is not None:
32+
task['userAgent'] = self.userAgent
33+
return task
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from typing import Dict, Union
2+
from pydantic import Field, validator
3+
4+
from .proxy_info import ProxyInfo
5+
from .ImpervaCustomTaskRequestBase import ImpervaCustomTaskRequestBase
6+
7+
class ImpervaCustomTaskRequest(ImpervaCustomTaskRequestBase, ProxyInfo):
8+
metadata : Dict[str, str]
9+
10+
@validator('metadata')
11+
def validate_metadata(cls, value):
12+
if value.get('incapsulaScriptBase64') is None:
13+
raise TypeError(f'Expect that incapsulaScriptBase64 will be defined.')
14+
else:
15+
if not isinstance(value.get('incapsulaScriptBase64'), str):
16+
raise TypeError(f'Expect that incapsulaScriptBase64 will be str.')
17+
if value.get('incapsulaSessionCookie') is None:
18+
raise TypeError(f'Expect that incapsulaSessionCookie will be defined.')
19+
else:
20+
if not isinstance(value.get('incapsulaSessionCookie'), str):
21+
raise TypeError(f'Expect that incapsulaSessionCookie will be str.')
22+
if value.get('reese84UrlEndpoint') is not None and not isinstance(value.get('incapsulaSessionCookie'), str):
23+
raise TypeError(f'Expect that reese84UrlEndpoint will be str.')
24+
return value
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+
task['proxyType'] = self.proxyType
33+
task['proxyAddress'] = self.proxyAddress
34+
task['proxyPort'] = self.proxyPort
35+
task['proxyLogin'] = self.proxyLogin
36+
task['proxyPassword'] = self.proxyPassword
37+
if self.userAgent is not None:
38+
task['userAgent'] = self.userAgent
39+
return task
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from typing import Dict, Union
2+
from pydantic import Field
3+
4+
from .CustomTaskRequestBase import CustomTaskRequestBase
5+
6+
class ImpervaCustomTaskRequestBase(CustomTaskRequestBase):
7+
type: str = Field(default='CustomTask')
8+
captchaClass: str = Field(default='Imperva')

capmonstercloud_client/requests/TurnstileRequestBase.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class TurnstileRequestBase(BaseRequest):
1313
userAgent: Optional[str] = Field(default=None)
1414
cloudflareTaskType: Optional[str] = Field(default=None)
1515
htmlPageBase64: Optional[str] = Field(default=None)
16+
apiJsUrl: Optional[str] = Field(default=None)
1617

1718
@validator('cloudflareTaskType')
1819
def validate_cloudflare_task(cls, value):

0 commit comments

Comments
 (0)