Skip to main content

StealthConfig

Struct StealthConfig 

Source
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: bool

Spoof WebGL renderer/vendor

§canvas_spoof: bool

Spoof canvas fingerprint

§audio_spoof: bool

Spoof audio fingerprint

§human_mouse: bool

Use human-like mouse movements

§human_typing: bool

Use human-like typing

§user_agent: Option<String>

Custom user agent (None = random realistic)

§headless: bool

Headless mode

§chrome_path: Option<String>

Path to Chrome/Chromium binary

§patch_binary: bool

Patch Chrome binary to bypass detection

§viewport_width: u32

Viewport width

§viewport_height: u32

Viewport height

§debug: bool

Debug 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: u64

CDP 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: bool

Enable 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: bool

Treat 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: bool

Drop “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: bool

Ignore 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: bool

Strip 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: bool

Resolve 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

Source

pub fn minimal() -> StealthConfig

Create a minimal config (no spoofing, no patching)

Source

pub fn visible() -> StealthConfig

Create a visible (non-headless) config

Source

pub fn debug() -> StealthConfig

Create a debug config (visible, with logging)

Source

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 tabs
  • filter_cdp = false — full DevTools-equivalent CDP access
  • patch_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

Source§

fn clone(&self) -> StealthConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StealthConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for StealthConfig

Source§

fn default() -> StealthConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more