Fix AttributeError in _wait_for_page_ready_before_action (#4563)

This commit is contained in:
pedrohsdb
2026-01-27 17:25:24 -08:00
committed by GitHub
parent 6ac311e033
commit 912d8dfa15
3 changed files with 45 additions and 5 deletions

View File

@@ -546,10 +546,11 @@ class ScriptSkyvernPage(SkyvernPage):
3. DOM stability (no significant mutations for 300ms)
"""
try:
if not self._page:
# Note: SkyvernPage uses self.page, not self._page
if not self.page:
return
skyvern_frame = await SkyvernFrame.create_instance(frame=self._page)
skyvern_frame = await SkyvernFrame.create_instance(frame=self.page)
await skyvern_frame.wait_for_page_ready(
network_idle_timeout_ms=settings.PAGE_READY_NETWORK_IDLE_TIMEOUT_MS,
loading_indicator_timeout_ms=settings.PAGE_READY_LOADING_INDICATOR_TIMEOUT_MS,

View File

@@ -2456,8 +2456,23 @@ class ForgeAgent:
break
except (FailedToTakeScreenshot, ScrapingFailed) as e:
if idx < len(SCRAPE_TYPE_ORDER) - 1:
LOG.warning(
"Scrape attempt failed, will retry with next strategy",
attempt=idx + 1,
scrape_type=scrape_type.value if hasattr(scrape_type, "value") else str(scrape_type),
error_type=e.__class__.__name__,
url=task.url,
)
continue
LOG.exception(f"{e.__class__.__name__} happened in two normal attempts and reload-page retry")
LOG.error(
"All scrape attempts failed",
total_attempts=len(SCRAPE_TYPE_ORDER),
error_type=e.__class__.__name__,
url=task.url,
step_order=step.order,
step_retry=step.retry_index,
exc_info=True,
)
raise e
if scraped_page is None:

View File

@@ -74,6 +74,15 @@ async def _current_viewpoint_screenshot_helper(
) -> bytes:
if page.is_closed():
raise FailedToTakeScreenshot(error_message="Page is closed")
# Capture page context for debugging screenshot issues
url = page.url
try:
viewport = page.viewport_size
viewport_info = f"{viewport['width']}x{viewport['height']}" if viewport else "unknown"
except Exception:
viewport_info = "unknown"
try:
if mode == ScreenshotMode.DETAILED:
await page.wait_for_load_state(timeout=SettingsManager.get_settings().BROWSER_LOADING_TIMEOUT_MS)
@@ -94,10 +103,25 @@ async def _current_viewpoint_screenshot_helper(
)
return screenshot
except TimeoutError as e:
LOG.exception(f"Timeout error while taking screenshot: {str(e)}")
LOG.error(
"Screenshot timeout",
timeout_ms=timeout,
url=url,
viewport=viewport_info,
full_page=full_page,
mode=mode.value if hasattr(mode, "value") else str(mode),
error=str(e),
)
raise FailedToTakeScreenshot(error_message=str(e)) from e
except Exception as e:
LOG.exception(f"Unknown error while taking screenshot: {str(e)}")
LOG.error(
"Screenshot failed",
url=url,
viewport=viewport_info,
full_page=full_page,
error=str(e),
exc_info=True,
)
raise FailedToTakeScreenshot(error_message=str(e)) from e