chore: update mirrored site snapshots and action capture outputs

This commit is contained in:
key
2026-04-10 22:55:36 +08:00
parent 9f9dba6289
commit 53d80250c9
674 changed files with 130396 additions and 30076 deletions

View File

@@ -31,10 +31,104 @@ STATIC_HELPER_JS = "/__mirror/static-mirror.js"
def run_agent_browser(cdp_port: int, *args: str) -> str:
cmd = ["agent-browser", "--cdp", str(cdp_port), *args]
if not args:
raise RuntimeError("missing CDP command")
node_script = r"""
const [, mode, portRaw, payload = ""] = process.argv;
const cdpPort = Number(portRaw);
function fail(message) {
console.error(message);
process.exit(1);
}
async function choosePageTarget() {
const response = await fetch(`http://127.0.0.1:${cdpPort}/json`);
if (!response.ok) {
throw new Error(`failed to query CDP targets: ${response.status}`);
}
const targets = await response.json();
const pages = targets.filter((target) => target.type === "page");
const preferred = pages.find((target) => {
try {
const current = new URL(target.url);
return ["hc-pos.sqygj.cn", "hc-etms.sqygj.cn"].includes(current.host);
} catch (_error) {
return false;
}
});
return preferred || pages[0] || null;
}
async function main() {
const target = await choosePageTarget();
if (!target || !target.webSocketDebuggerUrl) {
throw new Error("no debuggable page target found");
}
const ws = new WebSocket(target.webSocketDebuggerUrl);
let seq = 0;
const pending = new Map();
ws.addEventListener("message", (event) => {
const message = JSON.parse(event.data);
if (!message.id || !pending.has(message.id)) {
return;
}
const current = pending.get(message.id);
pending.delete(message.id);
if (message.error) {
current.reject(new Error(JSON.stringify(message.error)));
return;
}
current.resolve(message.result || {});
});
await new Promise((resolve, reject) => {
ws.addEventListener("open", () => resolve(), { once: true });
ws.addEventListener("error", (event) => reject(event.error || new Error("websocket error")), { once: true });
});
const send = (method, params = {}) => new Promise((resolve, reject) => {
const id = ++seq;
pending.set(id, { resolve, reject });
ws.send(JSON.stringify({ id, method, params }));
});
if (mode === "open") {
await send("Page.enable");
await send("Page.navigate", { url: payload });
console.log(JSON.stringify({ ok: true, url: payload }));
ws.close();
return;
}
if (mode === "eval") {
await send("Runtime.enable");
const result = await send("Runtime.evaluate", {
expression: payload,
awaitPromise: true,
returnByValue: true,
});
const value = result.result ? result.result.value : null;
console.log(typeof value === "string" ? value : JSON.stringify(value));
ws.close();
return;
}
throw new Error(`unsupported CDP command: ${mode}`);
}
main().catch((error) => fail(error && error.message ? error.message : String(error)));
"""
cmd = ["node", "-e", node_script, args[0], str(cdp_port), args[1] if len(args) > 1 else ""]
proc = subprocess.run(
cmd,
text=True,
encoding="utf-8",
errors="replace",
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=False,
@@ -49,7 +143,7 @@ def parse_json_output(raw: str) -> Any:
for _ in range(2):
try:
value = json.loads(value)
except json.JSONDecodeError:
except (json.JSONDecodeError, TypeError):
break
return value