# -*- coding: utf-8 -*- """量出管理页在 420px 下到底是哪个元素越界。 关键:用 --dump-dom + --virtual-time-budget 等脚本跑完, 并把结果写进 DOM(而不是 title,title 容易被 dump 时机坑)。 """ from __future__ import annotations import http.cookiejar import json import os import re import shutil import subprocess import sys import tempfile import time import urllib.error import urllib.parse import urllib.request from pathlib import Path # ⚠ 不再把密码写死在脚本里(这个仓库是公开的)。 # 从环境变量或 _build/.admin_password(已 gitignore)读,读不到就报错。 def _admin_password() -> str: import os env = os.environ.get("YKXMZ_ADMIN_PASSWORD", "").strip() if env: return env f = Path(__file__).resolve().parent / ".admin_password" if f.is_file(): return f.read_text(encoding="utf-8").strip() raise SystemExit( "没拿到管理密码:设 YKXMZ_ADMIN_PASSWORD,或写 _build/.admin_password") ROOT = Path(__file__).resolve().parent.parent UA = {"User-Agent": "LanRemote/1.4.0"} PORT = 8112 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) PROBE = """
""" def main() -> int: work = Path(tempfile.mkdtemp(prefix="admin_probe2_")) 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": _admin_password()}).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") html = html.replace("