# -*- coding: utf-8 -*- """把新的中转管理页渲染出来并截图。 做法: 起一个本地中转 -> 造两台测试设备 -> 登录拿 Cookie -> 抓管理页 HTML -> 存成文件 -> 用 Edge 无头模式截图 (存成文件后 JS 调接口会失败,但看清楚界面长什么样足够了。) """ 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 = 8110 BASE = f"http://127.0.0.1:{PORT}" EDGE_CANDIDATES = [ Path(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"), Path(r"C:\Program Files\Microsoft\Edge\Application\msedge.exe"), ] def main() -> int: work = Path(tempfile.mkdtemp(prefix="admin_shot_")) 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"), ("办公电脑", "356180")], 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 / "admin.html" page.write_text(html, encoding="utf-8") # 关键元素检查 print(" 页面检查:") for label, needle in ( ("退出登录", "退出登录"), ("公网地址卡片", "当前公网地址"), ("复制按钮", 'id=copyUrl'), ("统计卡片", 'class=stat'), ("批量删除按钮", 'id=delPicked'), ("全选", 'id=pickAll'), ("自动刷新", 'id=autoRef'), ("每行复选框", 'class=pick value'), ("空状态/表格", "