Exemple #1
0
def get_friending_status(browser, track, username, person, person_id, logger,
                         logfolder):
    """ Verify if you are friending the user in the loaded page """
    if track == "profile":
        ig_homepage = "https://www.facebook.com/"
        web_address_navigator( browser, ig_homepage + person, Settings)

    friend_button_XP = ("//div[@id='fbTimelineHeadline']/div/div/div/div/button[@type='button'][text()='Add Friend']")
    failure_msg = "--> Unable to detect the friending status of '{}'!"
    user_inaccessible_msg = (
        "Couldn't access the profile page of '{}'!\t~might have changed the"
        " username".format(person))

    # check if the page is available
    valid_page = is_page_available(browser, logger, Settings)
    if not valid_page:
        logger.warning(user_inaccessible_msg)
        person_new = verify_username_by_id(browser,
                                           username,
                                           person,
                                           None,
                                           logger,
                                           logfolder)
        if person_new:
            web_address_navigator( browser, ig_homepage + person_new, Settings)
            valid_page = is_page_available(browser, logger, Settings)
            if not valid_page:
                logger.error(failure_msg.format(person_new.encode("utf-8")))
                return "UNAVAILABLE", None

        else:
            logger.error(failure_msg.format(person.encode("utf-8")))
            return "UNAVAILABLE", None

    # wait until the friend button is located and visible, then get it
    friend_button = explicit_wait(browser, "VOEL", [friend_button_XP, "XPath"],
                                  logger, 7, False)
    if not friend_button:
        browser.execute_script("location.reload()")
        update_activity(Settings)

        friend_button = explicit_wait(browser, "VOEL",
                                      [friend_button_XP, "XPath"], logger, 14,
                                      False)
        if not friend_button:
            # cannot find the any of the expected buttons
            logger.error(failure_msg.format(person.encode("utf-8")))
            return None, None

    # get friend status
    friending_status = friend_button.text

    return friending_status, friend_button
def get_given_user_followers(browser, login, user_name, userid, amount,
                             dont_include, randomize, blacklist, follow_times,
                             simulation, jumps, logger, logfolder):
    """
    For the given username, follow their followers.

    :param browser: webdriver instance
    :param login:
    :param user_name: given username of account to follow
    :param amount: the number of followers to follow
    :param dont_include: ignore these usernames
    :param randomize: randomly select from users' followers
    :param blacklist:
    :param follow_times:
    :param logger: the logger instance
    :param logfolder: the logger folder
    :return: list of user's followers also followed
    """
    user_name = user_name.strip()

    user_link = "https://www.facebook.com/{}".format(userid)
    web_address_navigator(browser, user_link, Settings)

    if not is_page_available(browser, logger, Settings):
        return [], []

    # check how many people are following this user.
    allfollowers, allfollowing = get_relationship_counts(
        browser, "https://www.facebook.com/", user_name, userid, logger,
        Settings)

    # skip early for no followers
    if not allfollowers:
        logger.info("'{}' has no followers".format(user_name))
        return [], []

    elif allfollowers < amount:
        logger.warning(
            "'{}' has less followers- {}, than the given amount of {}".format(
                user_name, allfollowers, amount))

    # locate element to user's followers
    user_followers_link = "https://www.facebook.com/{}/followers".format(
        userid)
    web_address_navigator(browser, user_followers_link, Settings)

    try:
        followers_links = browser.find_elements_by_xpath(
            '//div[2]/ul/li/div/div/div[2]/div/div[2]/div/a')
        followers_list = []
        for followers_link in followers_links:
            splitted = followers_link.get_attribute('href').replace(
                'https://www.facebook.com/', '').split('?')
            if splitted[0] == 'profile.php':
                u = splitted[0] + '?' + splitted[1]
            else:
                u = splitted[0]
            followers_list.append(u)
        logger.info(followers_list)

        # click_element(browser, Settings, followers_link[0])
        # # update server calls
        # update_activity(Settings)

    except NoSuchElementException:
        logger.error(
            'Could not find followers\' link for {}'.format(user_name))
        return [], []

    except BaseException as e:
        logger.error("`followers_link` error {}".format(str(e)))
        return [], []

    # channel = "Follow"

    # TODO: Fix it: Add simulated
    simulated_list = []
    if amount < len(followers_list):
        person_list = random.sample(followers_list, amount)
    else:
        person_list = followers_list

    return person_list, simulated_list