Skip to content

Commit

Permalink
🔄 synced local 'skyvern/' with remote 'skyvern/'
Browse files Browse the repository at this point in the history
<!-- ELLIPSIS_HIDDEN -->

> [!IMPORTANT]
> Adds logic in `handle_click_action()` to close extra pages opened during file downloads and refactors `set_download_file_listener()` for clarity.
>
>   - **Behavior**:
>     - In `handle_click_action()` in `handler.py`, added logic to close any extra page opened during a file download action.
>     - Logs page count before and after download to identify if an extra page was opened.
>   - **Misc**:
>     - Minor refactoring in `set_download_file_listener()` in `browser_factory.py` to improve code clarity.
>
> <sup>This description was created by </sup>[<img alt="Ellipsis" src="https://img.shields.io/badge/Ellipsis-blue?color=175173">](https://www.ellipsis.dev?ref=Skyvern-AI%2Fskyvern-cloud&utm_source=github&utm_medium=referral)<sup> for 6fcf2d99affb1fc816380fe2b1d1490cd77ee890. It will automatically update as commits are pushed.</sup>

<!-- ELLIPSIS_HIDDEN -->
  • Loading branch information
wintonzheng committed Dec 17, 2024
1 parent b8e12f8 commit 48f1d62
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 9 deletions.
42 changes: 41 additions & 1 deletion skyvern/webeye/actions/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,47 @@ async def handle_click_action(
return [ActionFailure(InteractWithDisabledElement(skyvern_element.get_id()))]

if action.download:
results = await handle_click_to_download_file_action(action, page, scraped_page, task, step)
# get the initial page count
browser_state = app.BROWSER_MANAGER.get_for_task(task.task_id, workflow_run_id=task.workflow_run_id)
initial_page_count = 0
if browser_state is not None:
initial_page_count = len(browser_state.browser_context.pages if browser_state.browser_context else [])
LOG.info(
"Page count before download file action",
initial_page_count=initial_page_count,
task_id=task.task_id,
step_id=step.step_id,
workflow_run_id=task.workflow_run_id,
)
try:
results = await handle_click_to_download_file_action(action, page, scraped_page, task, step)
except Exception:
raise
finally:
# get the page count after download
page_count_after_download = 0
if browser_state is not None:
page_count_after_download = len(
browser_state.browser_context.pages if browser_state.browser_context else []
)

LOG.info(
"Page count after download file action",
initial_page_count=initial_page_count,
page_count_after_download=page_count_after_download,
task_id=task.task_id,
step_id=step.step_id,
workflow_run_id=task.workflow_run_id,
)
if page_count_after_download > initial_page_count and browser_state and browser_state.browser_context:
LOG.info(
"Extra page opened after download, closing it",
task_id=task.task_id,
step_id=step.step_id,
workflow_run_id=task.workflow_run_id,
)
# close the extra page
await browser_state.browser_context.pages[-1].close()
else:
results = await chain_click(
task,
Expand Down
5 changes: 2 additions & 3 deletions skyvern/webeye/browser_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,9 @@ async def browser_console_log(msg: ConsoleMessage) -> None:

def set_download_file_listener(browser_context: BrowserContext, **kwargs: Any) -> None:
async def listen_to_download(download: Download) -> None:
workflow_run_id = kwargs.get("workflow_run_id")
task_id = kwargs.get("task_id")
try:
workflow_run_id = kwargs.get("workflow_run_id")
task_id = kwargs.get("task_id")

async with asyncio.timeout(BROWSER_DOWNLOAD_TIMEOUT):
file_path = await download.path()
if file_path.suffix:
Expand Down
6 changes: 1 addition & 5 deletions skyvern/webeye/scraper/domUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1134,11 +1134,7 @@ function buildElementObject(frame, element, interactable, purgeable = false) {
}

if (elementTagNameLower === "input" || elementTagNameLower === "textarea") {
if (element.type === "password") {
attrs["value"] = element.value ? "*".repeat(element.value.length) : "";
} else {
attrs["value"] = element.value;
}
attrs["value"] = element.value;
}

let elementObj = {
Expand Down

0 comments on commit 48f1d62

Please sign in to comment.