funpay_client/parsing/
forms.rs

1use scraper::{Html, Selector};
2
3pub fn extract_input_value(doc: &Html, name: &str) -> String {
4    let selector = Selector::parse(&format!("input[name=\"{}\"]", name))
5        .unwrap_or_else(|_| Selector::parse("input").unwrap());
6    doc.select(&selector)
7        .next()
8        .and_then(|el| el.value().attr("value"))
9        .unwrap_or("")
10        .to_string()
11}
12
13pub fn extract_textarea_value(doc: &Html, name: &str) -> String {
14    let selector = Selector::parse(&format!("textarea[name=\"{}\"]", name))
15        .unwrap_or_else(|_| Selector::parse("textarea").unwrap());
16    doc.select(&selector)
17        .next()
18        .map(|el| el.text().collect::<String>())
19        .unwrap_or_default()
20}
21
22pub fn extract_checkbox_value(doc: &Html, name: &str) -> bool {
23    let selector = Selector::parse(&format!("input[name=\"{}\"][type=\"checkbox\"]", name))
24        .unwrap_or_else(|_| Selector::parse("input").unwrap());
25    doc.select(&selector)
26        .next()
27        .map(|el| el.value().attr("checked").is_some())
28        .unwrap_or(false)
29}
30
31pub fn extract_select_value(doc: &Html, name: &str) -> String {
32    let selector = Selector::parse(&format!("select[name=\"{}\"] option[selected]", name))
33        .unwrap_or_else(|_| Selector::parse("select").unwrap());
34    doc.select(&selector)
35        .next()
36        .and_then(|el| el.value().attr("value"))
37        .unwrap_or("")
38        .to_string()
39}
40
41pub fn extract_field_value(doc: &Html, name: &str) -> String {
42    let input_val = extract_input_value(doc, name);
43    if !input_val.is_empty() {
44        return input_val;
45    }
46    extract_select_value(doc, name)
47}