Skip to main content

test_youtube_screenshot/
test_youtube_screenshot.rs

1use anyhow::Result;
2use headless_engine::browser::tab::BrowserTab;
3use headless_engine::network::fingerprint::DeviceProfile;
4use std::fs;
5
6#[tokio::main]
7async fn main() -> Result<()> {
8    println!("================================================================================");
9    println!(">>> REAL RASTER PNG SCREENSHOT TEST (PURE RUST RESVG + TINY-SKIA)");
10    println!("================================================================================\n");
11
12    let url = "https://www.youtube.com/results?search_query=more+suhagan";
13    println!("[1] Navigating to target URL: {}", url);
14
15    let mut tab = BrowserTab::with_profile(DeviceProfile::ChromeWindows)?;
16    let report = tab.navigate(url).await?;
17
18    println!("  * HTTP Status: {}", report.status);
19    println!("  * Final URL: {}", report.final_url);
20    println!("  * Page Title: {}", report.page_title);
21    println!("  * HTML Size: {} bytes", report.html_bytes);
22
23    // 2. Extract multi-modal video results
24    let results = tab
25        .extract_search_results()
26        .expect("Expected search results");
27    println!(
28        "\n[2] Extracted Video Results Found: {}",
29        results.video_results.len()
30    );
31    for (i, v) in results.video_results.iter().take(5).enumerate() {
32        println!("  [{}] Title: {}", i + 1, v.title);
33        println!("      Channel: {} | Duration: {}", v.channel, v.duration);
34    }
35
36    // 3. Capture REAL PNG Screenshot
37    println!("\n[3] Capturing Real Binary PNG Screenshot with live image assets...");
38    let shot = tab.screenshot_async().await.expect("Expected screenshot");
39    println!("  * Dimensions: {}x{}", shot.width, shot.height);
40    println!("  * Rendered Visual Elements: {}", shot.element_count);
41    println!("  * Real PNG File Size: {} bytes", shot.png_bytes.len());
42    println!("  * Base64 Data URL Prefix: {}...", &shot.png_base64[..50]);
43
44    // Save actual PNG binary file
45    fs::write("youtube_screenshot.png", &shot.png_bytes)?;
46    println!("  -> Successfully wrote real binary image: 'youtube_screenshot.png'");
47
48    // Save SVG file
49    fs::write("youtube_screenshot.svg", &shot.svg)?;
50    println!("  -> Successfully wrote vector SVG file: 'youtube_screenshot.svg'");
51
52    println!("\n================================================================================");
53    println!(">>> REAL PNG SCREENSHOT GENERATED WITHOUT CHROMIUM (<30MB RAM)!");
54    println!("================================================================================");
55
56    Ok(())
57}