use drission::prelude::*;
#[tokio::main]
async fn main() -> drission::Result<()> {
let headless = std::env::var("HL").map(|v| v != "0").unwrap_or(true);
let url = std::env::var("URL").unwrap_or_else(|_| "https://example.com".to_string());
let needle = std::env::var("NEEDLE").unwrap_or_else(|_| "function".to_string());
let browser = ChromiumBrowser::launch(ChromiumOptions::new().headless(headless)).await?;
let tab = browser.new_tab(Some("about:blank")).await?;
tab.get(&url).await?;
let sc = tab.scripts();
let list = sc.list().await?;
println!("[*] 解析到 {} 个脚本:", list.len());
for s in list.iter().take(20) {
let kind = if s.is_wasm { "wasm" } else { "js" };
println!(" [{kind}] id={} len={} {}", s.script_id, s.length, s.url);
}
let hits = sc.grep(&needle).await?;
println!("\n[*] grep \"{needle}\" 命中 {} 处:", hits.len());
for m in hits.iter().take(15) {
println!(" {}:{} {}", m.url, m.line_number, m.snippet);
}
let files = sc.dump_all("out/scripts").await?;
println!("\n[*] dump 了 {} 个 JS 到 out/scripts/", files.len());
browser.quit().await?;
println!("==== ② 脚本 dump/搜索 demo 完成 ====");
Ok(())
}