diff options
author | Santo Cariotti <santo@dcariotti.me> | 2021-08-18 07:32:25 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2021-08-18 07:32:25 +0200 |
commit | 9b229737e671fba989191409e927e677a4c960f7 (patch) | |
tree | 90a0b9aa4b1dcefcd0ca81086d7dcb4f8e2925e0 /src/browser/web_browser.rs | |
parent | 655e487deb427c5b46e47aab50b761be78a1eb90 (diff) |
feat: get timetable of a space
Diffstat (limited to 'src/browser/web_browser.rs')
-rw-r--r-- | src/browser/web_browser.rs | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/browser/web_browser.rs b/src/browser/web_browser.rs index 34e78d1..5a855d5 100644 --- a/src/browser/web_browser.rs +++ b/src/browser/web_browser.rs @@ -4,7 +4,7 @@ use std::{thread, time}; use thirtyfour::common::capabilities::firefox::FirefoxPreferences; use thirtyfour::error::{WebDriverError, WebDriverErrorInfo, WebDriverErrorValue}; use thirtyfour::prelude::{By, WebDriverResult}; -use thirtyfour::{FirefoxCapabilities, WebDriver, WebDriverCommands}; +use thirtyfour::{FirefoxCapabilities, WebDriver, WebDriverCommands, WebElement}; /// This url is used to make the login const LOGIN_URL: &str = "https://studenti.smartedu.unict.it/WorkFlow2011/Logon/Logon.aspx?ReturnUrl=%2fStudenti%2fDefault.aspx"; @@ -148,6 +148,46 @@ impl Browser { Ok(false) } + + /// Get the timetable of available hours from the driver and returns an hashmap with id->text + pub async fn get_timetable(&self) -> WebDriverResult<Option<HashMap<String, String>>> { + if let Some(_d) = &self.driver { + thread::sleep(time::Duration::from_millis(2000)); + + let table_trs = _d + .find_elements(By::Css("div[data-select2-id='studyPlan'] table tbody tr")) + .await?; + + let mut timetable = HashMap::<String, String>::new(); + + for i in table_trs.iter() { + let cols: Vec<WebElement> = i.find_elements(By::Css("td")).await?; + if cols.len() < 6 { + continue; + } + + let col_id = i.find_element(By::Css("th")).await?.text().await.unwrap(); + let mut text_formatted = cols[0].text().await.unwrap(); + text_formatted.push_str( + &format!( + ", {} - {}.\n", + cols[1].text().await.unwrap(), + cols[2].text().await.unwrap() + ) + .to_owned()[..], + ); + + text_formatted + .push_str(&format!("Posti: {}", cols[6].text().await.unwrap()).to_owned()[..]); + + timetable.insert(col_id, text_formatted); + } + + return Ok(Some(timetable)); + } + + Ok(None) + } } /// The static unsafe variable used to open a web browser |