rust_drission
rust_drission is a Rust browser automation library built on Chrome DevTools Protocol (CDP). Its public API is intentionally close to DrissionPage, and the recommended entry point for most usage is ChromiumPage.
rust_drission 是一个基于 Chrome DevTools Protocol (CDP) 的 Rust 浏览器自动化库。它的公开 API 尽量贴近 DrissionPage,大多数场景建议直接从 ChromiumPage 开始。
Why ChromiumPage
- One entry point for launch/connect, navigation, element lookup, JS execution, screenshots, cookies, and tab access
- DrissionPage-style locator strings such as
css:,xpath:,text:,id:,class:,tag: - Supports direct JS/CDP calls when the high-level API is not enough
- Keeps advanced capabilities available through
page.tab()andpage.browser() - Built-in network traffic listening with URL/resource-type filtering and batch collection
Installation
[]
= "0.2"
Quick Start
use ;
Common Patterns
Launch a new Chrome
use ;
let page = new?;
Connect to an existing Chrome
Chrome must already be started with remote debugging enabled, for example:
chrome --remote-debugging-port=9222
Then connect:
use ChromiumPage;
let page = connect?;
Locate and operate on elements
page.input?;
page.click?;
if let Some = page.ele?
Listen to network traffic
use Duration;
// Start listener first (blocks until ready), then navigate
let listener = page.listen?;
page.get?;
// Receive all packets
while let Some = listener.wait?
// Or filter by URL keyword
let url_listener = page.listen_url?;
page.get?;
if let Some = url_listener.wait?
// Or filter by resource type (XHR, Fetch, Document, Script, etc.)
let fetch_listener = page.listen_resource_type?;
// Or batch collect after navigation
let listener = page.listen?;
page.get?;
let packets = page.listen_collect?;
println!;
Run JavaScript
let result = page.run_js?;
let async_result = page.run_js_await?;
Use advanced page APIs
use Duration;
let tab = page.tab;
tab.wait_visible?;
tab.set_local_storage?;
Documentation
- Chinese guide: docs/usage.zh-CN.md
- English guide: docs/usage.en.md
- Skill guide for usage-oriented prompting: skills/rust_drission/SKILL.md
Notes
ChromiumPageis the recommended starting point. Usepage.tab()orpage.browser()only when you need lower-level control.Framesupport is aimed at same-origin iframes.listen()is available directly onChromiumPage, as well aslisten_url(),listen_resource_type(), andlisten_collect().- Always start the listener before navigating, so no network events are missed:
let l = page.listen()?; page.get("...")?;. - Element lookup methods often return
Result<Option<Element>, CdpError>. Handle theNonecase explicitly.
Changelog
v0.2.1
- Fix: clean up Chrome Singleton lock files (
SingletonLock,SingletonCookie,SingletonSocket) inuser_data_dirbefore browser launch, preventing startup failures when a previous browser instance crashed or was killed unexpectedly
v0.2.0
- All error messages changed from Chinese to English for better internationalization
- macOS: auto-detect Chrome, Chrome Canary, Chromium, Edge, and Brave browser paths
- Fixed element lookup fallback logic to avoid false errors when main scan returns no results
- Added 5 runnable API test examples (navigation, element actions, element queries, browser tabs)
- Cross-platform example paths (no longer Windows-only)