Update playwright_model.py
Browse files- playwright_model.py +31 -0
playwright_model.py
CHANGED
|
@@ -16,6 +16,30 @@ async def capture_workflows(public_url: str, pdf_filename: str = "workflow_scree
|
|
| 16 |
print(f"Opening page: {public_url}")
|
| 17 |
await page.goto(public_url, wait_until="load")
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
# ✅ Inject workflow traversal + sub-screen logic
|
| 20 |
js_logic = """
|
| 21 |
(function(){
|
|
@@ -106,6 +130,9 @@ async def capture_workflows(public_url: str, pdf_filename: str = "workflow_scree
|
|
| 106 |
screen_name
|
| 107 |
)
|
| 108 |
|
|
|
|
|
|
|
|
|
|
| 109 |
await asyncio.sleep(1.2)
|
| 110 |
await page.screenshot(path=screenshot_path, full_page=True)
|
| 111 |
screenshots.append(screenshot_path)
|
|
@@ -131,7 +158,11 @@ async def capture_workflows(public_url: str, pdf_filename: str = "workflow_scree
|
|
| 131 |
|
| 132 |
print(f" ↳ Capturing sub-screen: {sub}")
|
| 133 |
await page.evaluate(f"window.__clickSubScreen('{sub}')")
|
|
|
|
|
|
|
|
|
|
| 134 |
await asyncio.sleep(1.0)
|
|
|
|
| 135 |
sub_name_clean = sub.replace(" ", "_").lower()
|
| 136 |
sub_path = os.path.join(OUTPUT_DIR, f"{screen_name}_{sub_name_clean}.png")
|
| 137 |
|
|
|
|
| 16 |
print(f"Opening page: {public_url}")
|
| 17 |
await page.goto(public_url, wait_until="load")
|
| 18 |
|
| 19 |
+
# ✅ Helper JS to wait until sidebar finishes sliding
|
| 20 |
+
async def wait_for_sidebar_stable():
|
| 21 |
+
await page.evaluate("""
|
| 22 |
+
return new Promise(resolve => {
|
| 23 |
+
const sidebar = document.querySelector('.sidebar, .side-nav, .menu-panel, .navigation, .drawer');
|
| 24 |
+
if (!sidebar) return resolve();
|
| 25 |
+
let lastPos = sidebar.getBoundingClientRect().left;
|
| 26 |
+
let stableCount = 0;
|
| 27 |
+
|
| 28 |
+
const check = () => {
|
| 29 |
+
const newPos = sidebar.getBoundingClientRect().left;
|
| 30 |
+
if (Math.abs(newPos - lastPos) < 0.5) {
|
| 31 |
+
stableCount++;
|
| 32 |
+
} else {
|
| 33 |
+
stableCount = 0;
|
| 34 |
+
lastPos = newPos;
|
| 35 |
+
}
|
| 36 |
+
if (stableCount > 5) return resolve();
|
| 37 |
+
requestAnimationFrame(check);
|
| 38 |
+
};
|
| 39 |
+
check();
|
| 40 |
+
});
|
| 41 |
+
""")
|
| 42 |
+
|
| 43 |
# ✅ Inject workflow traversal + sub-screen logic
|
| 44 |
js_logic = """
|
| 45 |
(function(){
|
|
|
|
| 130 |
screen_name
|
| 131 |
)
|
| 132 |
|
| 133 |
+
# ✅ Wait until sidebar (if any) has finished sliding
|
| 134 |
+
await wait_for_sidebar_stable()
|
| 135 |
+
|
| 136 |
await asyncio.sleep(1.2)
|
| 137 |
await page.screenshot(path=screenshot_path, full_page=True)
|
| 138 |
screenshots.append(screenshot_path)
|
|
|
|
| 158 |
|
| 159 |
print(f" ↳ Capturing sub-screen: {sub}")
|
| 160 |
await page.evaluate(f"window.__clickSubScreen('{sub}')")
|
| 161 |
+
|
| 162 |
+
# ✅ Wait until sidebar (if any) is stable again
|
| 163 |
+
await wait_for_sidebar_stable()
|
| 164 |
await asyncio.sleep(1.0)
|
| 165 |
+
|
| 166 |
sub_name_clean = sub.replace(" ", "_").lower()
|
| 167 |
sub_path = os.path.join(OUTPUT_DIR, f"{screen_name}_{sub_name_clean}.png")
|
| 168 |
|