更新: 421 个文件 - 2026-03-17 18:30:02

这个提交包含在:
hao
2026-03-17 18:30:02 -07:00
父节点 29c3faaa28
当前提交 a3edc88834
修改 421 个文件,包含 12474 行新增5845 行删除

查看文件

@@ -12,10 +12,12 @@ def capture(url: str, run_dir: Path, prefix: str = "baseline") -> Dict[str, Any]
"present": False,
"refs": [],
"reason": "playwright runtime unavailable",
"error_kind": "import-error",
}
try:
from playwright.sync_api import sync_playwright # type: ignore
except Exception:
except Exception as exc:
payload["reason"] = f"playwright import failed: {exc}"
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)
return payload
@@ -33,11 +35,29 @@ def capture(url: str, run_dir: Path, prefix: str = "baseline") -> Dict[str, Any]
final_url = url
try:
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
try:
browser = p.chromium.launch(headless=True)
except Exception as exc:
payload["reason"] = f"chromium launch failed: {exc}"
payload["error_kind"] = "launch-failed"
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)
return payload
page = browser.new_page()
page.on("console", lambda msg: console_messages.append({"type": msg.type, "text": msg.text}))
page.on("request", lambda req: requests_seen.append({"method": req.method, "url": req.url}))
page.goto(url, wait_until="networkidle", timeout=20000)
response = page.goto(url, wait_until="networkidle", timeout=20000)
if response is None:
payload["reason"] = "page navigation returned no response"
payload["error_kind"] = "navigation-failed"
browser.close()
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)
return payload
if response.status >= 500:
payload["reason"] = f"page returned {response.status}"
payload["error_kind"] = "target-5xx"
browser.close()
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)
return payload
page.screenshot(path=str(screenshot_path), full_page=True)
dom_path.write_text(page.content(), encoding="utf-8")
final_url = page.url
@@ -46,6 +66,7 @@ def capture(url: str, run_dir: Path, prefix: str = "baseline") -> Dict[str, Any]
browser.close()
except Exception as exc:
payload["reason"] = str(exc)
payload["error_kind"] = "target-timeout" if "Timeout" in str(exc) else "navigation-failed"
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)
return payload
write_json(console_path, console_messages)
@@ -63,6 +84,7 @@ def capture(url: str, run_dir: Path, prefix: str = "baseline") -> Dict[str, Any]
"present": True,
"page_title": page_title,
"page_url": final_url,
"error_kind": None,
"refs": [str(screenshot_path), str(dom_path), str(console_path), str(network_path), str(page_path)],
}
write_json(run_dir / "logs" / f"{prefix}-browser.json", payload)