updates
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Capture proposal/pages HTML mockups → powerpoint/screenshots/*.png
|
||||
|
||||
Requires Chromium and a local HTTP server (started automatically).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent
|
||||
PAGES = ROOT.parent / "pages"
|
||||
SHOTS = ROOT / "screenshots"
|
||||
PORT = 8765
|
||||
|
||||
PAGES_LIST = [
|
||||
"index.html",
|
||||
"public-home.html",
|
||||
"public-about.html",
|
||||
"public-contact.html",
|
||||
"public-unsubscribe.html",
|
||||
"public-404.html",
|
||||
"public-under-construction.html",
|
||||
"portal-login.html",
|
||||
"portal-dashboard.html",
|
||||
"portal-leads.html",
|
||||
"portal-lead-detail.html",
|
||||
"portal-analytics.html",
|
||||
"portal-contacts.html",
|
||||
"portal-contacts-import.html",
|
||||
"portal-campaign.html",
|
||||
"portal-campaign-report.html",
|
||||
"portal-postcard-designer.html",
|
||||
"portal-social.html",
|
||||
"portal-social-accounts.html",
|
||||
]
|
||||
|
||||
|
||||
def find_chromium() -> str:
|
||||
for candidate in ("chromium", "google-chrome", "google-chrome-stable", "/snap/bin/chromium"):
|
||||
path = Path(candidate) if candidate.startswith("/") else None
|
||||
if path and path.exists():
|
||||
return str(path)
|
||||
found = subprocess.run(["which", candidate], capture_output=True, text=True)
|
||||
if found.returncode == 0 and found.stdout.strip():
|
||||
return found.stdout.strip()
|
||||
raise SystemExit("Chromium/Chrome not found")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
SHOTS.mkdir(parents=True, exist_ok=True)
|
||||
chromium = find_chromium()
|
||||
server = subprocess.Popen(
|
||||
[sys.executable, "-m", "http.server", str(PORT)],
|
||||
cwd=str(PAGES),
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
try:
|
||||
for _ in range(30):
|
||||
try:
|
||||
urllib.request.urlopen(f"http://127.0.0.1:{PORT}/index.html", timeout=1)
|
||||
break
|
||||
except Exception:
|
||||
time.sleep(0.2)
|
||||
else:
|
||||
raise SystemExit("HTTP server failed to start")
|
||||
|
||||
for page in PAGES_LIST:
|
||||
stem = page.removesuffix(".html")
|
||||
out = SHOTS / f"{stem}.png"
|
||||
url = f"http://127.0.0.1:{PORT}/{page}"
|
||||
print(f"screenshot {page} → {out.name}")
|
||||
subprocess.run(
|
||||
[
|
||||
chromium,
|
||||
"--headless=new",
|
||||
"--disable-gpu",
|
||||
"--no-sandbox",
|
||||
"--hide-scrollbars",
|
||||
"--window-size=1440,900",
|
||||
f"--virtual-time-budget=5000",
|
||||
f"--screenshot={out}",
|
||||
url,
|
||||
],
|
||||
check=True,
|
||||
capture_output=True,
|
||||
)
|
||||
print(f"Done: {len(PAGES_LIST)} screenshots in {SHOTS}")
|
||||
finally:
|
||||
server.terminate()
|
||||
server.wait(timeout=5)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user