From 8a4c5ffa3bccd79bbf0a5d58cbf68e08424679f4 Mon Sep 17 00:00:00 2001 From: Karim shoair Date: Mon, 30 Mar 2026 03:06:58 +0200 Subject: [PATCH] feat(browsers): Add a new option to set browser path Solves #202 --- scrapling/engines/_browsers/_base.py | 2 ++ scrapling/engines/_browsers/_types.py | 1 + scrapling/engines/_browsers/_validators.py | 6 ++++++ 3 files changed, 9 insertions(+) diff --git a/scrapling/engines/_browsers/_base.py b/scrapling/engines/_browsers/_base.py index fa95419..16a995d 100644 --- a/scrapling/engines/_browsers/_base.py +++ b/scrapling/engines/_browsers/_base.py @@ -458,6 +458,8 @@ class BaseSessionMixin: "channel": "chrome" if config.real_chrome else "chromium", } ) + if config.executable_path: + self._browser_options["executable_path"] = config.executable_path self._user_data_dir = config.user_data_dir else: diff --git a/scrapling/engines/_browsers/_types.py b/scrapling/engines/_browsers/_types.py index f4f31cd..6ab40b9 100644 --- a/scrapling/engines/_browsers/_types.py +++ b/scrapling/engines/_browsers/_types.py @@ -90,6 +90,7 @@ class PlaywrightSession(TypedDict, total=False): retries: int retry_delay: int | float capture_xhr: str | None + executable_path: Optional[str] class PlaywrightFetchParams(TypedDict, total=False): diff --git a/scrapling/engines/_browsers/_validators.py b/scrapling/engines/_browsers/_validators.py index dfe7310..69b3766 100644 --- a/scrapling/engines/_browsers/_validators.py +++ b/scrapling/engines/_browsers/_validators.py @@ -88,6 +88,7 @@ class PlaywrightConfig(Struct, kw_only=True, frozen=False, weakref=True): retries: RetriesCount = 3 retry_delay: Seconds = 1 capture_xhr: str | None = None + executable_path: Optional[str] = None def __post_init__(self): # pragma: no cover """Custom validation after msgspec validation""" @@ -121,6 +122,11 @@ class PlaywrightConfig(Struct, kw_only=True, frozen=False, weakref=True): if validation_msg: raise ValueError(validation_msg) + if self.executable_path is not None: + validation_msg = _is_invalid_file_path(self.executable_path) + if validation_msg: + raise ValueError(validation_msg) + class StealthConfig(PlaywrightConfig, kw_only=True, frozen=False, weakref=True): allow_webgl: bool = True