rust_drission 0.1.3

Browser automation library for Rust via Chrome DevTools Protocol (CDP). Connect or launch Chrome, control pages/elements, run JS, cookies, screenshots, request/response listening. API inspired by DrissionPage.
Documentation
# rust_drission


[![Rust](https://img.shields.io/badge/rust-1.70%2B-orange.svg)](https://www.rust-lang.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

Browser automation library for Rust via Chrome DevTools Protocol (CDP). Connect or launch Chrome, control pages/elements, run JS, cookies, screenshots, request/response listening. API inspired by [DrissionPage](https://github.com/g1879/DrissionPage).

---

## Features


| Feature | Description |
|--------|-------------|
| **Browser** | `connect` to existing Chrome or `launch` / `connect_or_launch` with `BrowserConfig` |
| **Page** | Navigate, title/URL/HTML, `evaluate` JS, find elements, click/input, wait helpers |
| **Element** | Click, text/HTML/attr, input/clear, focus/hover, visibility, children, screenshot |
| **Locators** | `css`, `xpath`, `text`, `attr`, `id`, `class`, `tag`, or bare CSS (e.g. `#id`, `.class`) |
| **Cookie** | Get, set, delete |
| **Screenshot** | Full page and element region |
| **Listener** | Separate CDP connection to collect request/response data (including body) |
| **Stealth** | `stealth_inject` (e.g. `navigator.webdriver = false`) |

---

## Installation


Add to your `Cargo.toml`:

```toml
[dependencies]
rust_drission = { git = "https://github.com/ningning0111/rust_drission" }
```

Or with a specific version/tag when available:

```toml
rust_drission = { git = "https://github.com/ningning0111/rust_drission", tag = "v0.1.0" }
```

**Requirements:** Chrome or Chromium installed, or set `RUST_DRISSION_CHROME` to the browser executable path.

---

## Quick Start(与 DrissionPage 一致)


使用 **ChromiumPage** 一步连接/启动浏览器并控制当前标签页(与 Python `ChromiumPage()` 用法一致):

```rust
use rust_drission::{ChromiumPage, BrowserConfig, CdpError};

fn main() -> Result<(), CdpError> {
    let page = ChromiumPage::new(BrowserConfig::new())?;
    page.get("https://www.baidu.com")?;   // 同 DrissionPage 的 get(url)
    println!("title: {}", page.title()?);

    page.input("#kw", "Rust")?;
    page.click("#su")?;

    if let Some(el) = page.ele("css:#kw")? {  // 同 DrissionPage 的 ele(locator)
        let _tag = el.tag()?;
    }
    Ok(())
}
```

或使用 Browser + Page 分步控制:

```rust
use rust_drission::{Browser, BrowserConfig, CdpError};

fn main() -> Result<(), CdpError> {
    let config = BrowserConfig::new().set_local_port(9222).headless(false);
    let mut browser = Browser::connect_or_launch(config)?;
    let page = browser.new_tab()?;

    page.get("https://www.baidu.com")?;   // 或 page.goto(...)
    println!("title: {}", page.title()?);

    page.input("#kw", "Rust")?;
    page.click("#su")?;

    browser.close();
    Ok(())
}
```

To attach to an already running browser, start Chrome with remote debugging first:

```bash
chrome --remote-debugging-port=9222
```

---

## Documentation & Examples


| Link | Description |
|------|-------------|
| [Usage (USAGE.md)]docs/USAGE.md | Full API usage: browser, page, element, locators, JS, cookies, screenshot, listener |
| [API comparison]docs/API_COMPARISON.md | Differences and missing APIs vs Python DrissionPage |
| [Examples]examples/README.md | `basic`, `page_ops`, `run_js`, `listen_request_response` |

Run examples:

```bash
cargo run --example basic
cargo run --example run_js
```

Optional env vars: `RUST_DRISSION_PORT`, `RUST_DRISSION_CHROME`.

---

## Repository


- **Source:** [github.com/ningning0111/rust_drission]https://github.com/ningning0111/rust_drission
- **Homepage:** [github.com/ningning0111/rust_drission]https://github.com/ningning0111/rust_drission

---

## License


MIT License. See [LICENSE](LICENSE).