hyperbrowser 0.90.8__tar.gz → 0.91.1__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.
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/PKG-INFO +7 -1
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/README.md +6 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/session.py +51 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/session.py +51 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/__init__.py +17 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/consts.py +1 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/session.py +113 -1
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/transport/async_transport.py +11 -4
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/transport/base.py +7 -1
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/transport/sync.py +11 -4
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/pyproject.toml +1 -1
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/LICENSE +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/async_client.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/base.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/browser_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/cua.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/hyper_agent.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/computer_action.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandbox.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandboxes/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_files.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_processes.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_terminal.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_transport.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/team.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/volume.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/web/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/web/batch_fetch.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/web/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sandboxes/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sandboxes/shared.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/browser_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/cua.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/hyper_agent.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/computer_action.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandbox.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandboxes/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_files.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_processes.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_terminal.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_transport.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/team.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/volume.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/web/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/web/batch_fetch.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/web/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/sync.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/config.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/exceptions.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/_parsers.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/browser_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/claude_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/cua.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/gemini_computer_use.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/hyper_agent.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/computer_action.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/extension.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/extract.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/profile.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/sandbox.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/scrape.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/team.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/volume.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/batch_fetch.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/branding.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/common.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/crawl.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/fetch.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/web/search.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/sandbox_common.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/tools/__init__.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/tools/anthropic.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/tools/openai.py +0 -0
- {hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/tools/schema.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hyperbrowser
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.91.1
|
|
4
4
|
Summary: Python SDK for hyperbrowser
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -48,6 +48,12 @@ Both the sync and async client follow similar configuration params
|
|
|
48
48
|
### API Key
|
|
49
49
|
The API key can be configured either from the constructor arguments or environment variables using `HYPERBROWSER_API_KEY`
|
|
50
50
|
|
|
51
|
+
If no API key is provided, the client falls back to a saved OAuth session created by `hx auth login`. By default it reads `~/.hx_config/auth/default.json`, or `~/.hx_config/auth/<profile>.json` when `HYPERBROWSER_PROFILE` or `ClientConfig(profile=...)` is set.
|
|
52
|
+
|
|
53
|
+
Profile names must match `^[A-Za-z0-9._-]+$`.
|
|
54
|
+
|
|
55
|
+
`base_url` and `HYPERBROWSER_BASE_URL` accept either `https://host` or `https://host/api`. The client normalizes both to the same control-plane base URL.
|
|
56
|
+
|
|
51
57
|
## Usage
|
|
52
58
|
|
|
53
59
|
### Async
|
|
@@ -22,6 +22,12 @@ Both the sync and async client follow similar configuration params
|
|
|
22
22
|
### API Key
|
|
23
23
|
The API key can be configured either from the constructor arguments or environment variables using `HYPERBROWSER_API_KEY`
|
|
24
24
|
|
|
25
|
+
If no API key is provided, the client falls back to a saved OAuth session created by `hx auth login`. By default it reads `~/.hx_config/auth/default.json`, or `~/.hx_config/auth/<profile>.json` when `HYPERBROWSER_PROFILE` or `ClientConfig(profile=...)` is set.
|
|
26
|
+
|
|
27
|
+
Profile names must match `^[A-Za-z0-9._-]+$`.
|
|
28
|
+
|
|
29
|
+
`base_url` and `HYPERBROWSER_BASE_URL` accept either `https://host` or `https://host/api`. The client normalizes both to the same control-plane base URL.
|
|
30
|
+
|
|
25
31
|
## Usage
|
|
26
32
|
|
|
27
33
|
### Async
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/session.py
RENAMED
|
@@ -2,6 +2,8 @@ from typing import List, Optional, Union, IO, overload
|
|
|
2
2
|
import warnings
|
|
3
3
|
from ....models.session import (
|
|
4
4
|
BasicResponse,
|
|
5
|
+
CaptchaEvaluationParams,
|
|
6
|
+
CaptchaEvaluationResponse,
|
|
5
7
|
CreateSessionParams,
|
|
6
8
|
GetSessionDownloadsUrlResponse,
|
|
7
9
|
GetSessionRecordingUrlResponse,
|
|
@@ -17,9 +19,13 @@ from ....models.session import (
|
|
|
17
19
|
UpdateSessionProfileParams,
|
|
18
20
|
UpdateSessionProxyParams,
|
|
19
21
|
UpdateSessionScreenParams,
|
|
22
|
+
UpdateSessionSolveCaptchasParams,
|
|
23
|
+
UpdateSessionSolveCaptchasResponse,
|
|
20
24
|
SessionGetParams,
|
|
21
25
|
)
|
|
22
26
|
|
|
27
|
+
CAPTCHA_EVALUATION_REQUEST_TIMEOUT_SECONDS = 185
|
|
28
|
+
|
|
23
29
|
|
|
24
30
|
class SessionEventLogsManager:
|
|
25
31
|
def __init__(self, client):
|
|
@@ -70,6 +76,21 @@ class SessionManager:
|
|
|
70
76
|
)
|
|
71
77
|
return BasicResponse(**response.data)
|
|
72
78
|
|
|
79
|
+
async def evaluate_captcha(
|
|
80
|
+
self,
|
|
81
|
+
id: str,
|
|
82
|
+
params: Optional[CaptchaEvaluationParams] = None,
|
|
83
|
+
) -> CaptchaEvaluationResponse:
|
|
84
|
+
params_obj = params or CaptchaEvaluationParams()
|
|
85
|
+
response = await self._client.transport.post(
|
|
86
|
+
self._client._build_url(f"/session/{id}/captcha/evaluate"),
|
|
87
|
+
data=params_obj.model_dump(exclude_none=True, by_alias=True),
|
|
88
|
+
timeout=max(
|
|
89
|
+
self._client.timeout, CAPTCHA_EVALUATION_REQUEST_TIMEOUT_SECONDS
|
|
90
|
+
),
|
|
91
|
+
)
|
|
92
|
+
return CaptchaEvaluationResponse(**response.data)
|
|
93
|
+
|
|
73
94
|
async def list(
|
|
74
95
|
self, params: SessionListParams = SessionListParams()
|
|
75
96
|
) -> SessionListResponse:
|
|
@@ -213,6 +234,36 @@ class SessionManager:
|
|
|
213
234
|
)
|
|
214
235
|
return BasicResponse(**response.data)
|
|
215
236
|
|
|
237
|
+
async def start_captcha_solving(
|
|
238
|
+
self,
|
|
239
|
+
id: str,
|
|
240
|
+
params: Optional[UpdateSessionSolveCaptchasParams] = None,
|
|
241
|
+
) -> UpdateSessionSolveCaptchasResponse:
|
|
242
|
+
params_obj = params or UpdateSessionSolveCaptchasParams()
|
|
243
|
+
response = await self._client.transport.put(
|
|
244
|
+
self._client._build_url(f"/session/{id}/update"),
|
|
245
|
+
data={
|
|
246
|
+
"type": "solveCaptchas",
|
|
247
|
+
"params": {
|
|
248
|
+
"enabled": True,
|
|
249
|
+
**params_obj.model_dump(exclude_none=True, by_alias=True),
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
)
|
|
253
|
+
return UpdateSessionSolveCaptchasResponse(**response.data)
|
|
254
|
+
|
|
255
|
+
async def stop_captcha_solving(self, id: str) -> UpdateSessionSolveCaptchasResponse:
|
|
256
|
+
response = await self._client.transport.put(
|
|
257
|
+
self._client._build_url(f"/session/{id}/update"),
|
|
258
|
+
data={
|
|
259
|
+
"type": "solveCaptchas",
|
|
260
|
+
"params": {
|
|
261
|
+
"enabled": False,
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
)
|
|
265
|
+
return UpdateSessionSolveCaptchasResponse(**response.data)
|
|
266
|
+
|
|
216
267
|
def _warn_update_profile_params_boolean_deprecated(self) -> None:
|
|
217
268
|
if SessionManager._has_warned_update_profile_params_boolean_deprecated:
|
|
218
269
|
return
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/session.py
RENAMED
|
@@ -2,6 +2,8 @@ from typing import List, Optional, Union, IO, overload
|
|
|
2
2
|
import warnings
|
|
3
3
|
from ....models.session import (
|
|
4
4
|
BasicResponse,
|
|
5
|
+
CaptchaEvaluationParams,
|
|
6
|
+
CaptchaEvaluationResponse,
|
|
5
7
|
CreateSessionParams,
|
|
6
8
|
GetSessionDownloadsUrlResponse,
|
|
7
9
|
GetSessionRecordingUrlResponse,
|
|
@@ -16,9 +18,13 @@ from ....models.session import (
|
|
|
16
18
|
UpdateSessionProfileParams,
|
|
17
19
|
UpdateSessionProxyParams,
|
|
18
20
|
UpdateSessionScreenParams,
|
|
21
|
+
UpdateSessionSolveCaptchasParams,
|
|
22
|
+
UpdateSessionSolveCaptchasResponse,
|
|
19
23
|
SessionGetParams,
|
|
20
24
|
)
|
|
21
25
|
|
|
26
|
+
CAPTCHA_EVALUATION_REQUEST_TIMEOUT_SECONDS = 185
|
|
27
|
+
|
|
22
28
|
|
|
23
29
|
class SessionEventLogsManager:
|
|
24
30
|
def __init__(self, client):
|
|
@@ -69,6 +75,21 @@ class SessionManager:
|
|
|
69
75
|
)
|
|
70
76
|
return BasicResponse(**response.data)
|
|
71
77
|
|
|
78
|
+
def evaluate_captcha(
|
|
79
|
+
self,
|
|
80
|
+
id: str,
|
|
81
|
+
params: Optional[CaptchaEvaluationParams] = None,
|
|
82
|
+
) -> CaptchaEvaluationResponse:
|
|
83
|
+
params_obj = params or CaptchaEvaluationParams()
|
|
84
|
+
response = self._client.transport.post(
|
|
85
|
+
self._client._build_url(f"/session/{id}/captcha/evaluate"),
|
|
86
|
+
data=params_obj.model_dump(exclude_none=True, by_alias=True),
|
|
87
|
+
timeout=max(
|
|
88
|
+
self._client.timeout, CAPTCHA_EVALUATION_REQUEST_TIMEOUT_SECONDS
|
|
89
|
+
),
|
|
90
|
+
)
|
|
91
|
+
return CaptchaEvaluationResponse(**response.data)
|
|
92
|
+
|
|
72
93
|
def list(
|
|
73
94
|
self, params: SessionListParams = SessionListParams()
|
|
74
95
|
) -> SessionListResponse:
|
|
@@ -208,6 +229,36 @@ class SessionManager:
|
|
|
208
229
|
)
|
|
209
230
|
return BasicResponse(**response.data)
|
|
210
231
|
|
|
232
|
+
def start_captcha_solving(
|
|
233
|
+
self,
|
|
234
|
+
id: str,
|
|
235
|
+
params: Optional[UpdateSessionSolveCaptchasParams] = None,
|
|
236
|
+
) -> UpdateSessionSolveCaptchasResponse:
|
|
237
|
+
params_obj = params or UpdateSessionSolveCaptchasParams()
|
|
238
|
+
response = self._client.transport.put(
|
|
239
|
+
self._client._build_url(f"/session/{id}/update"),
|
|
240
|
+
data={
|
|
241
|
+
"type": "solveCaptchas",
|
|
242
|
+
"params": {
|
|
243
|
+
"enabled": True,
|
|
244
|
+
**params_obj.model_dump(exclude_none=True, by_alias=True),
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
)
|
|
248
|
+
return UpdateSessionSolveCaptchasResponse(**response.data)
|
|
249
|
+
|
|
250
|
+
def stop_captcha_solving(self, id: str) -> UpdateSessionSolveCaptchasResponse:
|
|
251
|
+
response = self._client.transport.put(
|
|
252
|
+
self._client._build_url(f"/session/{id}/update"),
|
|
253
|
+
data={
|
|
254
|
+
"type": "solveCaptchas",
|
|
255
|
+
"params": {
|
|
256
|
+
"enabled": False,
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
)
|
|
260
|
+
return UpdateSessionSolveCaptchasResponse(**response.data)
|
|
261
|
+
|
|
211
262
|
def _warn_update_profile_params_boolean_deprecated(self) -> None:
|
|
212
263
|
if SessionManager._has_warned_update_profile_params_boolean_deprecated:
|
|
213
264
|
return
|
|
@@ -262,10 +262,18 @@ from .session import (
|
|
|
262
262
|
SessionLaunchState,
|
|
263
263
|
UploadFileResponse,
|
|
264
264
|
ImageCaptchaParam,
|
|
265
|
+
CaptchaSolverType,
|
|
266
|
+
CaptchaEvaluationPageResult,
|
|
267
|
+
CaptchaEvaluationParams,
|
|
268
|
+
CaptchaEvaluationResponse,
|
|
269
|
+
CaptchaEvaluationTarget,
|
|
270
|
+
CaptchaEvaluationType,
|
|
265
271
|
UpdateSessionProfileParams,
|
|
266
272
|
UpdateSessionProxyLocationParams,
|
|
267
273
|
UpdateSessionProxyParams,
|
|
268
274
|
UpdateSessionScreenParams,
|
|
275
|
+
UpdateSessionSolveCaptchasParams,
|
|
276
|
+
UpdateSessionSolveCaptchasResponse,
|
|
269
277
|
)
|
|
270
278
|
from .sandbox import (
|
|
271
279
|
SandboxStatus,
|
|
@@ -524,10 +532,18 @@ __all__ = [
|
|
|
524
532
|
"SessionLaunchState",
|
|
525
533
|
"UploadFileResponse",
|
|
526
534
|
"ImageCaptchaParam",
|
|
535
|
+
"CaptchaSolverType",
|
|
536
|
+
"CaptchaEvaluationPageResult",
|
|
537
|
+
"CaptchaEvaluationParams",
|
|
538
|
+
"CaptchaEvaluationResponse",
|
|
539
|
+
"CaptchaEvaluationTarget",
|
|
540
|
+
"CaptchaEvaluationType",
|
|
527
541
|
"UpdateSessionProfileParams",
|
|
528
542
|
"UpdateSessionProxyLocationParams",
|
|
529
543
|
"UpdateSessionProxyParams",
|
|
530
544
|
"UpdateSessionScreenParams",
|
|
545
|
+
"UpdateSessionSolveCaptchasParams",
|
|
546
|
+
"UpdateSessionSolveCaptchasResponse",
|
|
531
547
|
# sandbox
|
|
532
548
|
"SandboxStatus",
|
|
533
549
|
"SandboxRegion",
|
|
@@ -551,6 +567,7 @@ __all__ = [
|
|
|
551
567
|
"SandboxMemorySnapshotResult",
|
|
552
568
|
"SandboxExposeParams",
|
|
553
569
|
"SandboxExposeResult",
|
|
570
|
+
"SandboxUnexposeResult",
|
|
554
571
|
"SandboxProcessStatus",
|
|
555
572
|
"SandboxExecParams",
|
|
556
573
|
"SandboxProcessSummary",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from typing import Any, List, Literal, Optional, Union
|
|
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,6 +16,16 @@ from hyperbrowser.models.consts import (
|
|
|
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,
|
|
@@ -55,7 +55,7 @@ class AsyncTransport(TransportStrategy):
|
|
|
55
55
|
try:
|
|
56
56
|
error_data = response.json()
|
|
57
57
|
message = error_data.get("message") or error_data.get("error") or str(e)
|
|
58
|
-
except:
|
|
58
|
+
except Exception:
|
|
59
59
|
message = str(e)
|
|
60
60
|
raise HyperbrowserError(
|
|
61
61
|
message,
|
|
@@ -67,13 +67,20 @@ class AsyncTransport(TransportStrategy):
|
|
|
67
67
|
raise HyperbrowserError("Request failed", original_error=e)
|
|
68
68
|
|
|
69
69
|
async def post(
|
|
70
|
-
self,
|
|
70
|
+
self,
|
|
71
|
+
url: str,
|
|
72
|
+
data: Optional[dict] = None,
|
|
73
|
+
files: Optional[dict] = None,
|
|
74
|
+
timeout: Optional[float] = None,
|
|
71
75
|
) -> APIResponse:
|
|
72
76
|
try:
|
|
77
|
+
kwargs = {}
|
|
78
|
+
if timeout is not None:
|
|
79
|
+
kwargs["timeout"] = timeout
|
|
73
80
|
if files:
|
|
74
|
-
response = await self.client.post(url, data=data, files=files)
|
|
81
|
+
response = await self.client.post(url, data=data, files=files, **kwargs)
|
|
75
82
|
else:
|
|
76
|
-
response = await self.client.post(url, json=data)
|
|
83
|
+
response = await self.client.post(url, json=data, **kwargs)
|
|
77
84
|
return await self._handle_response(response)
|
|
78
85
|
except HyperbrowserError:
|
|
79
86
|
raise
|
|
@@ -45,7 +45,13 @@ class TransportStrategy(ABC):
|
|
|
45
45
|
pass
|
|
46
46
|
|
|
47
47
|
@abstractmethod
|
|
48
|
-
def post(
|
|
48
|
+
def post(
|
|
49
|
+
self,
|
|
50
|
+
url: str,
|
|
51
|
+
data: Optional[dict] = None,
|
|
52
|
+
files: Optional[dict] = None,
|
|
53
|
+
timeout: Optional[float] = None,
|
|
54
|
+
) -> APIResponse:
|
|
49
55
|
pass
|
|
50
56
|
|
|
51
57
|
@abstractmethod
|
|
@@ -31,7 +31,7 @@ class SyncTransport(TransportStrategy):
|
|
|
31
31
|
try:
|
|
32
32
|
error_data = response.json()
|
|
33
33
|
message = error_data.get("message") or error_data.get("error") or str(e)
|
|
34
|
-
except:
|
|
34
|
+
except Exception:
|
|
35
35
|
message = str(e)
|
|
36
36
|
raise HyperbrowserError(
|
|
37
37
|
message,
|
|
@@ -46,13 +46,20 @@ class SyncTransport(TransportStrategy):
|
|
|
46
46
|
self.client.close()
|
|
47
47
|
|
|
48
48
|
def post(
|
|
49
|
-
self,
|
|
49
|
+
self,
|
|
50
|
+
url: str,
|
|
51
|
+
data: Optional[dict] = None,
|
|
52
|
+
files: Optional[dict] = None,
|
|
53
|
+
timeout: Optional[float] = None,
|
|
50
54
|
) -> APIResponse:
|
|
51
55
|
try:
|
|
56
|
+
kwargs = {}
|
|
57
|
+
if timeout is not None:
|
|
58
|
+
kwargs["timeout"] = timeout
|
|
52
59
|
if files:
|
|
53
|
-
response = self.client.post(url, data=data, files=files)
|
|
60
|
+
response = self.client.post(url, data=data, files=files, **kwargs)
|
|
54
61
|
else:
|
|
55
|
-
response = self.client.post(url, json=data)
|
|
62
|
+
response = self.client.post(url, json=data, **kwargs)
|
|
56
63
|
return self._handle_response(response)
|
|
57
64
|
except HyperbrowserError:
|
|
58
65
|
raise
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/agents/cua.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/crawl.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/extension.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/extract.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/profile.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/sandbox.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/scrape.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/team.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/volume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/async_manager/web/crawl.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sandboxes/__init__.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sandboxes/shared.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/agents/cua.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/crawl.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/extension.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/extract.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/profile.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/sandbox.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/scrape.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/team.py
RENAMED
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/volume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/client/managers/sync_manager/web/crawl.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/claude_computer_use.py
RENAMED
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.90.8 → hyperbrowser-0.91.1}/hyperbrowser/models/agents/gemini_computer_use.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|