feat: 接入浏览器元素拾取

This commit is contained in:
yu committed 2026-10-28 10:48:45 +08:00
1 parent 9cb4eeab96
commit 7d96badb1f
5 files changed
+209 -2

No files matched your search

+13
View File
@@ -1,6 +1,7 @@
import { app, BrowserWindow, dialog, ipcMain, shell } from "electron";
import path from "node:path";
import type { AppInfo, FlowDefinition } from "../shared/types";
import { BrowserSession, hasBrowserSession } from "./browser/session";
import "./capabilities";
import { catalogPath, loadCatalog } from "./catalog";
import { createDemoFlow, createExampleFlows, createFlow, deleteFlow, getFlow, listFlows, saveFlow } from "./flows";
@@ -92,6 +93,18 @@ function registerIpc(): void {
ipcMain.handle("run:start", (event, flow: FlowDefinition) => startRun(flow, event.sender));
ipcMain.handle("run:stop", (_event, runId?: string) => stopRun(runId));
ipcMain.handle("run:capabilities", () => ({ count: capabilityCount(), ids: capabilityIds() }));
ipcMain.handle("browser:pick-element", async (_event, options: { url?: string } = {}) => {
const url = options.url?.trim();
if (!hasBrowserSession() && !url) {
throw new Error("请先配置或运行「打开网页」,再拾取元素");
}
const session = await BrowserSession.create();
const currentUrl = await session.currentUrl();
if (url && (currentUrl === "about:blank" || currentUrl !== url)) {
await session.navigate(url);
}
return session.pickElement();
});
ipcMain.handle("flows:list", () => listFlows());
ipcMain.handle("flows:create", (_event, name?: string) => {
const flow = createFlow(name);