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]