|
1 | 1 | from datetime import datetime |
2 | | -from typing import Any, List, Literal, Optional, Union, Dict |
| 2 | +from typing import Any, Dict, List, Literal, Optional, Union |
3 | 3 |
|
4 | 4 | from pydantic import BaseModel, ConfigDict, Field, field_validator |
5 | 5 |
|
|
16 | 16 | ) |
17 | 17 |
|
18 | 18 | SessionStatus = Literal["active", "closed", "error"] |
| 19 | +CaptchaSolverType = Literal["visual"] |
| 20 | +CaptchaEvaluationType = Literal[ |
| 21 | + "turnstile", |
| 22 | + "cloudflare-challenge", |
| 23 | + "aliexpress", |
| 24 | + "recaptcha", |
| 25 | + "recaptcha-visual", |
| 26 | + "amazon", |
| 27 | +] |
| 28 | +CaptchaEvaluationTarget = CaptchaEvaluationType |
19 | 29 |
|
20 | 30 |
|
21 | 31 | class BasicResponse(BaseModel): |
@@ -134,6 +144,7 @@ class SessionLaunchState(BaseModel): |
134 | 144 | ) |
135 | 145 | enable_log_capture: Optional[bool] = Field(default=None, alias="enableLogCapture") |
136 | 146 | accept_cookies: Optional[bool] = Field(default=None, alias="acceptCookies") |
| 147 | + solver_type: Optional[CaptchaSolverType] = Field(default=None, alias="solverType") |
137 | 148 | profile: Optional[SessionProfile] = Field(default=None, alias="profile") |
138 | 149 | static_ip_id: Optional[str] = Field(default=None, alias="staticIpId") |
139 | 150 | save_downloads: Optional[bool] = Field(default=None, alias="saveDownloads") |
@@ -303,6 +314,75 @@ class ImageCaptchaParam(BaseModel): |
303 | 314 | input_selector: str = Field(serialization_alias="inputSelector") |
304 | 315 |
|
305 | 316 |
|
| 317 | +class CaptchaEvaluationParams(BaseModel): |
| 318 | + """ |
| 319 | + Parameters for manually evaluating captchas in a running session. |
| 320 | + """ |
| 321 | + |
| 322 | + model_config = ConfigDict( |
| 323 | + populate_by_alias=True, |
| 324 | + ) |
| 325 | + |
| 326 | + captcha: Optional[CaptchaEvaluationTarget] = Field(default=None) |
| 327 | + captcha_type: Optional[CaptchaEvaluationTarget] = Field( |
| 328 | + default=None, serialization_alias="captchaType" |
| 329 | + ) |
| 330 | + text: Optional[CaptchaEvaluationTarget] = Field(default=None) |
| 331 | + iterations: Optional[int] = Field(default=None) |
| 332 | + max_iterations: Optional[int] = Field( |
| 333 | + default=None, serialization_alias="maxIterations" |
| 334 | + ) |
| 335 | + solver_type: Optional[CaptchaSolverType] = Field( |
| 336 | + default=None, serialization_alias="solverType" |
| 337 | + ) |
| 338 | + image_captcha_params: Optional[List[ImageCaptchaParam]] = Field( |
| 339 | + default=None, serialization_alias="imageCaptchaParams" |
| 340 | + ) |
| 341 | + use_gemini_captcha_solver: Optional[bool] = Field( |
| 342 | + default=None, serialization_alias="useGeminiCaptchaSolver" |
| 343 | + ) |
| 344 | + use_ultra_stealth: Optional[bool] = Field( |
| 345 | + default=None, serialization_alias="useUltraStealth" |
| 346 | + ) |
| 347 | + |
| 348 | + |
| 349 | +class CaptchaEvaluationPageResult(BaseModel): |
| 350 | + """ |
| 351 | + Result of manually evaluating captchas on a single page target. |
| 352 | + """ |
| 353 | + |
| 354 | + model_config = ConfigDict( |
| 355 | + populate_by_alias=True, |
| 356 | + ) |
| 357 | + |
| 358 | + url: str = Field(alias="url") |
| 359 | + target_id: Optional[str] = Field(default=None, alias="targetId") |
| 360 | + iterations_run: int = Field(alias="iterationsRun") |
| 361 | + solved: bool = Field(alias="solved") |
| 362 | + solved_captchas: List[CaptchaEvaluationType] = Field(alias="solvedCaptchas") |
| 363 | + checked_captchas: List[CaptchaEvaluationType] = Field(alias="checkedCaptchas") |
| 364 | + captcha_solved_counts: Dict[str, int] = Field(alias="captchaSolvedCounts") |
| 365 | + last_solve_time: Dict[str, float] = Field(alias="lastSolveTime") |
| 366 | + |
| 367 | + |
| 368 | +class CaptchaEvaluationResponse(BaseModel): |
| 369 | + """ |
| 370 | + Response from manually evaluating captchas in a running session. |
| 371 | + """ |
| 372 | + |
| 373 | + model_config = ConfigDict( |
| 374 | + populate_by_alias=True, |
| 375 | + ) |
| 376 | + |
| 377 | + success: bool = Field(alias="success") |
| 378 | + captcha: Optional[CaptchaEvaluationType] = Field(default=None, alias="captcha") |
| 379 | + iterations_requested: int = Field(alias="iterationsRequested") |
| 380 | + iterations_run: int = Field(alias="iterationsRun") |
| 381 | + solved: bool = Field(alias="solved") |
| 382 | + solved_captchas: List[CaptchaEvaluationType] = Field(alias="solvedCaptchas") |
| 383 | + pages: List[CaptchaEvaluationPageResult] = Field(alias="pages") |
| 384 | + |
| 385 | + |
306 | 386 | class CreateSessionParams(BaseModel): |
307 | 387 | """ |
308 | 388 | Parameters for creating a new browser session. |
@@ -337,6 +417,9 @@ class CreateSessionParams(BaseModel): |
337 | 417 | locales: List[ISO639_1] = Field(default=["en"]) |
338 | 418 | screen: Optional[ScreenConfig] = Field(default=None) |
339 | 419 | solve_captchas: bool = Field(default=False, serialization_alias="solveCaptchas") |
| 420 | + solver_type: Optional[CaptchaSolverType] = Field( |
| 421 | + default=None, serialization_alias="solverType" |
| 422 | + ) |
340 | 423 | adblock: bool = Field(default=False, serialization_alias="adblock") |
341 | 424 | trackers: bool = Field(default=False, serialization_alias="trackers") |
342 | 425 | annoyances: bool = Field(default=False, serialization_alias="annoyances") |
@@ -480,6 +563,35 @@ class UploadFileResponse(BaseModel): |
480 | 563 | original_name: Optional[str] = Field(default=None, alias="originalName") |
481 | 564 |
|
482 | 565 |
|
| 566 | +class UpdateSessionSolveCaptchasParams(BaseModel): |
| 567 | + """ |
| 568 | + Parameters for starting automatic captcha solving in a running session. |
| 569 | + """ |
| 570 | + |
| 571 | + model_config = ConfigDict( |
| 572 | + populate_by_alias=True, |
| 573 | + ) |
| 574 | + |
| 575 | + solver_type: Optional[CaptchaSolverType] = Field( |
| 576 | + default=None, |
| 577 | + serialization_alias="solverType", |
| 578 | + ) |
| 579 | + |
| 580 | + |
| 581 | +class UpdateSessionSolveCaptchasResponse(BasicResponse): |
| 582 | + """ |
| 583 | + Response from updating automatic captcha solving in a running session. |
| 584 | + """ |
| 585 | + |
| 586 | + model_config = ConfigDict( |
| 587 | + populate_by_alias=True, |
| 588 | + ) |
| 589 | + |
| 590 | + solve_captchas: Optional[bool] = Field(default=None, alias="solveCaptchas") |
| 591 | + session_id: Optional[str] = Field(default=None, alias="sessionId") |
| 592 | + telemetry_ready: Optional[bool] = Field(default=None, alias="telemetryReady") |
| 593 | + |
| 594 | + |
483 | 595 | class SessionEventLog(BaseModel): |
484 | 596 | model_config = ConfigDict( |
485 | 597 | populate_by_alias=True, |
|
0 commit comments