bao_cdp_client 0.1.0

Unified browser control client over CDP — integrates servo (in-memory) and external Chrome (WebSocket), Playwright-style high-level API.
docs.rs failed to build bao_cdp_client-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

bao_cdp_client

统一浏览器控制客户端,基于 CDP (Chrome DevTools Protocol)。

通过 URL scheme 自动路由到内置 servo 或外部 Chrome:

Scheme Transport 适用场景
memory://bao InMemoryTransport 同进程 servo,零网络往返
ws://host:port WebSocketTransport 外部 Chrome / Chromium
http://host:port WebSocketTransport HTTP discover → 自动转 ws://

设计目标

  • 统一 API:不论连内嵌 servo 还是远端 Chrome,顶层 API 一致
  • Playwright 风格:Browser/BrowserContext/Page/Frame/ElementHandle 等高层抽象
  • 零 tokio:用 bun_event_loop 调度收发,与 Bao 运行栈一致
  • 完整类型:所有公共 API 含 doc comment + 示例 + 错误码

快速开始

连接内嵌 servo 并打开页面:

use bao_cdp_client::Browser;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 同进程 servo(memory:// scheme 路由到 InMemoryTransport)
    let browser = Browser::connect("memory://bao")?;
    assert!(browser.is_in_memory());
    Ok(())
}

连接外部 Chrome:

use bao_cdp_client::Browser;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let browser = Browser::connect("ws://127.0.0.1:9222")?;
    assert!(browser.is_websocket());
    Ok(())
}

模块组织

  • [browser]: Browser::connect(url) 入口
  • [transport]: Transport trait + InMemoryTransport / WebSocketTransport
  • [connection]: Connection 配置与 URL 解析
  • [bridge]: servo RDP 桥接(CDPRdpBridge + servo 7 事件 → CDP event)
  • [api]: 高层 API 类(Page/Frame/ElementHandle/...)
  • [error]: ConnectError + CdpError

@trace REQ-BAO-API-001 [level:library] @trace REQ-BAO-API-008 [level:library]