Spaces:
Sleeping
Sleeping
| import asyncio | |
| from fastapi import FastAPI, HTTPException | |
| from playwright.async_api import async_playwright | |
| app = FastAPI() | |
| async def run_flow_pages(url: str): | |
| async with async_playwright() as p: | |
| browser = await p.chromium.launch(headless=True) | |
| page = await browser.new_page() | |
| try: | |
| # Navigate to the page and wait for network to be idle | |
| await page.goto(url, wait_until="networkidle", timeout=60000) | |
| # Wait for page to be fully interactive | |
| await page.wait_for_load_state("domcontentloaded") | |
| await asyncio.sleep(3) | |
| # Try to get flowPages with multiple attempts and different methods | |
| flow_pages_data = None | |
| max_attempts = 5 | |
| for attempt in range(max_attempts): | |
| # Try multiple ways to access flowPages | |
| flow_pages_data = await page.evaluate("""() => { | |
| // Try direct access | |
| try { | |
| if (typeof flowPages !== 'undefined' && flowPages !== null) { | |
| return JSON.parse(JSON.stringify(flowPages)); | |
| } | |
| } catch(e) {} | |
| // Try window.flowPages | |
| try { | |
| if (typeof window !== 'undefined' && window.flowPages !== undefined && window.flowPages !== null) { | |
| return JSON.parse(JSON.stringify(window.flowPages)); | |
| } | |
| } catch(e) {} | |
| // Try globalThis.flowPages | |
| try { | |
| if (typeof globalThis !== 'undefined' && globalThis.flowPages !== undefined && globalThis.flowPages !== null) { | |
| return JSON.parse(JSON.stringify(globalThis.flowPages)); | |
| } | |
| } catch(e) {} | |
| // Try document.flowPages | |
| try { | |
| if (typeof document !== 'undefined' && document.flowPages !== undefined && document.flowPages !== null) { | |
| return JSON.parse(JSON.stringify(document.flowPages)); | |
| } | |
| } catch(e) {} | |
| // Try to find it in window properties | |
| try { | |
| for (let key in window) { | |
| if (key.toLowerCase().includes('flow') && window[key] !== null) { | |
| return JSON.parse(JSON.stringify(window[key])); | |
| } | |
| } | |
| } catch(e) {} | |
| return null; | |
| }""") | |
| if flow_pages_data is not None: | |
| break | |
| # Wait a bit more before next attempt | |
| await asyncio.sleep(2) | |
| await browser.close() | |
| if flow_pages_data is None: | |
| raise HTTPException( | |
| status_code=500, | |
| detail="flowPages not found on the page after multiple attempts. The page may not have loaded flowPages yet or it may be in a different format." | |
| ) | |
| return flow_pages_data | |
| except HTTPException: | |
| await browser.close() | |
| raise | |
| except Exception as e: | |
| await browser.close() | |
| raise HTTPException(status_code=500, detail=f"Error fetching flowPages: {str(e)}") | |