コード例 #1
0
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'))
コード例 #2
0



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}")
コード例 #3
0
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