# -*- coding: utf-8 -*- u"""重载 EasyEDA 客户端页面(下板 PCB1 专用)。 /c/Python314/python .claude/pcb1_reload.py ⚠️ **不要拿 `pcb2_reload.py` 当通用工具**:那一份写死了载板的 uuid, 而且会 `pcb_PrimitivePour.delete()` **把板上全部铺铜边框删掉** (载板那边的流程是删完再重铺)。在下板上跑它 = 把载板的铜清空。 为什么要重载:`drc_read.py` 文件头那一条 —— 程序化建线/建过孔之后 「连接性错误」那一支是**陈旧的**,必须 reload 之后再跑 DRC 才准。 (「间距错误」是即时的,不受影响。) """ import json, os, sys, time, urllib.request HERE = os.path.dirname(os.path.abspath(__file__)); sys.path.insert(0, HERE) from eda import run, port PCB = '7e9415a16a909c51' JS = u""" const sleep = ms => new Promise(r => setTimeout(r, ms)); const nat = b => { const o={bubbles:true,cancelable:true,view:window,button:0}; for (const t of ['pointerdown','mousedown','pointerup','mouseup','click']) b.dispatchEvent(new (t.startsWith('pointer')?PointerEvent:MouseEvent)(t,o)); }; for (const b of document.querySelectorAll('button')) if ((b.innerText||'').trim()==='取消' && b.offsetParent!==null) { nat(b); await sleep(800); } await eda.dmt_EditorControl.openDocument('%s'); await sleep(1200); await eda.pcb_Document.save(); await sleep(1200); window.onbeforeunload = null; setTimeout(() => location.reload(true), 300); return {ok: 1}; """ % PCB def wid(): try: with urllib.request.urlopen('http://127.0.0.1:%d/health' % port(), timeout=3) as r: return json.loads(r.read()).get('activeWindowId') except Exception: return None if __name__ == '__main__': w0 = wid() r = run(JS, timeout=60) print(json.dumps(r, ensure_ascii=False)[:200]) for _ in range(60): time.sleep(2) w = wid() if w and w != w0: print(u'已重载,windowId %s -> %s' % (w0, w)) break else: print(u'⚠ 等了 120 s 没看到 windowId 变化')