From cdb098699f4d0c23d12a5d12177049217933674e Mon Sep 17 00:00:00 2001 From: Kerem Yilmaz Date: Tue, 23 Jul 2024 14:59:03 -0700 Subject: [PATCH] Handle navigation exception within taskblock.execute (#633) --- skyvern/forge/sdk/workflow/models/block.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/skyvern/forge/sdk/workflow/models/block.py b/skyvern/forge/sdk/workflow/models/block.py index 022dd1c8..28ffdad7 100644 --- a/skyvern/forge/sdk/workflow/models/block.py +++ b/skyvern/forge/sdk/workflow/models/block.py @@ -16,11 +16,13 @@ from typing import Annotated, Any, Literal, Union import filetype import structlog from email_validator import EmailNotValidError, validate_email +from playwright.async_api import Error from pydantic import BaseModel, Field from skyvern.config import settings from skyvern.exceptions import ( ContextParameterValueNotFound, + FailedToNavigateToUrl, MissingBrowserStatePage, TaskNotFound, UnexpectedTaskStatus, @@ -275,7 +277,19 @@ class TaskBlock(Block): ) if self.url: - await browser_state.page.goto(self.url, timeout=settings.BROWSER_LOADING_TIMEOUT_MS) + try: + await browser_state.page.goto(self.url, timeout=settings.BROWSER_LOADING_TIMEOUT_MS) + except Error as playright_error: + LOG.warning(f"Error while navigating to url: {str(playright_error)}") + # Make sure the task is marked as failed in the database before raising the exception + exc = FailedToNavigateToUrl(url=self.url, error_message=str(playright_error)) + await app.DATABASE.update_task( + task.task_id, + status=TaskStatus.failed, + organization_id=workflow.organization_id, + failure_reason=str(exc), + ) + raise exc try: await app.agent.execute_step(