浏览器自动化

Wesclaw 提供三层浏览器与桌面自动化能力,覆盖从服务端匿名抓取到用户浏览器操作的完整场景。


三层自动化架构

层级AdapterCellSpec 字段运行时位置适用场景
Headless Browseradapter/headless-browser/.HeadlessBrowser服务端(chromedp)匿名网页抓取
Playwrightadapter/playwright/.Playwright服务端子进程 + 用户浏览器需要登录态的操作
Desktop Agentadapter/desktop/.Desktop客户端二进制(AX-5)桌面应用自动化
┌─────────────────────────────────┐
│ Cell (per-tenant 隔离域)         │
│  ├── HeadlessBrowser (可选)      │ ← 服务端 chromedp
│  ├── Playwright (可选)           │ ← 用户浏览器扩展
│  └── Desktop Agent (可选)        │ ← 客户端原生二进制
└─────────────────────────────────┘

Playwright 配置

Playwright 用于需要用户登录态的浏览器自动化场景。

启用方式

在 CellSpec 中配置 .Playwright 字段(非 nil 即启用):

spec := wesgine.CellSpec{
    Playwright: &wesgine.PlaywrightConfig{
        // 用户浏览器模式
    },
}

工作流程

  1. 安装浏览器扩展:用户安装 Wesclaw 浏览器扩展
  2. 自动连接:扩展通过 auto-connect token 连接到 Cell
  3. Agent 操作:Agent 通过 cell.Playwright() Handle 控制浏览器

管理 API

方法路径说明
GET/cells/{id}/playwright/status查看连接状态
PUT/cells/{id}/playwright/token更新 auto-connect token

使用示例

# 检查 Playwright 连接状态
GET /cells/main/playwright/status

# 响应示例
{
  "connected": true,
  "browser": "chrome",
  "version": "126.0"
}

HeadlessBrowser 配置

HeadlessBrowser 用于匿名网页抓取,不需要用户登录态。

启用方式

spec := wesgine.CellSpec{
    HeadlessBrowser: &wesgine.HeadlessBrowserConfig{
        // 配置选项
    },
}

CellSpec.HeadlessBrowser 非 nil 即启用。

运行时位置

HeadlessBrowser 运行在服务端,使用 chromedp(Chrome DevTools Protocol):

Cell → adapter/headless-browser/ → chromedp → Chrome 实例

查看状态

GET /cells/main/headless-browser/state

浏览器 HITL(browser_wait_for_user)

browser_wait_for_user 是浏览器自动化的安全阀,属于 AlwaysOn 工具:

工作方式

  1. Cell boot 时无条件注册此工具
  2. 当 Agent 遇到需要用户手动操作的页面(如登录、验证码),暂停自动化
  3. 通知用户进行操作
  4. 用户完成后,Agent 继续执行

触发场景

场景说明
登录页面需要用户输入凭据
二次验证短信/邮箱/TOTP 验证
CAPTCHA需要人类完成验证
支付确认需要用户授权支付
权限授权OAuth 等授权流程

关键特性


Playwright vs HeadlessBrowser 选型

决策树

需要浏览器自动化?
├── 否 → 不配置任何浏览器选项
├── 需要用户登录态?
│   ├── 是 → Playwright(mode=user + 浏览器扩展)
│   └── 否 → HeadlessBrowser(服务端 chromedp)
└── 需要桌面应用自动化?
    └── 是 → Desktop Agent(CellSpec.Desktop)

对比表

特性PlaywrightHeadlessBrowser
运行位置用户浏览器 + 服务端子进程服务端 chromedp
登录态✅ 保留用户登录状态❌ 匿名会话
用户干预✅ 支持 HITL较少需要
Cookie✅ 用户的真实 Cookie❌ 空 Cookie
适用场景SaaS 平台操作、需认证的抓取公开网页抓取、截图
CellSpec 字段.Playwright.HeadlessBrowser

常见误区

误区正确做法
用 HeadlessBrowser 做需登录的操作使用 Playwright mode=user
用 Playwright 做匿名抓取使用 HeadlessBrowser(更轻量)
PostBoot 手写 cell.MCPs().Upsert("playwright", ...)使用 CellSpec.Playwright 声明式配置

连接状态查看

Playwright 状态

GET /cells/{id}/playwright/status

返回浏览器扩展的连接状态、浏览器类型和版本。

HeadlessBrowser 状态

GET /cells/{id}/headless-browser/state

返回 Headless 浏览器实例的运行状态。

Desktop Agent 状态

GET /cells/{id}/desktop/status

返回桌面 Agent 的连接状态。


Desktop Agent

Desktop Agent 是 Wesclaw 独有能力(其他产品无此特性),通过原生二进制实现桌面自动化。

配置方式

spec := wesgine.CellSpec{
    Desktop: &wesgine.DesktopConfig{
        Command:   "/path/to/wesclaw-device-agent",
        Transport: "stdio",
    },
}

提供的工具

工具功能平台
wesclaw_desktop_click点击 UI 元素macOS (Accessibility) / Windows (UIA)
wesclaw_open_app打开应用Launch Services / ShellExecute
wesclaw_clipboard_read读取剪贴板全平台
wesclaw_clipboard_write写入剪贴板全平台
wesclaw_screenshot截屏全平台
wesclaw_notify系统通知全平台
wesclaw_show_file文件定位Finder / Explorer

关键约束


故障排查

症状可能原因解决方案
Playwright 连接失败扩展未安装安装浏览器扩展
Playwright token 过期Token 需要更新PUT /playwright/token
Headless 启动失败Chrome 未安装安装 Chrome/Chromium
Desktop Agent 无工具二进制不存在检查 binary 路径
自动化被阻断需要用户操作响应 HITL 请求