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:
1 parent
fd507e4f62
commit
a968075100
7 files changed
+309
-54
No files matched your search
@@ -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;
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user