use std::time::Duration;
use drission::prelude::*;
#[tokio::main]
async fn main() -> drission::Result<()> {
let headless = std::env::var("HL").map(|v| v != "0").unwrap_or(true);
let browser = ChromiumBrowser::launch(ChromiumOptions::new().headless(headless)).await?;
let tab = browser.new_tab(Some("about:blank")).await?;
tab.anti_anti_debug().await?;
println!("[*] 已注入反「无限 debugger」defuse。");
tab.get("https://example.com").await?;
tab.run_js(
r#"
window.__tick = 0;
setInterval(function(){ debugger; window.__tick++; }, 50);
try { Function("debugger; window.__fnDebug=1;")(); } catch(e){}
1
"#,
)
.await?;
tokio::time::sleep(Duration::from_millis(600)).await;
let tick = tab.run_js("window.__tick").await?;
let fn_debug = tab.run_js("window.__fnDebug||0").await?;
println!("[*] setInterval 计数 __tick = {tick}(>0 说明没被 debugger 卡住)");
println!("[*] Function 构造器 __fnDebug = {fn_debug}(致残后函数体的 debugger 被剔除仍能执行)");
browser.quit().await?;
println!("==== ④ 反「无限 debugger」demo 完成 ====");
Ok(())
}