diff --git a/pyproject.toml b/pyproject.toml
index c81edbb..7a62260 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ name = "scrapybara"
[tool.poetry]
name = "scrapybara"
-version = "2.3.5"
+version = "2.3.6"
description = ""
readme = "README.md"
authors = []
diff --git a/reference.md b/reference.md
index 90ff350..b2628fa 100644
--- a/reference.md
+++ b/reference.md
@@ -49,6 +49,14 @@ client.start()
-
+**blocked_domains:** `typing.Optional[typing.Sequence[str]]`
+
+
+
+
+
+-
+
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -861,6 +869,62 @@ client.browser.get_cdp_url(
+
+
+
+
+client.browser.get_current_url(...)
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from scrapybara import Scrapybara
+
+client = Scrapybara(
+ api_key="YOUR_API_KEY",
+)
+client.browser.get_current_url(
+ instance_id="instance_id",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**instance_id:** `str`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
diff --git a/src/scrapybara/__init__.py b/src/scrapybara/__init__.py
index a892df8..3787602 100644
--- a/src/scrapybara/__init__.py
+++ b/src/scrapybara/__init__.py
@@ -5,6 +5,7 @@
BashResponse,
BrowserAuthenticateResponse,
BrowserGetCdpUrlResponse,
+ BrowserGetCurrentUrlResponse,
Button,
CellType,
ClickMouseAction,
@@ -67,6 +68,7 @@
"BashResponse",
"BrowserAuthenticateResponse",
"BrowserGetCdpUrlResponse",
+ "BrowserGetCurrentUrlResponse",
"Button",
"CellType",
"ClickMouseAction",
diff --git a/src/scrapybara/base_client.py b/src/scrapybara/base_client.py
index 44799b9..d0edfa8 100644
--- a/src/scrapybara/base_client.py
+++ b/src/scrapybara/base_client.py
@@ -107,6 +107,7 @@ def start(
*,
instance_type: typing.Optional[DeploymentConfigInstanceType] = OMIT,
timeout_hours: typing.Optional[float] = OMIT,
+ blocked_domains: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> GetInstanceResponse:
"""
@@ -116,6 +117,8 @@ def start(
timeout_hours : typing.Optional[float]
+ blocked_domains : typing.Optional[typing.Sequence[str]]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -139,6 +142,7 @@ def start(
json={
"instance_type": instance_type,
"timeout_hours": timeout_hours,
+ "blocked_domains": blocked_domains,
},
headers={
"content-type": "application/json",
@@ -383,6 +387,7 @@ async def start(
*,
instance_type: typing.Optional[DeploymentConfigInstanceType] = OMIT,
timeout_hours: typing.Optional[float] = OMIT,
+ blocked_domains: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> GetInstanceResponse:
"""
@@ -392,6 +397,8 @@ async def start(
timeout_hours : typing.Optional[float]
+ blocked_domains : typing.Optional[typing.Sequence[str]]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -423,6 +430,7 @@ async def main() -> None:
json={
"instance_type": instance_type,
"timeout_hours": timeout_hours,
+ "blocked_domains": blocked_domains,
},
headers={
"content-type": "application/json",
diff --git a/src/scrapybara/browser/client.py b/src/scrapybara/browser/client.py
index b9add3c..1d6fe94 100644
--- a/src/scrapybara/browser/client.py
+++ b/src/scrapybara/browser/client.py
@@ -11,6 +11,7 @@
from json.decoder import JSONDecodeError
from ..core.api_error import ApiError
from ..types.browser_get_cdp_url_response import BrowserGetCdpUrlResponse
+from ..types.browser_get_current_url_response import BrowserGetCurrentUrlResponse
from ..types.save_browser_auth_response import SaveBrowserAuthResponse
from ..types.modify_browser_auth_response import ModifyBrowserAuthResponse
from ..types.browser_authenticate_response import BrowserAuthenticateResponse
@@ -134,6 +135,62 @@ def get_cdp_url(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
+ def get_current_url(
+ self, instance_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ """
+ Parameters
+ ----------
+ instance_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ BrowserGetCurrentUrlResponse
+ Successful Response
+
+ Examples
+ --------
+ from scrapybara import Scrapybara
+
+ client = Scrapybara(
+ api_key="YOUR_API_KEY",
+ )
+ client.browser.get_current_url(
+ instance_id="instance_id",
+ )
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"v1/instance/{jsonable_encoder(instance_id)}/browser/current_url",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return typing.cast(
+ BrowserGetCurrentUrlResponse,
+ parse_obj_as(
+ type_=BrowserGetCurrentUrlResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_=HttpValidationError, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, body=_response.text)
+ raise ApiError(status_code=_response.status_code, body=_response_json)
+
def save_auth(
self,
instance_id: str,
@@ -518,6 +575,70 @@ async def main() -> None:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
+ async def get_current_url(
+ self, instance_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ """
+ Parameters
+ ----------
+ instance_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ BrowserGetCurrentUrlResponse
+ Successful Response
+
+ Examples
+ --------
+ import asyncio
+
+ from scrapybara import AsyncScrapybara
+
+ client = AsyncScrapybara(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.browser.get_current_url(
+ instance_id="instance_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"v1/instance/{jsonable_encoder(instance_id)}/browser/current_url",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return typing.cast(
+ BrowserGetCurrentUrlResponse,
+ parse_obj_as(
+ type_=BrowserGetCurrentUrlResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ if _response.status_code == 422:
+ raise UnprocessableEntityError(
+ typing.cast(
+ HttpValidationError,
+ parse_obj_as(
+ type_=HttpValidationError, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, body=_response.text)
+ raise ApiError(status_code=_response.status_code, body=_response_json)
+
async def save_auth(
self,
instance_id: str,
diff --git a/src/scrapybara/client.py b/src/scrapybara/client.py
index f5aa4ea..7d4d55c 100644
--- a/src/scrapybara/client.py
+++ b/src/scrapybara/client.py
@@ -31,6 +31,7 @@
AuthStateResponse,
BrowserAuthenticateResponse,
BrowserGetCdpUrlResponse,
+ BrowserGetCurrentUrlResponse,
Button,
ClickMouseActionClickType,
ComputerResponse,
@@ -136,6 +137,13 @@ def get_cdp_url(
return self._client.browser.get_cdp_url(
self.instance_id, request_options=request_options
)
+
+ def get_current_url(
+ self, request_options: Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ return self._client.browser.get_current_url(
+ self.instance_id, request_options=request_options
+ )
def save_auth(
self,
@@ -196,6 +204,13 @@ async def get_cdp_url(
return await self._client.browser.get_cdp_url(
self.instance_id, request_options=request_options
)
+
+ async def get_current_url(
+ self, request_options: Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ return await self._client.browser.get_current_url(
+ self.instance_id, request_options=request_options
+ )
async def save_auth(
self,
@@ -1020,6 +1035,13 @@ def get_cdp_url(
return self._client.browser.get_cdp_url(
self.id, request_options=request_options
)
+
+ def get_current_url(
+ self, request_options: Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ return self._client.browser.get_current_url(
+ self.id, request_options=request_options
+ )
def save_auth(
self,
@@ -1460,6 +1482,13 @@ async def get_cdp_url(
return await self._client.browser.get_cdp_url(
self.id, request_options=request_options
)
+
+ async def get_current_url(
+ self, request_options: Optional[RequestOptions] = None
+ ) -> BrowserGetCurrentUrlResponse:
+ return await self._client.browser.get_current_url(
+ self.id, request_options=request_options
+ )
async def save_auth(
self,
@@ -1534,11 +1563,13 @@ def start_ubuntu(
self,
*,
timeout_hours: Optional[float] = OMIT,
+ blocked_domains: Optional[Sequence[str]] = OMIT,
request_options: Optional[RequestOptions] = None,
) -> UbuntuInstance:
response = self._base_client.start(
instance_type="ubuntu",
timeout_hours=timeout_hours,
+ blocked_domains=blocked_domains,
request_options=request_options,
)
return UbuntuInstance(
@@ -1552,11 +1583,13 @@ def start_browser(
self,
*,
timeout_hours: Optional[float] = OMIT,
+ blocked_domains: Optional[Sequence[str]] = OMIT,
request_options: Optional[RequestOptions] = None,
) -> BrowserInstance:
response = self._base_client.start(
instance_type="browser",
timeout_hours=timeout_hours,
+ blocked_domains=blocked_domains,
request_options=request_options,
)
return BrowserInstance(
@@ -1946,11 +1979,13 @@ async def start_ubuntu(
self,
*,
timeout_hours: Optional[float] = OMIT,
+ blocked_domains: Optional[Sequence[str]] = OMIT,
request_options: Optional[RequestOptions] = None,
) -> AsyncUbuntuInstance:
response = await self._base_client.start(
instance_type="ubuntu",
timeout_hours=timeout_hours,
+ blocked_domains=blocked_domains,
request_options=request_options,
)
return AsyncUbuntuInstance(
@@ -1964,11 +1999,13 @@ async def start_browser(
self,
*,
timeout_hours: Optional[float] = OMIT,
+ blocked_domains: Optional[Sequence[str]] = OMIT,
request_options: Optional[RequestOptions] = None,
) -> AsyncBrowserInstance:
response = await self._base_client.start(
instance_type="browser",
timeout_hours=timeout_hours,
+ blocked_domains=blocked_domains,
request_options=request_options,
)
return AsyncBrowserInstance(
diff --git a/src/scrapybara/core/client_wrapper.py b/src/scrapybara/core/client_wrapper.py
index 8831014..2579bf6 100644
--- a/src/scrapybara/core/client_wrapper.py
+++ b/src/scrapybara/core/client_wrapper.py
@@ -16,7 +16,7 @@ def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = {
"X-Fern-Language": "Python",
"X-Fern-SDK-Name": "scrapybara",
- "X-Fern-SDK-Version": "2.3.5",
+ "X-Fern-SDK-Version": "2.3.6",
}
headers["x-api-key"] = self.api_key
return headers
diff --git a/src/scrapybara/types/__init__.py b/src/scrapybara/types/__init__.py
index 5179743..93d8c21 100644
--- a/src/scrapybara/types/__init__.py
+++ b/src/scrapybara/types/__init__.py
@@ -3,6 +3,7 @@
from .bash_response import BashResponse
from .browser_authenticate_response import BrowserAuthenticateResponse
from .browser_get_cdp_url_response import BrowserGetCdpUrlResponse
+from .browser_get_current_url_response import BrowserGetCurrentUrlResponse
from .button import Button
from .cell_type import CellType
from .click_mouse_action import ClickMouseAction
@@ -78,6 +79,7 @@
"BashResponse",
"BrowserAuthenticateResponse",
"BrowserGetCdpUrlResponse",
+ "BrowserGetCurrentUrlResponse",
"Button",
"CellType",
"ClickMouseAction",
diff --git a/src/scrapybara/types/browser_get_current_url_response.py b/src/scrapybara/types/browser_get_current_url_response.py
new file mode 100644
index 0000000..3aa6a83
--- /dev/null
+++ b/src/scrapybara/types/browser_get_current_url_response.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from ..core.pydantic_utilities import UniversalBaseModel
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+import typing
+import pydantic
+
+
+class BrowserGetCurrentUrlResponse(UniversalBaseModel):
+ current_url: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow