youtube_test/
youtube_test.rs1use 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 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}