Skip to main content
Experimental

The stealth scraping layer is no longer part of seleniumbase-rs.

The layer lives in its own repository, seleniumbase-rs-stealth, as three crates. The features scrape and impersonate and the modules seleniumbase_rs::wire, seleniumbase_rs::scrape and seleniumbase_rs::impersonate are gone from this crate.

MustCodeAl/seleniumbase-rs-stealth

Experimental stealth layer for seleniumbase-rs: TLS/HTTP2 wire formats, a scraping runtime and a browser-identical HTTP client (codec, scrape, mimic)

00
Tip

The full tutorial is part of this site now, under Stealth scraping. Start there.

CrateWasWhat it is
seleniumbase-rs-codecseleniumbase_rs::wirePure wire formats: the TLS ClientHello parser, JA3, JA4, peetprint, the Akamai HTTP/2 fingerprint, the TLS, HTTP/2 and header specs, and the measured browser table.
seleniumbase-rs-scrapefeature scrapeThe cookie jar, StealthIdentity and SessionPolicy, challenge detection and mitigation, the proxy pool, per-site state and events, BrowserScraper (a real Chrome over the pure CDP engine, no TLS spoofing) and the capture tools. Pure Rust.
seleniumbase-rs-mimicfeature impersonateBrowser-identical TLS and HTTP/2 through wreq and BoringSSL: ImpersonationProfile, CustomProfileBuilder, HttpSession, MitmProxy, StealthSession and EphemeralCa. Builds BoringSSL, so it needs CMake and a C/C++ toolchain.

Depending on it#

The crates are not on crates.io. Depend on them by git, next to this crate:

Cargo.toml
Warning

Cargo finds each crate inside the repository by its name. The stealth crates take seleniumbase-rs by its plain git URL, so when your code also uses this crate’s types (sb_cdp::Browser, Fingerprint, …), write the seleniumbase-rs line exactly as above: the same source makes Cargo resolve both to one commit. A different spelling, such as a tag, makes them two different crates to Cargo, and their types do not match. The repository’s README has the current instructions.

Status#

Warning

Experimental. Types and paths may change between commits. Only Chrome 155 on macOS is measured; on another system or Chrome version the impersonation refuses to run instead of guessing. Everything was tested against local servers and a local Chrome, never against live services.

The long guide this page used to hold (the wire formats, re-measuring when Chrome updates, the identity file, BrowserScraper, HttpSession, MitmProxy, StealthSession and their limits) is now the Stealth scraping section of this site. What stays here is the in-browser side: Fingerprint & Stealth Profiles covers what a page can read from inside the browser and how this crate hides it.