Exemplo n.º 1
0
def countMembers(logfile_out, driver, groupfile_out):
    time.sleep(3)
    subtitle = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located(
            (By.XPATH, '//*[@id="main"]/header/div[2]/div[2]/span'))).text

    waits = 0

    while subtitle[0] != "+" and waits < 5:
        wait += 1
        time.sleep(5)
        subtitle = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located(
                (By.XPATH, '//*[@id="main"]/header/div[2]/div[2]/span'))).text

    # Click initial sidebar button
    button = driver.find_element_by_xpath(
        '//*[@id="main"]/header/div[2]/div[2]')
    button.click()
    time.sleep(2)

    # Click secondary sidebar button, save number of members
    all_members = driver.find_element_by_xpath(
        '//*[@id="app"]/div/div/div[2]/div[3]/span/div/span/div/div/div[1]/div[5]/div[1]/div/div/div[1]/span'
    )
    count = int(all_members.text.split(" ")[0])

    if subtitle[0] == '+' and (subtitle.count(',') + 1) == count:
        groupfile_out.write(subtitle + "\n\n")
        groupfile_out.write("SUCCESS:     Member true count: %s\n" % count)
        logfile_out.write("SUCCESS:     Member true count: %s\n" % count)

        time.sleep(1)
        button = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((
                By.XPATH,
                '//*[@id="app"]/div/div/div[2]/div[3]/span/div/span/div/header/div/div[1]/button'
            )))
        button.click()
        return

    logfile_out.write("**EXCEPT**:  Running manual member count\n" % count)

    member_array = set()
    all_members.click()

    # Order members by their px/coordinates on page
    max_member_px = 0
    max_element = None

    while (True):
        prev_member_px = max_member_px

        # Grab all members
        full_list = driver.find_element_by_xpath(
            '//*[@id="app"]/div/span[2]/div/div/div/div/div/div/div/div[2]/div[1]/div/div'
        )
        full_list_members = full_list.find_elements_by_xpath('div')

        # For each member, find px; add member to array
        for element in full_list_members:
            s = element.get_attribute('style')
            member_px = int(s[s.find("(") + 1:s.find("px)")])

            try:  # Some elements in the list are separators, not actual members
                member_name = element.find_element_by_xpath(
                    './div/div/div[2]').text.split('\\n')[0]
                member_array.add(member_name)
            except:
                pass

            # Record member at bottom of list, while we keep trying to scroll
            if member_px > max_member_px:
                max_element = element
                max_member_px = member_px

        # Exit loop when scroll to end
        if max_member_px == prev_member_px:
            break
        else:
            # Scroll through list of members
            driver.execute_script("arguments[0].scrollIntoView();",
                                  max_element)
            time.sleep(3)

    groupfile_out.write(str(member_array) + "\n\n")
    groupfile_out.write("SUCCESS:     Member true count: %s\n" % count)
    logfile_out.write("SUCCESS:     Member true count: %s\n" % count)

    if len(member_array) != count:
        groupfile_out.write("**EXCEPT**:  COUNTS DID NOT MATCH\nFound: %s\n" %
                            len(member_array))
        logfile_out.write("**EXCEPT**:  COUNTS DID NOT MATCH\nFound: %s\n" %
                          len(member_array))

    time.sleep(1)
    button = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((
            By.XPATH,
            '//*[@id="app"]/div/span[2]/div/div/div/div/div/div/div/header/div/div[1]/button'
        )))
    button.click()

    time.sleep(1)
    button = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((
            By.XPATH,
            '//*[@id="app"]/div/div/div[2]/div[3]/span/div/span/div/header/div/div[1]/button'
        )))
    button.click()