1use clawser_browser::Browser;
6use std::time::Instant;
7
8async fn test_antidetect(page: &clawser_browser::Page<'_>, label: &str) {
9 println!("\n --- {} antidetect checks ---", label);
10 let checks: &[(&str, &str)] = &[
11 ("UA", "navigator.userAgent"),
12 ("Platform", "navigator.platform"),
13 ("Languages", "JSON.stringify(navigator.languages)"),
14 ("Cores", "navigator.hardwareConcurrency.toString()"),
15 ("webdriver", "navigator.webdriver.toString()"),
16 ("Screen", "screen.width + 'x' + screen.height"),
17 ("Timezone", "Intl.DateTimeFormat().resolvedOptions().timeZone"),
18 ("chrome", "typeof window.chrome"),
19 ("cdc_", "(function(){for(var k in window){if(/^cdc_/.test(k))return 'YES'}return 'NO'})()"),
20 ];
21 for (name, code) in checks {
22 match page.js(code).await {
23 Ok(val) => println!(" {}: {}", name, val),
24 Err(e) => println!(" {}: ERROR - {}", name, e),
25 }
26 }
27}
28
29#[tokio::main]
30async fn main() {
31 let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
32 if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
33 let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
34 let cfg = dir.join("test_profile.json");
35 if cfg.exists() { return cfg.to_string_lossy().to_string(); }
36 }
37 "out/Default/test_profile.json".to_string()
38 });
39
40 println!("=== clawser-browser smoke test (async) ===\n");
41
42 println!("[1] Creating HEADLESS browser...");
44 let start = Instant::now();
45 let browser = Browser::builder().headless().config(&config).build().await
46 .expect("Failed to create headless browser");
47 println!(" OK in {:?}", start.elapsed());
48
49 let page = browser.navigate("about:blank").await.expect("navigate failed");
50 let result = page.js("1 + 1").await.expect("js failed");
51 assert!(result.contains("2"));
52 test_antidetect(&page, "HEADLESS").await;
53 browser.shutdown().await.expect("shutdown failed");
54
55 println!("\n[2] Creating HEADFUL browser...");
57 let start = Instant::now();
58 let browser = Browser::builder().headful().config(&config).build().await
59 .expect("Failed to create headful browser");
60 println!(" OK in {:?}", start.elapsed());
61
62 let page = browser.navigate("about:blank").await.expect("navigate failed");
63 test_antidetect(&page, "HEADFUL").await;
64 browser.shutdown().await.expect("shutdown failed");
65
66 println!("\n=== ALL TESTS PASSED ===");
67}