fix: reuse external browsers for element pickup

This commit is contained in:
yu committed 2026-11-02 13:44:46 +08:00
1 parent 927b18551f
commit d39c77324a
4 files changed
+63 -11

No files matched your search

+25 -5
View File
@@ -1,7 +1,13 @@
import { app, BrowserWindow, dialog, ipcMain, shell } from "electron";
import path from "node:path";
import type { AppInfo, AppSettings, FlowDefinition, FlowSaveOptions, FlowSaveResult } from "../shared/types";
import { BrowserSession, hasBrowserSession, setBrowserElementWaitMs } from "./browser/session";
import {
BrowserSession,
externalBrowserSession,
hasBrowserSession,
latestExternalSession,
setBrowserElementWaitMs
} from "./browser/session";
import "./capabilities";
import { catalogPath, loadCatalog } from "./catalog";
import { createDemoFlow, createExampleFlows, createFlow, deleteFlow, getFlow, listFlows, saveFlow } from "./flows";
@@ -103,12 +109,26 @@ function registerIpc(): void {
setBrowserElementWaitMs(settings.browserElementWaitMs);
return settings;
});
ipcMain.handle("browser:pick-element", async (_event, options: { url?: string } = {}) => {
type BrowserPickOptions = {
url?: string;
browser?: import("./browser/external").ExternalBrowserOptions;
};
ipcMain.handle("browser:pick-element", async (_event, options: BrowserPickOptions = {}) => {
const url = options.url?.trim();
if (!hasBrowserSession() && !url) {
throw new Error("请先配置或运行「打开网页」,再拾取元素");
const browserOptions = options.browser;
let session;
if (browserOptions) {
session = await externalBrowserSession(browserOptions);
} else {
session = latestExternalSession();
}
if (!session) {
if (!hasBrowserSession() && !url) {
throw new Error("请先配置或运行「打开网页」,再拾取元素");
}
session = await BrowserSession.create();
}
const session = await BrowserSession.create();
const currentUrl = await session.currentUrl();
if (url && (currentUrl === "about:blank" || currentUrl !== url)) {
await session.navigate(url);