# SeleniumBase for Rust > Ask these docs: GET /ask?q= returns JSON { results: [{ href, title, heading, snippet, tab }] }; short keywords rank best. Append .md to any page href for its markdown. > > If the product lacks a feature you need, ask for it: /feature-requests.md ## Guides - [Introduction](/README.md): Welcome to the SeleniumBase for Rust book. - [Working with seleniumbase-rs](/tutorials/getting_started.md): This guide walks you through your first browser automation test with seleniumbase-rs. - [Install](/building.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [FAQ and common problems](/help/common_problems.md): This page collects common pitfalls and their solutions. - [Best practices](/best-practices.md): Habits that keep seleniumbase-rs tests fast, stable and safe. - [Write a test](/rust-test-tooling.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Selectors](/tutorials/selectors.md): Selectors are the addresses your tests use to find elements on the page. - [Waits and Assertions](/tutorials/waits_assertions.md): Browser tests fail most often because they interact with elements before the page is ready. - [Macros](/tutorials/macros.md): seleniumbase-rs exports a set of convenience macros from the crate root. - [Shadow DOM](/tutorials/shadow_dom.md): Web Components often hide markup inside Shadow DOM trees. - [Syntax formats](/help/syntax_formats.md): SeleniumBase for Rust supports three primary ways to express automation: direct API calls in Rust, CLI commands, and JSON-based scenarios. - [HTML inspector](/help/html_inspector.md): The HTML Inspector scans a page for common accessibility and markup issues. - [MFA and TOTP](/tutorials/mfa_totp.md): Multi-factor authentication (MFA) flows that use time-based one-time passwords ( TOTP ) can be automated with seleniumbase-rs. - [Pages with a CAPTCHA](/tutorials/captcha_testing.md): A CAPTCHA exists to stop automation, so a test that has to get past a real one is fighting its own application. - [PDF parsing](/tutorials/pdf_parsing.md): SeleniumBase for Rust can print pages to PDF and extract text from PDF files. - [MasterQA](/tutorials/masterqa.md): MasterQA is a hybrid testing workflow that mixes automated navigation with manual verification steps. - [Behave and Gherkin](/tutorials/behave.md): SeleniumBase for Rust includes a lightweight Gherkin parser and step runner so you can write BDD -style feature files similar to Python's behave… - [Pure CDP](/tutorials/pure_cdp.md): sbcdp drives Chrome directly over the DevTools Protocol. There is no chromedriver, so there is none of the markers a WebDriver leaves in the page. - [CDP mode](/tutorials/cdp_mode.md): CDP mode lets you control the browser through the Chrome DevTools Protocol (CDP). - [Playwright mode](/help/playwright_mode.md): Feature: playwright Playwright Mode uses rustwright, a native Rust CDP engine, to drive Chromium with a Playwright-compatible API. - [GUI automation](/tutorials/gui_automation.md): Some scenarios require controlling the operating system's mouse and keyboard instead of the browser. - [Settings](/tutorials/settings_and_config.md): seleniumbase-rs supports multiple configuration layers: built-in defaults, a global config file, SB environment variables, and programmatic… - [Customize runs](/help/customizing_test_runs.md): SeleniumBase for Rust can be configured through the BrowserConfig builder, a global config file, environment variables, or CLI flags. - [Run settings](/tutorials/run_settings.md): Python SeleniumBase reads a handful of run-wide options from the pytest command line: --demo, --slow, --fast, --demo-sleep, --message-duration and a… - [Headless and headed](/tutorials/headless.md): When to run the browser without a window, what each engine does by default, how to switch, and what headless mode changes for stealth, containers and debugging. - [Browser profiles](/tutorials/browser_profiles.md): seleniumbase-rs can import external browser profile payloads in a generic anti-detect JSON format. - [Tracing and logs](/tutorials/tracing.md): seleniumbase-rs uses the tracing ecosystem for structured logging. - [Recorder mode](/tutorials/recorder_mode.md): Recorder Mode captures your browser interactions and generates either a Rust source file or a JSON action file that can be replayed later. - [Recorder CLI](/help/recorder_cli.md): There are three ways to produce something you can replay. - [Selenium IDE](/tutorials/selenium_ide.md): Legacy .html format If you have legacy Selenium IDE .html test cases, SeleniumBase for Rust can parse them into a list of commands that you can… - [Results and profiles](/tutorials/results_and_profiles.md): Feature: turso Two things a team ends up needing are a history of test runs, and a safe place for browser profiles. - [Test Plugins](/tutorials/test_plugins.md): A test plugin runs code around a test: when it starts, when it fails (with the browser still open, so it can take evidence), and when it finishes. - [Charts](/tutorials/charts.md): Generate charts from your test data and save them as standalone HTML files. - [Tours](/tutorials/tours.md): Create guided product tours directly from your tests. Tours are rendered as HTML overlays that walk the user through elements. - [Translations](/tutorials/translations.md): SeleniumBase for Rust includes a small translator utility that maps simple action names into multiple languages. - [Cloud uploads](/tutorials/cloud_integrations.md): SeleniumBase for Rust can upload test artifacts (screenshots, logs, PDFs) to Amazon S3, Azure Blob Storage, and Google Cloud Storage. - [From Python](/python-migration.md): Moving an existing Python SeleniumBase or Selenium WebDriver test suite to Rust is rarely a pure translation exercise. - [From Playwright](/playwright-migration.md): sbrs import-playwright converts Playwright tests and scripts into Rust tests for the pure CDP engine. - [From Puppeteer](/puppeteer-migration.md): sbrs import-puppeteer converts Puppeteer code into Rust tests for the pure CDP engine. - [Deployment](/deployment.md): How to run seleniumbase-rs somewhere other than your laptop: a container, a CI job, a Selenium Grid, or as an MCP server for an AI agent. - [Docker](/help/docker.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… ## Stealth - [UC mode](/tutorials/uc_mode.md): Undetected (UC) mode reduces the fingerprints that websites use to identify automated browsers. - [UC mode options](/help/uc_mode.md): UC Mode launches Chromium with stealth flags and applies JavaScript evasions that mask navigator.webdriver, plugins, WebGL, and other fingerprints. - [Fingerprints](/tutorials/fingerprint_stealth.md): Websites detect automation by looking at many browser signals: navigator.webdriver, user agent, platform, screen size, hardware concurrency, WebGL… - [Binary Patching](/tutorials/binary_patching.md): Chromedriver and similar Chromium drivers embed static signatures that bot detection scripts can read at runtime. - [Overview](/stealth/overview.md): Experimental This tutorial moved here from seleniumbase-rs on 2026-10-15, when the stealth layer became its own crates. - [Stealth scraping](/tutorials/stealth_scraping.md): Experimental The stealth scraping layer is no longer part of seleniumbase-rs. - [StealthSession](/stealth/stealth-session.md): Crate: mimic mimic::stealthsession::StealthSession joins the pieces. - [BrowserScraper](/stealth/browser-scraper.md): Crate: scrape scrape::runtime::browserscraper::BrowserScraper drives one real Chrome through the pure CDP engine. - [HttpSession](/stealth/http-session.md): Experimental mimic::httpsession::HttpSession sends plain HTTP requests that look like the Chrome a browser page came from. - [Identity and cookies](/stealth/identity.md): Experimental The cookie jar scrape::jar::store::CookieJar is an RFC 6265 cookie store with the RFC 6265bis rules Chrome ships. - [MitmProxy](/stealth/mitm-proxy.md): Experimental Summary for AI exports: mimic::tlsserver makes an ephemeral P-256 certificate authority in memory and issues one-day leaves for single… - [Wire formats](/stealth/wire-formats.md): Experimental Summary for AI exports: every wire value comes from a capture tool and is stored as JSON in crates/codec/src/measured. - [Examples](/stealth/examples.md): Experimental Five small programs in examples/ run the layers on your own machine. - [Limits](/stealth/limits.md): Experimental Chrome 155.0.8059.40 on macOS, and nothing else. Every other browser and system pair is refused with NotMeasured. ## CLI and MCP - [TL;DR](/help/cli_tldr.md): The commands you reach for most, by task. Every flag here is in sbrs --help; the CLI reference lists them all and CLI usage explains them. - [CLI usage](/tutorials/cli_usage.md): The sbrs binary provides quick commands for common tasks: opening pages, running smoke tests, executing CDP commands, patching binaries, generating… - [CLI reference](/help/cli_reference.md): Every sbrs command with its arguments and flags, generated from the parser. - [Commander](/help/commander.md): Feature: tui Commander is a terminal UI for browsing and running tests or examples. - [Case plans](/help/caseplans.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Behave commander](/help/behave-gui.md): Feature: tui sbrs behave-gui (also sbrs gui-behave) is a terminal app that lists the Gherkin feature files of a project, runs the scenarios you mark… - [MCP servers](/tutorials/mcp_server.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [DevTools MCP servers](/tutorials/devtools_mcp.md): Browser vendors ship their own MCP servers that give a model the browser's developer tools: performance traces, network and console inspection, the… - [Vibe coding](/tutorials/vibe_coding.md): "Vibe coding" here means: you describe a browser test in plain words, an AI agent drives a real browser to work out how, and it hands you a Rust test… ## Plugins and ecosystem - [Overview](/plugins/overview.md): Early Feature: plugins Plugins for seleniumbase-rs: Rust crates that change how a browser starts and what every tab gets, the way puppeteer-extra… - [Use plugins](/tutorials/plugins.md): Feature: plugins A browser plugin is a Rust crate that changes how a browser starts and what every tab gets: block images, add a script to every… - [Choose plugins](/plugins/selecting.md): Early Feature: plugins The official plugins ship with seleniumbase-rs, one cargo feature each, and you turn them on by name, with no code: on the… - [Write a plugin](/plugins/writing-your-own.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Architecture](/plugins/architecture.md): Proposed This page summarizes the design of the plugin platform, version 2. - [shield](/plugins/shield.md): Early Feature: plugin-shield Privacy hardening for the Chromium browser that seleniumbase-rs starts. - [block-resources](/plugins/block-resources.md): Feature: plugin-block-resources Chromium only A seleniumbase-rs plugin that stops pages from loading some resources. - [crx](/plugins/crx.md): A seleniumbase-rs plugin that loads packed Chrome extensions (.crx files). - [wasm](/plugins/wasm.md): Run seleniumbase-rs plugins that are written in any language that compiles to WebAssembly (Rust, C, Zig, Go, AssemblyScript, or plain WAT), sandboxed… - [Overview](/ecosystem/overview.md): seleniumbase-rs has companion projects in their own repositories. Their documentation is part of this site. - [Browser extension](/ecosystem/browser-extension.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Tauri plugin](/ecosystem/tauri.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Homebrew tap](/ecosystem/homebrew.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… ## Reference - [API reference](/tutorials/api_reference.md): BaseCase is the main entry point for writing browser automation in seleniumbase-rs. ## Contributing - [Contributing](/CONTRIBUTING.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Build from source](/contributing/from-source.md): Clone seleniumbase-rs, set up Rust 1.99 and a C compiler, build the library and the sbrs binaries, and run the checks every change must pass. - [Developer guide](/DEVELOPER_GUIDE.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Debugging](/contributing/debugging.md): Find out why a run fails: logs, headed and slowed-down runs, evidence on failure, a mocked browser, HAR recordings, sbrs doctor, driver checks and the MCP server's logs. - [Benchmarking](/contributing/benchmarking.md): Run the cpu and cdplatency harnesses in benches/, keep their output, and compare a change against main on a fair footing. - [Upstream sync](/UPSTREAM_SYNC.md): This crate follows the Python SeleniumBase and seleniumbase-mcp releases. - [Submit the Fig spec](/completions/README.md): fig-sbrs.ts is a completion spec for the sbrs command in the Fig format, the format of the withfig/autocomplete repository. - [Feature Requests](/feature-requests.md): What is missing from SeleniumBase for Rust that would help your tests? - [Fingerprint API v2](/design/fingerprint-api-v2.md): Why version 2 of the fingerprint API keeps one Spoof per setting and a separate StealthPolicy, and what changed from version 1. - [The CLI on usage](/design/usage-cli.md): Status: accepted (2026-10-17): derives, package seleniumbase-rs-cli, work starts after the fingerprint API v2 lands. - [Stealth parity plan](/design/stealth_parity_plan.md): > Moved: on 2026-10-15 (version 0.3.0) this code moved to seleniumbase-rs-stealth (crates seleniumbase-rs-wire, -scrape, -impersonate); this plan is… - [001: Stealth architecture](/adr/001-stealth-architecture.md): Status Accepted Context Python SeleniumBase provides multiple undetected/stealth modes. - [002: Multi-driver and Playwright](/adr/002-multi-driver-and-playwright.md): Status Accepted Context The port needs to support both WebDriver (thirtyfour) and a Playwright-compatible backend (the rustwright crate), plus… - [003: Stealth scraping layout](/adr/003-stealth-scraping-layout.md): > Moved: on 2026-10-15 (version 0.3.0) this code moved to seleniumbase-rs-stealth (crates seleniumbase-rs-wire, -scrape, -impersonate); the paths… - [004: Plugin framework](/adr/004-plugin-framework.md): Status Accepted, in progress. ## BaseCase API - [Lifecycle and navigation](/api/lifecycle-navigation.md): Create and close a BaseCase session, open pages and move through history. - [Interaction](/api/interaction.md): Click, type, select, hover, drag, press keys and scroll. - [Waits and assertions](/api/waits-assertions.md): Wait for elements and text, assert on the page, and collect deferred assertions. - [Queries](/api/queries.md): Read text, attributes, properties, counts and page state. - [Windows and frames](/api/windows-frames.md): Switch windows, tabs and frames, and drive several browsers. - [Cookies and storage](/api/cookies-storage.md): Read and write cookies, local storage and session storage. - [Screenshots and scripts](/api/screenshots-scripts.md): Take screenshots, run JavaScript and change the DOM. - [Files and PDF](/api/files.md): Download and upload files and work with PDFs. - [CDP and UC helpers](/api/cdp-uc.md): Chrome DevTools and undetected-mode helpers, including the GUI bypass helpers. - [Alerts and MFA](/api/alerts-mfa.md): Handle JavaScript dialogs and generate TOTP codes. - [Tours and utilities](/api/tours-recorder.md): Tours, presentations, charts, the recorder and other helpers. - [Capability traits](/api/traits.md): BrowserApi, ElementApi, AssertionApi and ScreenshotApi, shared by both engines. - [Crate root](/api/crate-root.md): What seleniumbasers re-exports at its root and what each item is for. - [More helpers](/tutorials/remaining_helpers.md): { .layout-tree summary { list-style: none; } .layout-tree summary::-webkit-details-marker { display: none; } .layout-tree .lt-row:hover {… - [Stability](/ABI_API.md): This page describes the public API surface of seleniumbase-rs, the stability guarantees that apply, and how to integrate the crate with foreign code. ## Plugin API - [Overview](/plugins/api/overview.md): Every public item of seleniumbase-rs-plugin, the browser-plugin API of seleniumbase-rs, its testing crate and the host side in seleniumbase-rs, with exact signatures and examples. - [Plugin trait](/plugins/api/plugin-trait.md): Reference for the Plugin trait of seleniumbase-rs-plugin: name, dependencies, requirements, metadata, perlaunch, packages, the four hooks, the Result alias, PluginError and the asynctrait macro. - [Launch settings](/plugins/api/launch.md): Reference for LaunchContext, LaunchSettings, ProfileView, Engine, BrowserFamily and WebRtcPolicy: what a plugin is checked against and what beforelaunch may change, with what each engine fills in and applies. - [Handles](/plugins/api/handles.md): Reference for BrowserHandle and PageHandle, the two traits through which a plugin reaches the browser and its tabs, and what the pure CDP engine, the WebDriver engine and the test fakes do behind each method. - [PluginSet](/plugins/api/plugin-set.md): Reference for PluginSet, the plugins a program uses: building a set, default grants and trust, strict sets, the check against a browser and a host, the audit, the run order, the hook runners and the errors each one returns. - [Configuration](/plugins/api/configuration.md): Reference for Configurable, Descriptor, PluginSpec and Registry: building plugins from a name and a TOML or JSON options value, as the settings file, SBPLUGINS and the command line do. - [Metadata](/plugins/api/metadata.md): Reference for Metadata, what a plugin declares about itself (category, version, summary, capabilities, ordering edges, phase, seals and budgets), and for Category, Phase, Seals and Budgets. - [Capabilities](/plugins/api/capabilities.md): Reference for Capability and its string forms, risk levels and enforcement, CapabilitySet, the scopes HostScope, NetScope and PathScope, RawKind, Risk, Enforcement, ParseCapabilityError, HostInfo and HostKind, and the switchpolicy module of refused switches and features. - [Requirements and packages](/plugins/api/requirements.md): Reference for Requirements, the conditions a plugin needs from the browser (CHROMIUMONLY, LAUNCHONLY, HEADFUL, RUNLAST), and Package, the JavaScript and CSS a plugin loads into pages, with the init script each package becomes. - [Host](/plugins/api/host.md): Reference for the host side of the plugin API in seleniumbase-rs: the plugins features, the pluginapi and builtinplugins re-exports, the launch builders of both engines, Browser::connectwithplugins, pluginhost::builtinregistry, build and buildwith, the request guard, and SeleniumBaseError::Plugin. - [Selection](/plugins/api/selection.md): Reference for turning plugins on by name in seleniumbase-rs: PluginSelection, SBPLUGINS, the settings loaders, and the command-line helpers of cli::plugincmd (PluginChoice, the checks, and the text of sbrs plugin list and info). - [Testing](/plugins/api/testing.md): Reference for seleniumbase-rs-plugin-testing: RecordingPage and RecordingBrowser, recording fakes of the plugin handles, the Call they record, and blockon, to test a plugin's hooks without a browser or an async runtime. ## Stealth API: codec - [codec](/stealth/api/codec.md): API reference of seleniumbase-rs-codec: the pure wire formats of the stealth layer. ClientHello, JA3, JA4, peetprint, Akamai HTTP/2 strings, HTTP/2 frames and HPACK, the TLS, HTTP/2 and header specs, and the measured browser tables. - [TlsSpec](/stealth/api/codec-tls-spec.md): The TLS profile in seleniumbase-rs-codec: TlsSpec, Alps, KnownGap and SpecError, the reproducibility check against what BoringSSL can emit, and the custom JA3, JA4 and peetprint overlays. - [ClientHello](/stealth/api/codec-client-hello.md): The TLS ClientHello parser of seleniumbase-rs-codec: ClientHello, Extension, ClientHelloError, neededlen, the extid constants and the GREASE helpers. - [JA3 and peetprint](/stealth/api/codec-ja3.md): JA3 and the peetprint in seleniumbase-rs-codec: Ja3, Ja3Field, Ja3Error, Peetprint, Slot, PeetField, PeetprintError, and the hex and MD5 helpers. - [JA4](/stealth/api/codec-ja4.md): JA4 in seleniumbase-rs-codec, after FoxIO's TLS-client definition: Ja4, Ja4Raw (JA4r and JA4ro), Ja4Facts, Ja4Order, Ja4Diff, Ja4AField, Ja4Section, Ja4Error and the a-section helpers. - [H2Spec](/stealth/api/codec-h2-spec.md): The HTTP/2 profile in seleniumbase-rs-codec: H2Spec (alias Http2Spec), its constructors from a capture, a preface or an Akamai string, the check against what the wreq HTTP/2 stack can send, settingid and SpecError. - [HTTP/2 frames](/stealth/api/codec-h2-frames.md): HTTP/2 frame reading in seleniumbase-rs-codec: readpreface, PrefaceReader, H2Preface, Frame, readframe, encodeframe, H2CaptureError, the HPACK decoder and the Huffman decoder. - [Akamai](/stealth/api/codec-akamai.md): Akamai HTTP/2 fingerprint strings in seleniumbase-rs-codec: Akamai, PriorityFrame, Pseudo, AkamaiError and the bounds of the parser. - [HeaderSpec](/stealth/api/codec-header-spec.md): Header names, order and values per request shape in seleniumbase-rs-codec: HeaderSpec, HeaderValue placeholders, HeaderIdentity, RequestShape, the HTTP/2 priority table and HeaderSpecError. - [Emulation](/stealth/api/codec-emulation.md): The measured browser tables of seleniumbase-rs-codec: Emulation, Provenance, EmulationError and the lookups get, getversion, forkind, measured, trymeasured, newest and measuredsystems. - [Registries](/stealth/api/codec-ids.md): IANA names of the TLS and HTTP/2 ids in seleniumbase-rs-codec (Registry and its tables), and the lists of what BoringSSL can emit and what the spec refuses. ## Stealth API: scrape - [scrape](/stealth/api/scrape.md): API reference of seleniumbase-rs-scrape: stealth scraping without TLS spoofing over the pure CDP engine. BrowserScraper, challenge detection and mitigation, egress, the cookie jar, the stealth identity, the ledger and the capture tools. ## Tauri plugin API - [Overview](/ecosystem/tauri-api/overview.md): The W3C WebDriver endpoint that tauri-plugin-sbrs-automation serves inside a Tauri app: base URL, token, request and reply format, error codes, and every command group. - [Status](/ecosystem/tauri-api/status.md): GET /status of the Tauri plugin's WebDriver endpoint: whether the endpoint answers, before any session. - [Sessions](/ecosystem/tauri-api/sessions.md): Start and end the WebDriver session of the Tauri plugin: POST /session and DELETE /session/{sessionId}. - [Timeouts](/ecosystem/tauri-api/timeouts.md): Read and set the session timeouts of the Tauri plugin's WebDriver endpoint: script, pageLoad and implicit. - [Navigation](/ecosystem/tauri-api/navigation.md): Navigate the Tauri app's window and read its URL, title and page source through the plugin's WebDriver endpoint. - [Window](/ecosystem/tauri-api/window.md): The window commands of the Tauri plugin's WebDriver endpoint: the one handle, the window rectangle, maximize, minimize and full screen. - [Frames](/ecosystem/tauri-api/frames.md): Enter same-origin frames of the Tauri app's page and leave them: POST /frame and POST /frame/parent. - [Find elements](/ecosystem/tauri-api/elements.md): Find elements in the Tauri app's page by CSS selector, XPath, link text or tag name, and get the active element, through the plugin's WebDriver endpoint. - [Element state](/ecosystem/tauri-api/element-state.md): Read an element's text, tag name, rectangle, enabled, selected and displayed state, attributes, properties and CSS through the Tauri plugin's WebDriver endpoint. - [Element interaction](/ecosystem/tauri-api/element-interaction.md): Click, clear and type into elements of the Tauri app's page through the plugin's WebDriver endpoint, simulated in the page. - [Scripts](/ecosystem/tauri-api/scripts.md): Run JavaScript, sync and async, in the current frame of the Tauri app's page through the plugin's WebDriver endpoint. - [Actions](/ecosystem/tauri-api/actions.md): W3C actions on the Tauri plugin's WebDriver endpoint: one keyboard, mouse pointers and pauses, simulated with DOM events in the page. - [User prompts](/ecosystem/tauri-api/alerts.md): Alert, confirm and prompt on the Tauri plugin's WebDriver endpoint: simulated dialogs that are answered when they open, with the answer set before. - [Screenshots](/ecosystem/tauri-api/screenshots.md): Screenshots of the Tauri app's page or of one element, as base64 PNG, through the plugin's WebDriver endpoint (macOS only for now). ## How it works - [WebDriver and drivers](/concepts/webdriver.md): What a WebDriver driver is, how a BaseCase command reaches the browser, and how seleniumbase-rs finds and starts chromedriver. - [DevTools Protocol (CDP)](/concepts/cdp.md): What CDP is, how the pure CDP engine talks to Chrome without a driver, and how CDP mode differs. - [Detection and spoofing](/concepts/detection.md): What a website can read to spot an automated browser, and at which layer seleniumbase-rs answers each signal. - [Network identity](/concepts/network.md): What a site learns from the connection itself: IP address, proxies, WebRTC leaks, and TLS and HTTP/2 fingerprints. - [Sessions, cookies and storage](/concepts/sessions-and-state.md): What a browser session holds, where cookies and web storage live, and how seleniumbase-rs saves and restores a signed-in state. - [Glossary](/glossary.md): Short, plain definitions of the terms used across the seleniumbase-rs docs, from WebDriver, CDP and UC mode to fingerprints, plugins and TLS fingerprints, each with a link to the page that explains it. ## Why Rust? - [Why Rust?](/why-rust.md): Short answer. - [Taking advantage of Rust](/rust-advantages.md): How async, Result, traits, types and Cargo make browser tests faster to write and harder to break. - [How it compares](/comparison.md): Where seleniumbase-rs fits among the tools people use to automate a browser, and where each of them is the better choice. - [Performance](/performance.md): Rust's low runtime overhead and native binaries can make test orchestration faster, especially for suites that process a lot of data, generate… - [Benchmarks](/benchmarks.md): What the library costs, measured, and what Chrome costs instead. For advice on making your own tests faster, see Performance. - [Reliability](/reliability.md): Reliable browser automation requires more than a good API. - [Security](/security.md): Rust's memory-safety guarantees, explicit error handling, and type system make the implementation of seleniumbase-rs more robust than many… - [Python parity](/parity.md): Generated by tools/parity/renderdocs.py from parity/api.toml; do not edit by hand. ## Releases - [Changelog](/changelog.md): Generated from CHANGELOG.md by tools/docs7changelog.py. The versions follow Semantic Versioning. Latest release: v0.5.1 v0.5.1 on GitHub.