From ce19473536a7ff6bc37feda74a0dae96be80c2b2 Mon Sep 17 00:00:00 2001 From: michaelxer Date: Thu, 11 Jun 2026 01:44:00 +0700 Subject: [PATCH] fix: wrap Playwright cleanup in try-except to prevent masking original errors page.close() and browser.close() can raise if the remote Playwright connection is already gone. Catch and log these at debug level so cleanup failures don't mask the original loader error. --- backend/open_webui/retrieval/web/utils.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/retrieval/web/utils.py b/backend/open_webui/retrieval/web/utils.py index 1487aa3c28..68a33f05be 100644 --- a/backend/open_webui/retrieval/web/utils.py +++ b/backend/open_webui/retrieval/web/utils.py @@ -588,9 +588,15 @@ class SafePlaywrightURLLoader(PlaywrightURLLoader, RateLimitMixin, URLProcessing raise e finally: if page: - page.close() + try: + page.close() + except Exception as e: + log.debug(f"Error closing Playwright page for {url}: {e}", exc_info=True) finally: - browser.close() + try: + browser.close() + except Exception as e: + log.debug(f"Error closing Playwright browser: {e}", exc_info=True) async def alazy_load(self) -> AsyncIterator[Document]: """Safely load URLs asynchronously with support for remote browser.""" @@ -624,9 +630,15 @@ class SafePlaywrightURLLoader(PlaywrightURLLoader, RateLimitMixin, URLProcessing raise e finally: if page: - await page.close() + try: + await page.close() + except Exception as e: + log.debug(f"Error closing Playwright page for {url}: {e}", exc_info=True) finally: - await browser.close() + try: + await browser.close() + except Exception as e: + log.debug(f"Error closing Playwright browser: {e}", exc_info=True) class SafeWebBaseLoader(WebBaseLoader):