[package]
edition = "2024"
rust-version = "1.85"
name = "drission"
version = "0.3.2"
authors = ["极数本源 (apizero.cn)"]
build = false
exclude = [
"/dist",
"/docs",
"/target",
"/yidun_samples",
"/yidun-train",
"/dump-env",
"/dump-env-fp",
"/douyin-env",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Rust 反检测浏览器自动化 + 内置验证码识别:ddddocr 离线 OCR 与图片滑块缺口距离(极验/顶象),默认 Google Chrome/CDP、可选 Camoufox/Firefox、自动过 Cloudflare 盾、高并发爬虫与 XHR 监听拦截,DrissionPage 风格 API。Anti-detect browser automation in Rust with built-in ddddocr captcha OCR + slider-gap solving, Chrome/CDP by default, optional Camoufox, Cloudflare bypass — a Rust DrissionPage."
homepage = "https://apizero.cn"
documentation = "https://docs.rs/drission"
readme = "README.md"
keywords = [
"captcha",
"ddddocr",
"anti-detect",
"drissionpage",
"browser-automation",
]
categories = [
"web-programming",
"api-bindings",
"computer-vision",
]
license-file = "LICENSE"
repository = "https://github.com/MageGojo/drission-rs"
resolver = "2"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = [
"--cfg",
"docsrs",
]
[features]
camoufox = []
cdp = []
default = ["cdp"]
fontdue = ["dep:fontdue"]
image = ["dep:image"]
impersonate = [
"camoufox",
"dep:wreq",
"dep:wreq-util",
]
ocr = [
"dep:image",
"dep:tract-onnx",
"dep:fontdue",
]
signer = ["dep:rquickjs"]
slider = ["camoufox"]
tract-onnx = ["dep:tract-onnx"]
[lib]
name = "drission"
path = "src/lib.rs"
[[example]]
name = "cdp_demo"
path = "examples/cdp/cdp_demo.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_advanced"
path = "examples/cdp/cdp_advanced.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_fetch"
path = "examples/cdp/cdp_fetch.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_download"
path = "examples/cdp/cdp_download.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_keyboard"
path = "examples/cdp/cdp_keyboard.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_pool"
path = "examples/cdp/cdp_pool.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_dump_env"
path = "examples/cdp/cdp_dump_env.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_extras"
path = "examples/cdp/cdp_extras.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_recorder"
path = "examples/cdp/cdp_recorder.rs"
required-features = ["cdp"]
[[example]]
name = "learn_basics"
path = "examples/learn/learn_basics.rs"
required-features = ["cdp"]
[[example]]
name = "bilibili_covers"
path = "examples/learn/bilibili_covers.rs"
required-features = ["cdp"]
[[example]]
name = "re_xhr_break"
path = "examples/reverse/re_xhr_break.rs"
required-features = ["cdp"]
[[example]]
name = "re_scripts"
path = "examples/reverse/re_scripts.rs"
required-features = ["cdp"]
[[example]]
name = "re_hook"
path = "examples/reverse/re_hook.rs"
required-features = ["cdp"]
[[example]]
name = "re_anti_debug"
path = "examples/reverse/re_anti_debug.rs"
required-features = ["cdp"]
[[example]]
name = "re_replay"
path = "examples/reverse/re_replay.rs"
required-features = [
"cdp",
"impersonate",
]
[[example]]
name = "re_verify"
path = "examples/reverse/re_verify.rs"
required-features = ["cdp"]
[[example]]
name = "re_rrmj"
path = "examples/reverse/re_rrmj.rs"
required-features = ["cdp"]
[[example]]
name = "re_rrmj_replay"
path = "examples/reverse/re_rrmj_replay.rs"
required-features = [
"cdp",
"impersonate",
]
[[example]]
name = "re_probe"
path = "examples/reverse/re_probe.rs"
required-features = ["cdp"]
[[example]]
name = "re_yt_sig"
path = "examples/reverse/re_yt_sig.rs"
required-features = ["cdp"]
[[example]]
name = "re_yt_sig2"
path = "examples/reverse/re_yt_sig2.rs"
required-features = ["cdp"]
[[example]]
name = "re_yt_diag"
path = "examples/reverse/re_yt_diag.rs"
required-features = ["cdp"]
[[example]]
name = "re_yt_play"
path = "examples/reverse/re_yt_play.rs"
required-features = ["cdp"]
[[example]]
name = "re_yt_protocol"
path = "examples/reverse/re_yt_protocol.rs"
required-features = ["signer"]
[[example]]
name = "yt_dl"
path = "examples/reverse/yt_dl.rs"
required-features = [
"signer",
"cdp",
]
[[example]]
name = "cdp_fp"
path = "examples/antidetect/cdp_fp.rs"
required-features = ["cdp"]
[[example]]
name = "gpu_probe"
path = "examples/antidetect/gpu_probe.rs"
required-features = ["cdp"]
[[example]]
name = "hl_ch"
path = "examples/antidetect/hl_ch.rs"
required-features = ["cdp"]
[[example]]
name = "cdp_fingerprint"
path = "examples/antidetect/cdp_fingerprint.rs"
required-features = ["cdp"]
[[example]]
name = "fp_verify"
path = "examples/antidetect/fp_verify.rs"
required-features = ["cdp"]
[[example]]
name = "env_signer"
path = "examples/env/env_signer.rs"
required-features = ["signer"]
[[example]]
name = "det_probe"
path = "examples/ocr/det_probe.rs"
required-features = [
"cdp",
"ocr",
]
[[example]]
name = "ocr_hotswap"
path = "examples/ocr/ocr_hotswap.rs"
required-features = ["ocr"]
[[example]]
name = "clickword_cli"
path = "examples/ocr/clickword_cli.rs"
required-features = ["ocr"]
[[example]]
name = "clickword_eval"
path = "examples/ocr/clickword_eval.rs"
required-features = ["ocr"]
[[example]]
name = "yidun_click"
path = "examples/clickword/yidun_click.rs"
required-features = [
"cdp",
"ocr",
]
[[example]]
name = "yidun_click_stable"
path = "examples/clickword/yidun_click_stable.rs"
required-features = [
"cdp",
"ocr",
]
[[example]]
name = "yidun_collect"
path = "examples/clickword/yidun_collect.rs"
required-features = [
"cdp",
"ocr",
]
[[example]]
name = "yidun_probe"
path = "examples/clickword/yidun_probe.rs"
required-features = ["cdp"]
[[example]]
name = "yidun_trace"
path = "examples/clickword/yidun_trace.rs"
required-features = [
"cdp",
"ocr",
]
[[example]]
name = "yidun_detect"
path = "examples/clickword/yidun_detect.rs"
required-features = ["cdp"]
[[example]]
name = "dx_slide"
path = "examples/slider/dx_slide.rs"
required-features = ["slider"]
[[example]]
name = "geetest_slide"
path = "examples/slider/geetest_slide.rs"
required-features = ["slider"]
[[example]]
name = "slider_local"
path = "examples/slider/slider_local.rs"
required-features = ["slider"]
[[example]]
name = "ocr_captcha"
path = "examples/ocr/ocr_captcha.rs"
required-features = [
"camoufox",
"ocr",
]
[[example]]
name = "apizero_login"
path = "examples/ocr/apizero_login.rs"
required-features = [
"camoufox",
"ocr",
]
[[example]]
name = "quickstart"
path = "examples/camoufox/quickstart.rs"
required-features = ["camoufox"]
[[example]]
name = "fetch_browser"
path = "examples/camoufox/fetch_browser.rs"
required-features = ["camoufox"]
[[example]]
name = "page_basics"
path = "examples/camoufox/page_basics.rs"
required-features = ["camoufox"]
[[example]]
name = "page_extras"
path = "examples/camoufox/page_extras.rs"
required-features = ["camoufox"]
[[example]]
name = "extras_demo"
path = "examples/camoufox/extras_demo.rs"
required-features = ["camoufox"]
[[example]]
name = "relative_shadow"
path = "examples/camoufox/relative_shadow.rs"
required-features = ["camoufox"]
[[example]]
name = "new_tab"
path = "examples/camoufox/new_tab.rs"
required-features = ["camoufox"]
[[example]]
name = "ele_extras"
path = "examples/camoufox/ele_extras.rs"
required-features = ["camoufox"]
[[example]]
name = "actions_drag"
path = "examples/camoufox/actions_drag.rs"
required-features = ["camoufox"]
[[example]]
name = "form_input"
path = "examples/camoufox/form_input.rs"
required-features = ["camoufox"]
[[example]]
name = "form_fill"
path = "examples/camoufox/form_fill.rs"
required-features = ["camoufox"]
[[example]]
name = "file_upload"
path = "examples/camoufox/file_upload.rs"
required-features = ["camoufox"]
[[example]]
name = "screencast"
path = "examples/camoufox/screencast.rs"
required-features = ["camoufox"]
[[example]]
name = "download_manager"
path = "examples/camoufox/download_manager.rs"
required-features = ["camoufox"]
[[example]]
name = "anti_detect"
path = "examples/antidetect/anti_detect.rs"
required-features = ["camoufox"]
[[example]]
name = "stealth_check"
path = "examples/antidetect/stealth_check.rs"
required-features = ["camoufox"]
[[example]]
name = "cf_check"
path = "examples/cloudflare/cf_check.rs"
required-features = ["camoufox"]
[[example]]
name = "cf_flow_capture"
path = "examples/cloudflare/cf_flow_capture.rs"
required-features = ["camoufox"]
[[example]]
name = "cf_jsd_recon"
path = "examples/cloudflare/cf_jsd_recon.rs"
required-features = ["camoufox"]
[[example]]
name = "exa_cf"
path = "examples/cloudflare/exa_cf.rs"
required-features = ["cdp"]
[[example]]
name = "cf_turnstile_recon"
path = "examples/cloudflare/cf_turnstile_recon.rs"
required-features = ["cdp"]
[[example]]
name = "cf_turnstile_dump"
path = "examples/cloudflare/cf_turnstile_dump.rs"
required-features = ["cdp"]
[[example]]
name = "cf_turnstile_e2e"
path = "examples/cloudflare/cf_turnstile_e2e.rs"
required-features = ["cdp"]
[[example]]
name = "cf_turnstile_hybrid"
path = "examples/cloudflare/cf_turnstile_hybrid.rs"
required-features = ["cdp"]
[[example]]
name = "concurrent_listen"
path = "examples/network/concurrent_listen.rs"
required-features = ["camoufox"]
[[example]]
name = "intercept"
path = "examples/network/intercept.rs"
required-features = ["camoufox"]
[[example]]
name = "intercept_window"
path = "examples/network/intercept_window.rs"
required-features = ["camoufox"]
[[example]]
name = "listen_handle"
path = "examples/network/listen_handle.rs"
required-features = ["camoufox"]
[[example]]
name = "console_listen"
path = "examples/network/console_listen.rs"
required-features = ["camoufox"]
[[example]]
name = "ws_listen"
path = "examples/network/ws_listen.rs"
required-features = ["camoufox"]
[[example]]
name = "ws_connect"
path = "examples/network/ws_connect.rs"
required-features = ["camoufox"]
[[example]]
name = "proxy_health"
path = "examples/pool/proxy_health.rs"
required-features = ["camoufox"]
[[example]]
name = "pool_crawl"
path = "examples/pool/pool_crawl.rs"
required-features = ["camoufox"]
[[example]]
name = "session_mode"
path = "examples/session/session_mode.rs"
required-features = ["camoufox"]
[[example]]
name = "session_tls"
path = "examples/session/session_tls.rs"
required-features = ["impersonate"]
[[example]]
name = "web_page_scrape"
path = "examples/session/web_page_scrape.rs"
required-features = ["camoufox"]
[[example]]
name = "dump_env_fingerprint"
path = "examples/env/dump_env_fingerprint.rs"
required-features = ["camoufox"]
[[example]]
name = "douyin_listen"
path = "examples/sites/douyin_listen.rs"
required-features = ["camoufox"]
[[example]]
name = "douyin_listen_long"
path = "examples/sites/douyin_listen_long.rs"
required-features = ["camoufox"]
[[example]]
name = "douyin_capture"
path = "examples/sites/douyin_capture.rs"
required-features = ["camoufox"]
[[example]]
name = "douyin_dump_env"
path = "examples/sites/douyin_dump_env.rs"
required-features = ["camoufox"]
[[example]]
name = "bilibili_listen_long"
path = "examples/sites/bilibili_listen_long.rs"
required-features = ["camoufox"]
[[example]]
name = "hubei_zfwj_csv"
path = "examples/sites/hubei_zfwj_csv.rs"
required-features = ["cdp"]
[[example]]
name = "hubei_zfwj_protocol"
path = "examples/sites/hubei_zfwj_protocol.rs"
required-features = [
"camoufox",
"signer",
]
[[example]]
name = "luffycity_capture"
path = "examples/sites/luffycity_capture.rs"
required-features = ["cdp"]
[[example]]
name = "luffycity_download"
path = "examples/sites/luffycity_download.rs"
required-features = ["cdp"]
[[example]]
name = "luffycity_protocol"
path = "examples/sites/luffycity_protocol.rs"
[[example]]
name = "geetest_diag"
path = "examples/slider/geetest_diag.rs"
required-features = ["camoufox"]
[[example]]
name = "geetest_probe"
path = "examples/slider/geetest_probe.rs"
required-features = ["camoufox"]
[[example]]
name = "ocr_probe"
path = "examples/ocr/ocr_probe.rs"
required-features = ["camoufox"]
[[example]]
name = "win_smoke"
path = "examples/windows/win_smoke.rs"
required-features = ["camoufox"]
[[example]]
name = "win_diag"
path = "examples/windows/win_diag.rs"
required-features = ["camoufox"]
[[example]]
name = "win_cf_test"
path = "examples/windows/win_cf_test.rs"
required-features = ["camoufox"]
[[example]]
name = "win_bilibili_test"
path = "examples/windows/win_bilibili_test.rs"
required-features = ["camoufox"]
[[test]]
name = "public_api"
path = "tests/public_api.rs"
[[bench]]
name = "parsing"
path = "benches/parsing.rs"
harness = false
[dependencies.async-trait]
version = "0.1.89"
[dependencies.bytes]
version = "1.12.0"
[dependencies.dirs]
version = "6.0.0"
[dependencies.ego-tree]
version = "0.11"
[dependencies.fontdue]
version = "0.9.3"
optional = true
[dependencies.futures-util]
version = "0.3.32"
[dependencies.image]
version = "0.25.10"
features = [
"png",
"jpeg",
]
optional = true
default-features = false
[dependencies.libc]
version = "0.2.186"
[dependencies.os_pipe]
version = "1.2.3"
features = ["io_safety"]
[dependencies.reqwest]
version = "0.13.4"
features = [
"json",
"stream",
"socks",
]
[dependencies.rquickjs]
version = "0.11"
optional = true
[dependencies.scraper]
version = "0.27.0"
[dependencies.serde]
version = "1.0.228"
features = ["derive"]
[dependencies.serde_json]
version = "1.0.150"
[dependencies.thiserror]
version = "2.0.18"
[dependencies.tokio]
version = "1.52.3"
features = ["full"]
[dependencies.tokio-tungstenite]
version = "0.29.0"
[dependencies.tracing]
version = "0.1.44"
[dependencies.tract-onnx]
version = "0.23.3"
optional = true
[dependencies.wreq]
version = "5"
optional = true
[dependencies.wreq-util]
version = "2"
optional = true
[dependencies.zip]
version = "8.6.0"
[dev-dependencies.aes]
version = "0.8"
[dev-dependencies.base64]
version = "0.22"
[dev-dependencies.cbc]
version = "0.1"
features = [
"alloc",
"block-padding",
]
[dev-dependencies.criterion]
version = "0.7.0"
[dev-dependencies.hex]
version = "0.4"
[dev-dependencies.hmac]
version = "0.12"
[dev-dependencies.md-5]
version = "0.10"
[dev-dependencies.sha2]
version = "0.10"
[dev-dependencies.tracing-subscriber]
version = "0.3.23"
features = ["env-filter"]
[target."cfg(unix)".dependencies.command-fds]
version = "0.3.3"
features = ["tokio"]
[target."cfg(windows)".dependencies.windows-sys]
version = "0.61"
features = [
"Win32_Foundation",
"Win32_Security",
"Win32_Storage_FileSystem",
"Win32_System_JobObjects",
"Win32_System_Registry",
"Win32_System_Threading",
]
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "unwind"
strip = true