pub struct StealthConfig {Show 27 fields
pub webgl_spoof: bool,
pub canvas_spoof: bool,
pub audio_spoof: bool,
pub human_mouse: bool,
pub human_typing: bool,
pub user_agent: Option<String>,
pub headless: bool,
pub chrome_path: Option<String>,
pub patch_binary: bool,
pub viewport_width: u32,
pub viewport_height: u32,
pub debug: bool,
pub debug_dir: Option<String>,
pub proxy: Option<String>,
pub user_data_dir: Option<String>,
pub profile_dir: Option<String>,
pub proxy_username: Option<String>,
pub proxy_password: Option<String>,
pub cdp_timeout: u64,
pub timezone: Option<String>,
pub extra_args: Vec<String>,
pub aggressive_cdp_evasion: bool,
pub live_session: bool,
pub filter_cdp: bool,
pub ignore_cert_errors: bool,
pub strip_x_client_data: bool,
pub geo_align: bool,
}Expand description
Configuration for stealth features
Fields§
§webgl_spoof: boolSpoof WebGL renderer/vendor
canvas_spoof: boolSpoof canvas fingerprint
audio_spoof: boolSpoof audio fingerprint
human_mouse: boolUse human-like mouse movements
human_typing: boolUse human-like typing
user_agent: Option<String>Custom user agent (None = random realistic)
headless: boolHeadless mode
chrome_path: Option<String>Path to Chrome/Chromium binary
patch_binary: boolPatch Chrome binary to bypass detection
viewport_width: u32Viewport width
viewport_height: u32Viewport height
debug: boolDebug mode - log actions and save screenshots on error
debug_dir: Option<String>Directory for debug screenshots (defaults to current directory)
proxy: Option<String>Proxy server URL (e.g. “http://host:port”)
user_data_dir: Option<String>Durable Chrome user-data directory. When set, Eoka preserves the profile and its full fingerprint identity across browser launches.
If a Chrome instance is already running on this directory, Eoka attaches to it instead of spawning a second process (which Chrome’s own singleton lock would silently hand off to and exit).
profile_dir: Option<String>Named profile within user_data_dir (Chrome’s --profile-directory,
e.g. “Profile 1”). Only meaningful when user_data_dir is set;
defaults to Chrome’s implicit “Default” profile when None.
Chrome’s singleton lock (and thus Eoka’s reuse detection above) is
scoped to the whole user_data_dir, not the individual profile —
launching a second profile_dir while a Chrome is already running
on the same user_data_dir attaches to that same running instance
rather than opening a separate one, matching Chrome’s own behavior.
proxy_username: Option<String>Proxy username for authenticated proxies
proxy_password: Option<String>Proxy password for authenticated proxies
cdp_timeout: u64CDP command timeout in seconds (default: 30, increase for slow proxies)
timezone: Option<String>IANA timezone (default: random from common US/EU timezones). Set to a specific value like “America/New_York” to control the timezone.
extra_args: Vec<String>Extra Chrome command-line arguments appended after standard stealth args. E.g. vec![“–use-fake-ui-for-media-stream”.into()] to auto-grant camera.
aggressive_cdp_evasion: boolEnable legacy, invasive CDP-marker hiding that proxies window.document
and patches Object reflection APIs. It can break modern SPAs, so it is
disabled by default. Prefer the normal WebDriver and fingerprint evasions.
live_session: boolTreat this as a session attached to a user-owned browser. When true,
Browser::new_page/new_blank_page/attach_page skip injecting the
evasion script. Defaults to false (set automatically by Browser::connect*).
filter_cdp: boolDrop “detectable” CDP commands like Runtime.enable silently.
Defaults to true. Set to false in connect mode to get full DevTools-like control.
ignore_cert_errors: boolIgnore TLS certificate errors on every page from creation, before the
first navigation. Page::ignore_cert_errors is applied too late for
new_page’s own initial navigate — this covers self-signed/expired
certs (e.g. .onion services) hit on the very first load. Defaults to
false.
strip_x_client_data: boolStrip Chromium’s X-Client-Data request header via CDP Fetch
interception. Chrome sends this header with field-trial variation IDs on
requests to Google-owned properties; a fresh automation profile carries
a distinctive (often empty) variation set that server-side bot scoring
can read before any JavaScript runs. Also launches Chrome with
--disable-field-trial-config. Defaults to true for spawned stealth
browsers; ignored (never applied) for attached live sessions.
geo_align: boolResolve timezone and interface language from the browser’s apparent
public IP via a one-shot navigation to Cloudflare’s trace endpoint
before any real page is created. Keeps Date/Intl and the injected
navigator.languages consistent with IP geolocation instead of a
random timezone. Ignored when timezone is set explicitly and when
attaching to an existing browser. Defaults to false.
Implementations§
Source§impl StealthConfig
impl StealthConfig
Sourcepub fn minimal() -> StealthConfig
pub fn minimal() -> StealthConfig
Create a minimal config (no spoofing, no patching)
Sourcepub fn visible() -> StealthConfig
pub fn visible() -> StealthConfig
Create a visible (non-headless) config
Sourcepub fn debug() -> StealthConfig
pub fn debug() -> StealthConfig
Create a debug config (visible, with logging)
Sourcepub fn live() -> StealthConfig
pub fn live() -> StealthConfig
Config tuned for attaching to a user-owned browser via Browser::connect*.
Disables anything that touches the user’s Chrome state:
live_session— no evasion script injection on attached tabsfilter_cdp = false— full DevTools-equivalent CDP accesspatch_binary = false— we don’t manage the binary- all spoofing off — the user’s browser already has its own fingerprint
Trait Implementations§
Source§impl Clone for StealthConfig
impl Clone for StealthConfig
Source§fn clone(&self) -> StealthConfig
fn clone(&self) -> StealthConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more