funpay_client/parsing/
forms.rs1use 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}