import type { BrowserHandle, BrowserNewTabOptions, BrowserOpenOptions, BrowserOperateParams, CookieFilter, CookieSet, AllowAutomaticDownloadsOptions, AutomaticDownloadsSettingOptions, AutomaticDownloadsSettingResult, DownloadSummary, PageHandle, DownloadUrlOptions, ReuseTabOptions, TabInfo, WaitForDownloadOptions, WaitForOptions, WaitForResult } from "./protocol.js"; /** BrowserClient 构造选项。 */ export interface BrowserClientOptions { /** * browserd 的 baseUrl,如 "http://127.0.0.1:17322"。 * 与 port 二选一;baseUrl 优先。 */ baseUrl?: string; /** browserd RPC 端口(仅 host=127.0.0.1)。与 baseUrl 二选一。 */ port?: number; /** 自定义 host(默认 127.0.0.1)。一般不改。 */ host?: string; /** 默认 RPC 超时(毫秒)。默认 60000。单个方法可覆盖。 */ timeoutMs?: number; } /** * 浏览器自动化 client。 * * 通过 HTTP JSON-RPC 连接 browserd,控制宿主 Chrome。 * 不依赖 workspace / mooncat 发行体 / PM2 —— 只是一个 HTTP client。 */ export declare class BrowserClient { private readonly host; private readonly port; private readonly defaultTimeoutMs; private reqId; constructor(opts?: BrowserClientOptions); /** 当前连接的 baseUrl(用于日志/诊断)。 */ get baseUrl(): string; /** 连接探测:browserd 是否活着 + 是否已 open。返回 /health 响应,或 null。 */ health(timeoutMs?: number): Promise | null>; /** 发一个 JSON-RPC 请求,返回 result 或 throw。 */ private rpc; /** 打开浏览器(宿主 Chrome,双路由自动选择 extension/cdp)。 */ open(options?: BrowserOpenOptions): Promise; /** 新建标签页。默认同 host 复用已有 tab(导航+激活),force:true 强制开新 tab。 */ newTab(options?: BrowserNewTabOptions): Promise; /** 列出所有标签页(每项 pageHandle 必有 pageId)。 */ listTabs(): Promise; /** 在页面上执行动作(click/fill/goto/snapshot/evaluate/...,40+ 个 action)。 */ operate(params: BrowserOperateParams): Promise; /** 获取 cookies。 */ getCookies(filter?: CookieFilter): Promise<{ cookies: CookieSet[]; }>; /** 设置 cookies。 */ setCookies(cookies: CookieSet[]): Promise<{ ok: boolean; count: number; }>; /** 清除 cookies。 */ clearCookies(filter?: CookieFilter): Promise; /** 关闭浏览器(graceful,保留登录态)。 */ /** Close Chrome while keeping browserd alive for a later warm open. */ closeBrowser(): Promise<{ ok: boolean; closed: boolean; }>; close(): Promise<{ ok: boolean; closed: boolean; }>; /** * 复用 tab:按 urlMatch 找已开的 tab,有则切过去复用,无则 newTab(url)。 * 高危平台频繁重开页面触发风控,已开的 tab 应复用。 */ reuseTab(options: ReuseTabOptions): Promise; /** 列出最近下载(extension 读 Chrome 历史;CDP 读本次 browserd 会话记录)。 */ listDownloads(limit?: number): Promise<{ downloads: DownloadSummary[]; }>; /** 用当前路由的浏览器下载管理器下载 URL。 */ downloadUrl(options: DownloadUrlOptions): Promise<{ id: number; }>; /** 查单个下载状态(by id)。 */ getDownload(id: number): Promise<{ download: DownloadSummary | null; }>; /** * 轮询等下载完成(基于浏览器下载状态,不盲轮询业务目录)。 * 点了下载按钮后调用,按 filenameRegex + sinceMs 匹配,等 state=complete。 * 返回 { download, reason }:reason=complete 成功,timeout 超时。 */ waitForDownload(options: WaitForDownloadOptions): Promise<{ download: DownloadSummary | null; reason: string; }>; /** * 完整 URL 下载闭环:由 Chrome 下载管理器发起下载,并等待完成后返回本地文件路径。 * 适用于业务页已暴露/拦截到真实下载 URL 的场景,避免依赖页面合成 click。 */ downloadUrlAndWait(options: DownloadUrlOptions & Omit): Promise<{ id: number; download: DownloadSummary | null; reason: string; }>; /** * 完整业务动作下载闭环:先执行一组页面动作,再等待 Chrome 下载记录。 * operateSequence 会以序列开始时间作为默认 sinceMs,避免快速下载被漏掉。 */ downloadWithActions(options: { pageHandle: BrowserOperateParams["pageHandle"]; steps: Record[]; filenameRegex?: string; timeoutMs?: number; intervalMs?: number; sinceMs?: number; }): Promise<{ download: DownloadSummary | null; reason: string; sequence: unknown; }>; /** 允许指定站点自动下载多个文件(Chrome automaticDownloads content setting;extension 路支持)。 */ allowAutomaticDownloads(options: string | AllowAutomaticDownloadsOptions): Promise; /** 查询指定站点 automaticDownloads 当前设置(extension 路支持)。 */ getAutomaticDownloadsSetting(options: string | AutomaticDownloadsSettingOptions): Promise; /** 清除指定站点 automaticDownloads 例外设置,恢复默认行为(extension 路支持)。 */ resetAutomaticDownloadsSetting(options: string | AutomaticDownloadsSettingOptions): Promise<{ ok: true; primaryPattern: string; secondaryPattern: string; }>; /** * 通用等待:DOM 节点、文本、Tab、Frame 或调用方组合状态满足。 * 延迟重试(轮询)+ 刷新重试(检测不到刷新页面重来)+ 连续 maxRefresh 次仍未出现则返回 ok:false。 * 适用于 SPA 异步加载的元素,比 sleep 固定等待更稳。frameId 指定时在对应 iframe 内检测/刷新。 */ waitFor(options: WaitForOptions): Promise; /** * 按 url 特征找 frame id(应对动态 iframe)。 * 封装 operate({action:"listFrames"}) + 过滤,避免调用方每次都手写 find。 * 返回 { frameId, url, parentFrameId } 或 null(没找到)。 * * 找到后用于 operate 的 frameId 参数,或在 waitFor 的 frameId 里指定。 * 注意:listFrames 仅 extension 模式支持。 */ findFrameByUrl(tab: PageHandle, urlPattern: RegExp | string): Promise<{ frameId: number; url: string; parentFrameId: number; } | null>; /** * 关闭网页内的 DOM 弹窗(modal/popup/dialog,非浏览器原生 alert/confirm)。 * * 网页自己渲染的遮罩弹窗会挡住主体,让 snapshot/点击失效。这个方法逐层尝试: * 1. 点可见的关闭按钮 selector(通用 class*=close 等) * 2. 点"我知道了/确定/关闭"等通用文本按钮 * 3. 兜底:隐藏纯遮罩层(display:none) * * 区别于 setDialogHandler(那是浏览器原生 JS dialog)。 * 选择器是通用的;业务专属弹窗文案通过 extraCloseTexts/extraSelectors 扩展,不要改这里。 * * @returns { dismissed, methods } dismissed=关了几个,methods=用了什么方法 */ dismissPopups(tab: PageHandle, opts?: { extraCloseTexts?: string[]; extraSelectors?: string[]; }): Promise<{ dismissed: number; methods: string[]; }>; /** * 把宿主 Chrome 窗口拉到 OS 前台(真正的窗口激活,非 tab 级 activate)。 * * 区别于 operate({action:"activate"})——那只是把 tab 在浏览器内激活(bringToFront), * 不会把整个 Chrome 窗口提到 OS 最前。某些 SPA(如生意参谋粉丝页)只在窗口 * 真正可见时才渲染内容,此时必须 OS 级前置。 * * 平台:Windows 用 PowerShell(SetForegroundWindow),其他平台 no-op + 警告。 * 失败不抛错(非阻断),返回 ok 布尔。 */ bringBrowserToFront(): { ok: boolean; platform?: string; }; } /** * 默认导出的便捷工厂:等价于 `new BrowserClient(opts)`。 * 便于 `import { browser } from "@mooncat/browser"` 后直接用。 */ export declare function createBrowser(opts?: BrowserClientOptions): BrowserClient; //# sourceMappingURL=client.d.ts.map