Fix AttributeError in _wait_for_page_ready_before_action (#4563)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user