#html-css #html #css #testing #html-parser #http-request #web-scraping

no_browser

基于reqwest的一个轻量级、无头‘网页浏览器’

6个版本

0.3.0 2023年6月19日
0.2.0 2023年6月19日
0.1.0 2023年5月8日

#38 in #html-css

每月49次下载
用于 web_stress_tools

MIT/Apache

59KB
1K SLoC

no_browser

no_browser库旨在提供通过一个轻量级、无头“网页浏览器”与网页进行程序交互的高级API。这不是一个真正的网页浏览器,如Firefox或Chrome。

no_browser在reqwest之上构建,处理HTTP请求、HTTP重定向和Cookie管理,以及通过scraper解析HTML代码。此库使用CSS选择器来自由访问给定网页的任何元素。它还提供了自己的抽象来填写和提交网页表单。

然而,no_browser不支持客户端JavaScript或实际上渲染网页的概念。因此,如果您想测试现代JavaScript驱动的网页应用,请选择驱动真实网页浏览器的库,如fantoccinithirtyfour

示例

let browser = Browser::builder().finish()?;

// Lets go to the Wikipedia main page
let mut page = browser.navigate_to("https://en.wikipedia.org/", None)?;

// the title tag should be "Wikipedia, the free encyclopedia"
assert_eq!(
    page.select_first("head > title")?.inner_html(),
    "Wikipedia, the free encyclopedia"
);

// the main page should welcome us
assert!(page
    .select_first("h1 > span.mw-headline")?
    .inner_html()
    .starts_with("Welcome to"));

// fill out the search form ...
let search_form = page.form_by_id_mut("searchform")?;
search_form
    .input_mut(InputType::Search, "search")?
    .set_value(Some("rust programming language".to_owned()));

// ... and submit
let page = browser.submit_form(search_form, None)?;

// the new title tag should be "Rust (programming language) - Wikipedia"
assert_eq!(
    page.select_first("head > title")?.inner_html(),
    "Rust (programming language) - Wikipedia"
);

// The main title on the html page should be quite similar
assert_eq!(
    page.select_first("span.mw-page-title-main")?.inner_html(),
    "Rust (programming language)"
);

// The main title should have a subtitle showing we've been redirected
assert!(page
    .select_first("div#contentSub span.mw-redirectedfrom")?
    .inner_html()
    .starts_with("(Redirected from"));

// The table of contents should have more than 10 entries
assert!(page
    .select("div#vector-toc ul#mw-panel-toc-list li.vector-toc-list-item")?
    .len() > 10);

许可证

以下任一许可证下授权

SPDX-许可证-标识符: MIT Apache-2.0

贡献

除非您明确声明,否则您提交的任何旨在包含在本作品中的贡献,根据Apache-2.0许可证定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~13–27MB
~532K SLoC