use browser_oxide::{ChallengeVerdict, Page};
fn main() {
let url = std::env::args()
.nth(1)
.unwrap_or_else(|| "https://example.com".to_string());
let rt = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap();
let local = tokio::task::LocalSet::new();
local.block_on(&rt, async move {
let profile = browser_oxide::stealth::presets::chrome_148_macos();
let mut page = Page::navigate(&url, profile, 5)
.await
.expect("navigation failed");
println!("url : {}", page.url());
println!("title : {}", page.title());
println!("bytes : {}", page.content().len());
println!(
"h1 : {}",
page.text_of("h1").unwrap_or_else(|| "(none)".into())
);
if let Ok(ua) = page.evaluate("navigator.userAgent") {
println!("ua : {ua}");
}
let verdict = page.challenge_verdict();
println!("verdict : {}", verdict.as_str());
match verdict {
ChallengeVerdict::Pass => println!("=> real content rendered"),
ChallengeVerdict::ThinShell | ChallengeVerdict::RenderIncomplete => {
println!("=> rendered, but body is a thin/SPA shell")
}
v if v.is_challenge() => println!("=> blocked by an anti-bot challenge"),
_ => {}
}
});
}