From d46d79e9e335313839e9229c1d6ac6a08f6a4962 Mon Sep 17 00:00:00 2001 From: LawyZheng Date: Tue, 12 Aug 2025 00:30:38 +0800 Subject: [PATCH] fix browser session bug (#3161) --- skyvern/webeye/browser_manager.py | 14 ++++++++++++-- skyvern/webeye/persistent_sessions_manager.py | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/skyvern/webeye/browser_manager.py b/skyvern/webeye/browser_manager.py index a88dcc06..03463fa2 100644 --- a/skyvern/webeye/browser_manager.py +++ b/skyvern/webeye/browser_manager.py @@ -92,7 +92,6 @@ class BrowserManager: "Browser state not found in persistent sessions manager", browser_session_id=browser_session_id, ) - raise MissingBrowserState(task_id=task.task_id) else: if task.organization_id: LOG.info("User to occupy browser session here", browser_session_id=browser_session_id) @@ -114,6 +113,12 @@ class BrowserManager: extra_http_headers=task.extra_http_headers, ) + if browser_session_id: + await app.PERSISTENT_SESSIONS_MANAGER.set_browser_state( + browser_session_id, + browser_state, + ) + self.pages[task.task_id] = browser_state if task.workflow_run_id: self.pages[task.workflow_run_id] = browser_state @@ -160,7 +165,6 @@ class BrowserManager: LOG.warning( "Browser state not found in persistent sessions manager", browser_session_id=browser_session_id ) - raise MissingBrowserState(workflow_run_id=workflow_run.workflow_run_id) else: LOG.info("Used to occupy browser session here", browser_session_id=browser_session_id) page = await browser_state.get_working_page() @@ -183,6 +187,12 @@ class BrowserManager: extra_http_headers=workflow_run.extra_http_headers, ) + if browser_session_id: + await app.PERSISTENT_SESSIONS_MANAGER.set_browser_state( + browser_session_id, + browser_state, + ) + self.pages[workflow_run_id] = browser_state if parent_workflow_run_id: self.pages[parent_workflow_run_id] = browser_state diff --git a/skyvern/webeye/persistent_sessions_manager.py b/skyvern/webeye/persistent_sessions_manager.py index 1cda1968..a0ad09ef 100644 --- a/skyvern/webeye/persistent_sessions_manager.py +++ b/skyvern/webeye/persistent_sessions_manager.py @@ -223,6 +223,10 @@ class PersistentSessionsManager: browser_session = self._browser_sessions.get(session_id) return browser_session.browser_state if browser_session else None + async def set_browser_state(self, session_id: str, browser_state: BrowserState) -> None: + browser_session = BrowserSession(browser_state=browser_state) + self._browser_sessions[session_id] = browser_session + async def get_session(self, session_id: str, organization_id: str) -> PersistentBrowserSession | None: """Get a specific browser session by session ID.""" return await self.database.get_persistent_browser_session(session_id, organization_id)