feat: 外接浏览器支持阶段三+四(多标签管理 + 拾取与高级组件适配)

- external.ts: listPageTargets 标签枚举(过滤 chrome://edge:// 内部页)、openNewPageTarget(PUT /json/new)、ExternalConnection 增加 httpBase/targetId
- session.ts: listTabs/switchTab/openNewTab/getCookies 实现;外部按 targetId 缓存多 ws 会话,切换时迁移弹窗/网络监听;close 关闭全部会话;pickElement 放开外部浏览器(拾取脚本经 Runtime.evaluate 注入,行为与内置一致)
- engine/types.ts: BrowserLike 增加 listTabs/switchTab/openNewTab/getCookies 及窗口/监听可选方法
- browser.ts: Create 支持 openNewTab;WebBrowser_Switch 按标题(正则)/网址真实切换
- web-batch2.ts: GetTAB/V1/V2 真实枚举+匹配+激活;全部组件优先使用流程已选浏览器会话
- web-crawl.ts: 采集/监听组件优先流程会话;BatchDataCrawlNew browserType=chrome/edge 拉起外部浏览器
- browser-control.ts: GetCookieNew 升级 Network.getCookies(含 HttpOnly)
- 冒烟: Edge 双 Tab(ws 会话独立)、/json/new、页面枚举、Network.getCookies 全通过
This commit is contained in:
yu committed 2026-10-30 11:56:08 +08:00
1 parent fd507e4f62
commit a968075100
7 files changed
+309 -54

No files matched your search

+14 -2
View File
@@ -50,6 +50,11 @@ async function resolveSession(ctx: RunContext, args: Record<string, unknown>): P
register(["WebBrowser_CreateV3", "WebBrowser_CreateV2", "WebBrowser_Create", "WebBrowser_CreateBackground"], async (ctx, node, args) => {
const { browser, label } = await resolveSession(ctx, args);
const url = String(args.url ?? "");
if (url && String(args.openNewTab ?? "0") === "1" && browser.openNewTab) {
const tab = await browser.openNewTab(url);
ctx.log(`已使用${label}在新标签页打开 ${tab.url}`, "info", node.id);
return { url: tab.url, title: tab.title };
}
if (url) {
const result = await browser.navigate(url);
ctx.log(`已使用${label}打开 ${result.url}`, "info", node.id);
@@ -83,8 +88,15 @@ register(["WebBrowser_GoUrl", "WebBrowser_Navigate"], async (ctx, node, args) =>
return result;
});
register("WebBrowser_Switch", async (ctx, node) => {
await session(ctx);
register("WebBrowser_Switch", async (ctx, node, args) => {
const browser = await session(ctx);
const title = String(args.title ?? "").trim();
const url = String(args.url ?? "").trim();
if (browser.switchTab && (title || url)) {
const tab = await browser.switchTab({ title: title || undefined, url: url || undefined });
ctx.log(`已切换到标签页:${tab.title || tab.url}`, "info", node.id);
return { switched: true, targetId: tab.targetId, title: tab.title, url: tab.url };
}
ctx.log("网页切换已由统一运行浏览器接管", "info", node.id);
return true;
});