Skip to main content

youtube_test/
youtube_test.rs

1//! Headful YouTube test with antidetect + human simulation.
2//!
3//! Run: CLAWSER_CHROME_PATH=out/Default/chrome.exe cargo run --manifest-path clawser-browser/Cargo.toml --example youtube_test
4
5use clawser_browser::Browser;
6
7#[tokio::main]
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== YouTube Headful Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22
23    let page = browser.navigate("https://www.youtube.com").await
24        .expect("failed to navigate");
25
26    // Simulate human behavior
27    page.human_idle(1500).await.expect("idle failed");
28    page.scroll(200).await.expect("scroll failed");
29
30    println!("Title: {}", page.js("document.title").await.unwrap_or_default());
31    println!("URL: {}", page.js("window.location.href").await.unwrap_or_default());
32
33    let checks: &[(&str, &str)] = &[
34        ("UA", "navigator.userAgent"),
35        ("Cores", "navigator.hardwareConcurrency.toString()"),
36        ("Memory", "(navigator.deviceMemory||'?').toString()"),
37        ("webdriver", "navigator.webdriver.toString()"),
38        ("Screen", "screen.width+'x'+screen.height"),
39        ("Timezone", "Intl.DateTimeFormat().resolvedOptions().timeZone"),
40        ("GPU", "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"),
41    ];
42    for (name, code) in checks {
43        println!("{}: {}", name, page.js(code).await.unwrap_or_default());
44    }
45
46    browser.shutdown().await.expect("shutdown failed");
47    println!("\nDone.");
48}