browser_oxide 0.1.3

Stealth headless browser engine in Rust: real HTML/CSS/DOM/JS, V8 via deno_core, own BoringSSL TLS/JA4 fingerprint, no Chromium, no CDP — for anti-bot web scraping, archival, and AI agents
Documentation
#[cfg(test)]
mod tests {
    use browser_oxide::Page;

    #[tokio::test]
    #[ignore = "network: live HTTP against pixelscan.net"]
    async fn test_pixelscan_oxide() {
        let profile = browser_oxide::stealth::presets::chrome_148_macos();
        let _page = Page::navigate("https://pixelscan.net/", profile, 5)
            .await
            .unwrap();

        tokio::time::sleep(std::time::Duration::from_secs(5)).await;

        // Wait for it to click the scan button if we have to, or maybe Pixelscan just loads it directly if we do an API request?
        // Wait, Pixelscan has a "Scan My Browser Now" button on the homepage, maybe we should navigate directly to /fingerprint-check
        // Let's try /fingerprint-check directly.
    }

    #[tokio::test]
    #[ignore = "network: live HTTP against pixelscan.net"]
    async fn test_pixelscan_check_oxide() {
        let profile = browser_oxide::stealth::presets::chrome_148_macos();
        let mut page = Page::navigate("https://pixelscan.net/fingerprint-check", profile, 5)
            .await
            .unwrap();

        tokio::time::sleep(std::time::Duration::from_secs(10)).await;

        let html = page.content();
        println!("Pixelscan size: {}", html.len());

        let r = page
            .evaluate(
                r#"
            (() => {
                const main = document.querySelector('main');
                return main ? main.innerText.substring(0, 1000) : "No main";
            })()
        "#,
            )
            .unwrap_or_default();

        println!("PIXELSCAN OXIDE:\n{}", r);
    }
}