drission 0.6.2

Rust 里用 CDP 控 Chrome。Context / 磁盘 Profile / XHR 监听与 mock。同仓库有 drs CLI 和 MCP。
Documentation

drission

用 Rust 控本机 Chrome(CDP)。同仓库另有一个二进制 drs,给终端脚本和 Cursor / Codex 的 MCP 用。

crates.io docs.rs Rust Platforms License

简体中文 · English · docs.rs · CHANGELOG

只在你自己的、或书面授权过的系统上用。别拿去绕登录、验证码、付费墙。条款见负责任使用LICENSE

这一版

0.6.2。库 drission 和命令行 drs(crate drission-cli)同一号。

cargo add drission
cargo install drission-cli --bin drs

drs --version 打出 drs 0.6.2。没有 Rust 工具链时,下 GitHub Releases 或 GitCode 镜像里对应平台的 drs 压缩包。install/ 下有脚本,默认拉 Latest。

1. 当库用

Cargo.toml

[dependencies]
drission = "0.6"
tokio = { version = "1", features = ["full"] }

默认 feature 是 cdp,会找本机 Chrome / Edge / Brave / Chromium。

use drission::prelude::*;

#[tokio::main]
async fn main() -> drission::Result<()> {
    let browser = Browser::launch(BrowserOptions::new().headless(true)).await?;
    let tab = browser.new_tab(Some("https://example.com")).await?;
    println!("{}", tab.title().await?);
    browser.quit().await?;
    Ok(())
}

三个常用扩展(都在 CDP 上):

// 按名字隔离 Cookie / 代理 / UA。同名会复用,关 context 才拆。
let ctx = browser.context("account_001").await?;
let tab = ctx.new_tab(Some("https://example.com")).await?;

// 听、拦、假响应、改写、录 HAR。旧的 tab.listen() / intercept() 还能用。
let listen = tab.network().filter("/api/").method("POST").listen().await?;

// 磁盘登录态。目录是 profiles/<id>/chrome,下次进程还能接着用。
let profiles = ProfileManager::open("profiles")?;
let lease = profiles.acquire("user_001").await?;
let browser = lease.launch().await?;

Agent 读页用无障碍大纲,不要喂整页 HTML:

let page = tab.agent();
let obs = page.observe().await?;          // role + name,不是 outerHTML
page.find("登录按钮").click().await?;
page.type_text(Locator::placeholder("用户名"), "alice").await?;
page.wait_for("Dashboard").await?;
tab.wait().element("#dash").visible().timeout(Duration::from_secs(10)).await?;
let html = tab.capture().html().await?;

类型和方法:docs.rs/drission。仓库里可跑的例子:cargo run --example cdp_democargo run --example cdp_contextcargo run --example cdp_agent

2. 当 drs

drs 会在本机起一个 daemon,浏览器活在那个进程里。后面的命令都打给它。机器读加 --json。AI 怎么选命令见 docs/产品级CLI.md

drs ensure-serve --backend cdp --headless
drs --json tab open https://example.com
drs --json snapshot          # 大纲 + ref=e1 + Markdown,给脚本和 Agent 读页用
drs --json click "ref:e1"
drs --json stop              # 停 daemon 和浏览器。Cookie 在磁盘 profile 里,下次 ensure-serve 还在

同一套 daemon 上还能:

drs --json tab list
drs --json inspect
drs --json network inspect --limit 20
drs listen start /api/ --xhr-only --method POST
drs --json network mock /api/user --body '{"ok":true}'
drs --json console start --level error
drs --json download start --dir ./data/downloads
drs --json pdf --out ./page.pdf
drs --json context use account_001
drs --json tab open https://example.com --context account_001
drs --json profile list

open 仍等于 tab opencontext / HAR replay / pdf / record 只支持 CDP。

接到 Cursor / Codex:

drs setup --dry-run
drs setup

会往现有 MCP 配置里合并一项 drs,不覆盖别人的 server。默认 DRS_MCP_TOOLS=core:开页、snapshot、点按、截图,以及语义化的 browser_network / browser_console / browser_download。要 PDF / inspect / Context / 旧 network_*,把环境变量改成 browserall 再重启 MCP。

怎么选命令:docs/产品级CLI.md。字段细节:docs/CLI.md(crates.io 打包不含 docs/)。

Feature

Feature 做什么 默认
cdp Chrome / Edge / Brave / Chromium / Electron
camoufox Camoufox / Firefox(Juggler)
ocr 本地 OCR(tract
slider 授权测试里的滑块缺口距离
signer 内嵌 QuickJS
impersonate HTTP 客户端 TLS 指纹,要 CMake
drission = { version = "0.6", features = ["ocr"] }
# drission = { version = "0.6", default-features = false, features = ["camoufox"] }

两端差哪些能力见仓库 后端能力矩阵

兼容性

Rust 1.85+,edition 2024
系统 macOS / Linux / Windows
浏览器 先找本机 Google Chrome,也认 Edge、Brave、Chromium、Electron
无桌面 headless;Linux 依赖见仓库「服务器部署」

文档(都在 GitHub,不进 crates.io 包)

负责任使用

浏览器自动化会碰到登录态、个人数据和能写库的操作。用之前至少确认:

  1. 只碰你有权用的系统和账号。
  2. 守法律、站点条款、robots.txt、频率限制。
  3. 不绕过登录、验证码、付费墙,不冒充别人。
  4. 不采集没权处理的个人 / 机密 / 版权数据。
  5. 下单、删除这类动作放测试环境,并要人确认。
  6. profile、Cookie、截图别提交到 git。

可选的 OCR、图像分析、网络拦截不构成对任何第三方站点的授权。

安全问题按 SECURITY.md 私下报。

许可证

自定义 source-available、非商业许可,不是 OSI 开源许可。个人学习和合法非盈利用途要满足 LICENSE 全部条款。商用、付费再分发、当付费产品核心,先拿书面授权。

致谢

极数本源