# -*- coding: utf-8 -*- """同一张管理页,用几个宽度各截一张,看窄屏到底哪里出问题。""" from __future__ import annotations import http.cookiejar import json import os import shutil import subprocess import sys import tempfile import time import urllib.error import urllib.parse import urllib.request from pathlib import Path ROOT = Path(__file__).resolve().parent.parent UA = {"User-Agent": "LanRemote/1.4.0"} PORT = 8113 BASE = f"http://127.0.0.1:{PORT}" EDGE = next((p for p in ( Path(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"), Path(r"C:\Program Files\Microsoft\Edge\Application\msedge.exe")) if p.is_file()), None) def main() -> int: work = Path(tempfile.mkdtemp(prefix="admin_multi_")) relay = None try: data = work / "d" data.mkdir(parents=True, exist_ok=True) env = dict(os.environ) env.update({"RELAY_PORT": str(PORT), "RELAY_BIND": "127.0.0.1", "RELAY_DATA": str(data), "PYTHONIOENCODING": "utf-8", "PYTHONUNBUFFERED": "1"}) relay = subprocess.Popen( [sys.executable, "-u", str(ROOT / "relay" / "relay.py")], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) for _ in range(40): time.sleep(0.5) try: urllib.request.urlopen(urllib.request.Request( BASE + "/v1/health", headers=UA), timeout=2) break except Exception: # noqa: BLE001 continue for index, (name, code) in enumerate( [("书房台式机", "482913"), ("笔记本", "771204")], start=1): body = json.dumps({"deviceId": f"pc-{index}", "code": code, "name": name, "version": "1.4.0"}).encode() urllib.request.urlopen(urllib.request.Request( BASE + "/v1/agent/register", data=body, method="POST", headers={**UA, "Content-Type": "application/json"}), timeout=10).read() jar = http.cookiejar.CookieJar() opener = urllib.request.build_opener( urllib.request.HTTPCookieProcessor(jar)) form = urllib.parse.urlencode({"password": "120830"}).encode() req = urllib.request.Request(BASE + "/admin/login", data=form, method="POST", headers=UA) req.add_header("Content-Type", "application/x-www-form-urlencoded") try: opener.open(req, timeout=15).read() except urllib.error.HTTPError: pass html = opener.open(urllib.request.Request(BASE + "/", headers=UA), timeout=15).read().decode("utf-8") page = work / "p.html" page.write_text(html, encoding="utf-8") out_dir = ROOT / "_build" for width in (420, 560, 700): shot = out_dir / f"admin_w{width}.png" subprocess.run( [str(EDGE), "--headless=new", "--disable-gpu", "--hide-scrollbars", f"--window-size={width},1500", f"--screenshot={shot}", page.as_uri()], capture_output=True, timeout=90) print(f" {width}px -> {shot.name} " f"{'ok' if shot.is_file() else '失败'}") return 0 finally: if relay is not None: try: relay.terminate() relay.wait(timeout=8) except Exception: # noqa: BLE001 try: relay.kill() except Exception: # noqa: BLE001 pass time.sleep(0.5) shutil.rmtree(work, ignore_errors=True) if __name__ == "__main__": sys.exit(main())