import os import time from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.support.ui import WebDriverWait from .logger import get_logger from serenitas.utils.env import DAILY_DIR from serenitas.analytics.dates import prev_business_day logger = get_logger(__name__) def wait(driver): WebDriverWait(driver, 10).until( lambda driver: driver.execute_script("return document.readyState") == "complete" ) def download_report(account_username, password, report_dir): driver = create_driver(report_dir) login(driver, account_username, password) navigate_to_inbox(driver) attachment_element = get_attachment_element(driver) fname = attachment_element.text.split()[0] driver.quit() def login(driver, account_username, password): driver.get("https://web1.mail.scotiabank.com/webmail/do/Home") wait(driver) username_element = driver.find_element_by_id("username") username_element.send_keys(account_username) password_element = driver.find_element_by_id("passwordid") password_element.send_keys(password) login_button = driver.find_element_by_id("loginbutton") login_button.click() wait(driver) def navigate_to_inbox(driver): time.sleep(1) login_button = driver.find_element_by_id("leftNavFolderLink") login_button.click() time.sleep(1) login_button = driver.find_element_by_id("leftNavInboxFolderLink") login_button.click() time.sleep(1) elements = driver.find_elements_by_class_name("zfolder-msg-clickable")[0] elements.click() time.sleep(1) def get_attachment_element(driver): return driver.find_elements_by_class_name("zmessage-attachment-link")[0] def create_driver(download_dir): options = Options() options.add_argument("--headless") fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.dir", str(download_dir)) fp.set_preference("browser.download.folderList", 2) fp.set_preference( "browser.helperApps.neverAsk.saveToDisk", "application/octet-stream" ) return webdriver.Firefox(firefox_profile=fp, options=options) def download_scotia_report(date): scotia_login = {"selene-ops@lmcg.com": "oeujG*UF!53o"} for username, password in scotia_login.items(): REPORT_DIR = DAILY_DIR / "Selene" / "Scotia_reports" try: fname = next( REPORT_DIR.glob( f"IsoSelene_{prev_business_day(date):%d-%b-%Y}_*_xlsx.JOAAPKO3.JOAAPKO1" ) ) logger.info(f"{fname} already exists in {REPORT_DIR}") except StopIteration: # File doesn't exist, let's get it" download_report(username, password, REPORT_DIR) logger.info(f"Downloaded Scotia Report for {date}")