zendriver 0.2.21

Async-first, undetectable browser automation via the Chrome DevTools Protocol
Documentation
[package]
name = "zendriver"
description = "Async-first, undetectable browser automation via the Chrome DevTools Protocol"
version = "0.2.21"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
readme = "../../README.md"
homepage = "https://github.com/TurtIeSocks/zendriver-rs"
documentation = "https://docs.rs/zendriver"
keywords = ["browser", "automation", "cdp", "chrome", "stealth"]
categories = ["web-programming", "api-bindings"]

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints]
workspace = true

[features]
default = []
# Enables real-Chrome integration tests (requires Chrome installed on $PATH).
integration-tests = ["dep:wiremock", "dep:serial_test", "interception", "expect", "cloudflare", "imperva", "datadome", "monitor", "tracker-blocking"]
# Nightly stealth tests against external sites (sannysoft, areyouheadless).
# Separate from integration-tests because external sites flake.
stealth-tests = ["integration-tests"]
# Nightly cloudflare bypass tests against external demos (nopecha).
# Separate from integration-tests because external sites flake.
cloudflare-tests = ["cloudflare", "integration-tests"]
# Re-exports the MockConnection testing helper for downstream users.
testing = ["zendriver-transport/testing"]
# Network interception via the Fetch CDP domain.
interception = ["dep:zendriver-interception"]
# expect_* helpers (request/response/dialog/download); standalone today.
expect = []
# Cloudflare Turnstile bypass; pulls in interception.
cloudflare = ["interception", "dep:zendriver-cloudflare"]
# Imperva WAF / Incapsula bypass; pulls in interception.
imperva = ["interception", "dep:zendriver-imperva"]
# Network-touching Imperva nightly tests (real protected sites).
imperva-tests = ["imperva", "integration-tests"]
# DataDome anti-bot bypass; pulls in interception.
datadome = ["interception", "dep:zendriver-datadome"]
# Network-touching DataDome nightly tests (real protected sites).
datadome-tests = ["datadome", "integration-tests"]
# Country -> coherent locale/languages (BrowserBuilder::geo_locale).
geo = ["zendriver-stealth/geo"]
# Chrome for Testing binary downloader.
fetcher = ["dep:zendriver-fetcher"]
# Network-touching fetcher tests (CfT manifest, real downloads).
fetcher-network-tests = ["fetcher"]
# Persistent network monitor (tab.monitor()).
monitor = []
# Opt-in third-party tracker/fingerprinter host blocking (bundled curated
# list + runtime BYO). Implies interception; the bundled list (`include_str!`)
# only adds binary size when this feature is on.
tracker-blocking = ["interception", "dep:reqwest", "dep:dirs"]

[dependencies]
zendriver-transport.workspace = true
zendriver-stealth.workspace   = true
zendriver-interception        = { workspace = true, optional = true }
zendriver-cloudflare          = { workspace = true, optional = true }
zendriver-imperva             = { workspace = true, optional = true }
zendriver-datadome            = { workspace = true, optional = true }
zendriver-fetcher             = { workspace = true, optional = true }
async-trait.workspace         = true
chromiumoxide_cdp.workspace   = true
tokio.workspace               = true
tokio-util.workspace          = true
serde.workspace               = true
serde_json.workspace          = true
thiserror.workspace           = true
tracing.workspace             = true
url.workspace                 = true
percent-encoding.workspace    = true
tempfile.workspace            = true
futures.workspace             = true
regex.workspace               = true
bitflags.workspace            = true
unicode-segmentation.workspace = true
rand.workspace                = true
base64.workspace              = true
zip.workspace                 = true
# Optional: only enabled by the integration-tests feature so the deps
# can be gated via `dep:` syntax (dev-dependencies are not addressable
# from `[features]`).
wiremock    = { workspace = true, optional = true }
serial_test = { workspace = true, optional = true }
reqwest     = { workspace = true, optional = true }
dirs        = { workspace = true, optional = true }

[target.'cfg(unix)'.dependencies]
libc = "0.2"

[target.'cfg(windows)'.dependencies]
win32job = "2.0"

[dev-dependencies]
tokio-test.workspace          = true
insta.workspace               = true
tracing-subscriber.workspace  = true
# Cross-platform process enumeration for the orphan-process leak audit in
# tests/prerelease_verification.rs (previously shelled out to `ps`, which
# confined that regression lock to Unix).
sysinfo.workspace             = true
zendriver-transport = { workspace = true, features = ["testing"] }

[[test]]
name = "datadome_v0"
required-features = ["datadome"]

[[example]]
name = "hello"
required-features = []

[[example]]
name = "set_user_agent"
required-features = []

[[example]]
name = "browserscan"
required-features = []

[[example]]
name = "highlight_links"
required-features = []

[[example]]
name = "form_demo"
required-features = []

[[example]]
name = "wait_for_page"
required-features = []

[[example]]
name = "multi_tab"
required-features = []

[[example]]
name = "iframe_inspect"
required-features = []

[[example]]
name = "cookies_persist"
required-features = []

[[example]]
name = "local_storage_demo"
required-features = []

[[example]]
name = "nav_history"
required-features = []

[[example]]
name = "downloads_dir"
required-features = []

[[example]]
name = "proxy_auth"
required-features = ["interception"]

[[example]]
name = "browser_context_isolation"
required-features = ["interception"]

[[example]]
name = "intercept_block_ads"
required-features = ["interception"]

[[example]]
name = "intercept_modify_headers"
required-features = ["interception"]

[[example]]
name = "expect_login_response"
required-features = ["expect"]

[[example]]
name = "cloudflare_bypass"
required-features = ["cloudflare"]

[[example]]
name = "imperva_bypass"
required-features = ["imperva"]

[[example]]
name = "fetcher_demo"
required-features = ["fetcher"]

[[example]]
name = "persona_basic"
required-features = []

[[example]]
name = "network_monitor"
required-features = ["monitor"]

[[example]]
name = "browser_request"
required-features = []