def send_outlook(): home_dir = str(Path.home()) chrome_cache_path = f"{home_dir}/.chrome_cache" print(f"loading chrome, caching to: {chrome_cache_path}") chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--no-startup-window") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--disable-sync-preferences") chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-background-networking") chrome_options.add_argument("--no-first-run") chrome_options.add_argument("--aggressive-tab-discard") chrome_options.add_argument("--user-agent=Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.2)") chrome_options.add_argument(f"--user-data-dir={chrome_cache_path}/user-data") chrome_options.add_argument(f"--data-path={chrome_cache_path}/data-path") chrome_options.add_argument(f"--disk-cache-dir={chrome_cache_path}/disk-cache") chrome_options.add_argument(f"--homedir={chrome_cache_path}") chrome_options.add_argument(f"--disk-cache-dir={chrome_cache_path}/cache-dir") prefs={"profile.managed_default_content_settings.images": 2, 'disk-cache-size': 4096 } chrome_options.add_experimental_option("prefs",prefs) delay = 60 chrome_options.binary_location = "/usr/bin/chromium-browser" driver = Chrome(executable_path=os.path.abspath("/usr/lib/chromium-browser/chromedriver"), chrome_options=chrome_options) print("logging into outlook") driver.get("https://outlook.office.com/owa/") try: driver.find_element_by_name("loginfmt").send_keys("*****@*****.**") driver.find_element_by_id("idSIButton9").click() print("entered username, waiting for password prompt") try: myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'passwordInput'))) print("password prompt loaded") except TimeoutException: print("Loading password prompt took too much time!") print(driver.page_source) driver.close(); exit(1) passwd = getpass.getpass() driver.find_element_by_id("passwordInput").send_keys(passwd) driver.find_element_by_id("submitButton").click() print("entered password, waiting for 2FA token") try: myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'idSIButton9'))) driver.find_element_by_id("idSIButton9").click() print("asking to remember credentials for next time") except TimeoutException: print("Loading 2FA page took too much time!") print(driver.page_source) driver.close(); exit(1) print("2FA accepted, loading office landing page") except NoSuchElementException: print("already logged in") try: print("waiting for landing page to load") myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'lnkBrwsAllFldrs'))) except TimeoutException: print(driver.page_source) print("Loading landing page too much time!") driver.close(); exit(1) try: eink.send_update("Loading Tasks") print("loading tasks") driver.find_element_by_id("lnkBrwsAllFldrs").click() driver.find_element_by_id("selbrfld").click() Select(driver.find_element_by_id("selbrfld")).select_by_visible_text("Tasks") driver.find_element_by_id("selbrfld").click() driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='Sent Items'])[1]/following::img[1]").click() myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'lvw'))) except TimeoutException: print(driver.page_source) print("Loading todo list took too much time!") driver.close(); exit(1) elements = driver.find_elements_by_css_selector("td h1 a") for i, element in enumerate(elements): eink.send_todo(i, element.text) try: eink.send_update("Loading Calendar") print("loading calendar") driver.find_element_by_id("lnkNavCal").click() myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'cntnttp'))) print("calendar loaded, dumping entries") except TimeoutException: print(driver.page_source) print("Loading calendar took too much time!") driver.close(); exit(1) elements = driver.find_elements_by_css_selector("td.v a") for i, element in enumerate(elements): eink.send_meeting(i,element.get_attribute('title'))
try: myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'cntnttp'))) print("calendar loaded, dumping entries") except TimeoutException: print(driver.page_source) print("Loading calendar took too much time!") driver.close(); exit(1) # todo: this should probably be more conditional - if the page defaults to the inbox execute the below to navigate to # the calendar # try: # myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'lnkNavCal'))) # print("loading calendar") # driver.find_element_by_id("lnkNavCal").click() # except TimeoutException: # print("Loading landing page took too much time!") # print(driver.page_source) # driver.close(); # exit(1) elements = driver.find_elements_by_css_selector("td.v a") for element in elements: print(element.get_attribute('title')) total_execution_time = datetime.now() - startTime print(f"total execution time: {total_execution_time}")
class DigitalCommonsConnection: def __init__(self, user, password): self.options = Options() self.driver = Chrome( executable_path=os.path.abspath("/usr/bin/chromedriver"), options=self.options) self.login(user, password) self.dissertations = self.get_list_of_dissertations() self.lookup_values = self.__review_dissertations() self.__lookup_decisions() def login(self, username, passwd): self.driver.get( 'https://trace.tennessee.edu/cgi/myaccount.cgi?context=') self.driver.find_element_by_id('auth_email').send_keys(username) self.driver.find_element_by_id('auth_password').send_keys(passwd) self.driver.find_element_by_xpath( '/html/body/div[2]/div/div[3]/div[1]/div[1]/div/div[2]/div[1]/div/form/div/p/button' ).click() def get_list_of_dissertations(self): self.driver.get( 'https://trace.tennessee.edu/utk_graddiss/index.11.html#year_2015') disserations = self.driver.find_elements_by_css_selector( '.article-listing > a') return [ disserations[link].get_attribute('href') for link in range(0, len(disserations)) ] def __review_dissertations(self): lookups = [] for dissertation in self.dissertations: self.driver.get(dissertation) link = self.driver.find_element_by_css_selector('#title > p > a') lookups.append( link.get_attribute('href').split('=')[1].split('&')[0]) return lookups def __lookup_decisions(self): for dissertation in self.lookup_values: self.driver.get( f'https://trace.tennessee.edu/cgi/editor.cgi?article={dissertation}' f'&window=viewdecisions&context=utk_graddiss') decisions = self.driver.find_elements_by_css_selector( '.MenuMain > tbody > tr > td > table > tbody > tr > td > a') all_decisions = [ decisions[link].get_attribute('href') for link in range(0, len(decisions)) if link != 'https://trace.tennessee.edu/cgi/help.cgi?context=utk_graddiss&help=help-submissions.html#' ] for decision in all_decisions: self.driver.get(decision) try: final_decision_metadata = self.driver.find_element_by_css_selector( '.MenuMain > tbody > tr > td > span') decision_metadata = final_decision_metadata.text print(decision_metadata.split('\n')) final_decision = self.driver.find_element_by_css_selector( '.MenuMain > tbody > tr > td > pre') except NoSuchElementException: pass return