Esempio n. 1
0
def friend_user(browser, track, login, userid_to_friend, times, blacklist,
                logger, logfolder):
    """ Friend a user either from the profile page or post page or dialog
    box """
    # list of available tracks to friend in: ["profile", "post" "dialog"]

    # check action availability
    if quota_supervisor(Settings, "friends") == "jump":
        return False, "jumped"

    # check URL of the webpage, if it already is user's profile
    # page, then do not navigate to it again
    if friend_restriction("read", userid_to_friend, 1, logger):
        logger.info("Already connected {} or more times".format(times))
        return False, "already friended"

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

    # find out CURRENT friending status
    friending_status, friend_button = get_friending_status(
        browser, track, login, userid_to_friend, None, logger, logfolder)
    logger.info(friending_status)
    if friending_status in ["Add Friend"]:
        click_visibly(browser, Settings, friend_button)  # click to friend
        friend_state, msg = verify_action(browser, "friend", track, login,
                                          userid_to_friend, None, logger,
                                          logfolder)
        if friend_state is not True:
            return False, msg
    elif friending_status is None:
        # TODO:BUG:2nd login has to be fixed with userid of loggedin user
        sirens_wailing, emergency_state = emergency_exit(
            browser, Settings, "https://facebook.com", login, login, logger,
            logfolder)
        if sirens_wailing is True:
            return False, emergency_state

        else:
            logger.warning(
                "--> Add Friend button not present '{}'!\t~unexpected failure".
                format(userid_to_friend))
            return False, "unexpected failure"

    # general tasks after a successful friend
    logger.info("--> Friended '{}'!".format(userid_to_friend.encode("utf-8")))
    update_activity(Settings, 'friendeds')

    logtime = datetime.now().strftime('%Y-%m-%d %H:%M')
    log_friended_pool(login, userid_to_friend, logger, logfolder, logtime,
                      userid_to_friend)

    friend_restriction("write", userid_to_friend, None, logger)

    return True, "success"
Esempio n. 2
0
def follow_user(browser, track, login, userid_to_follow, button, blacklist,
                logger, logfolder, Settings):
    """ Follow a user either from the profile page or post page or dialog
    box """
    # list of available tracks to follow in: ["profile", "post" "dialog"]

    # check action availability
    if quota_supervisor(Settings, "follows") == "jump":
        return False, "jumped"

    if track in ["profile", "post"]:
        if track == "profile":
            # check URL of the webpage, if it already is user's profile
            # page, then do not navigate to it again
            user_link = "https://www.facebook.com/{}/".format(userid_to_follow)
            web_address_navigator(browser, user_link, Settings)

        # find out CURRENT following status
        following_status, follow_button = \
            get_following_status(browser,
                                 track,
                                 login,
                                 userid_to_follow,
                                 None,
                                 logger,
                                 logfolder)
        if following_status in ["Follow", "Follow Back"]:
            click_visibly(browser, Settings, follow_button)  # click to follow
            follow_state, msg = verify_action(browser, "follow", track, login,
                                              userid_to_follow, None, logger,
                                              logfolder)
            if follow_state is not True:
                return False, msg

        elif following_status in ["Following", "Requested"]:
            if following_status == "Following":
                logger.info(
                    "--> Already following '{}'!\n".format(userid_to_follow))

            elif following_status == "Requested":
                logger.info("--> Already requested '{}' to follow!\n".format(
                    userid_to_follow))

            sleep(1)
            return False, "already followed"

        elif following_status in ["Unblock", "UNAVAILABLE"]:
            if following_status == "Unblock":
                failure_msg = "user is in block"

            elif following_status == "UNAVAILABLE":
                failure_msg = "user is inaccessible"

            logger.warning("--> Couldn't follow '{}'!\t~{}".format(
                userid_to_follow, failure_msg))
            return False, following_status

        elif following_status is None:
            # TODO:BUG:2nd login has to be fixed with userid of loggedin user
            sirens_wailing, emergency_state = emergency_exit(
                browser, Settings, "https://www.facebook.com", login, login,
                logger, logfolder)
            if sirens_wailing is True:
                return False, emergency_state

            else:
                logger.warning(
                    "--> Couldn't unfollow '{}'!\t~unexpected failure".format(
                        userid_to_follow))
                return False, "unexpected failure"
    elif track == "dialog":
        click_element(browser, Settings, button)
        sleep(3)

    # general tasks after a successful follow
    logger.info("--> Followed '{}'!".format(userid_to_follow.encode("utf-8")))
    update_activity(Settings, 'follows')

    # get user ID to record alongside username
    user_id = get_user_id(browser, track, userid_to_follow, logger)

    logtime = datetime.now().strftime('%Y-%m-%d %H:%M')
    log_followed_pool(login, userid_to_follow, logger, logfolder, logtime,
                      user_id)

    follow_restriction("write", userid_to_follow, None, logger)

    if blacklist['enabled'] is True:
        action = 'followed'
        add_user_to_blacklist(userid_to_follow, blacklist['campaign'], action,
                              logger, logfolder)

    # get the post-follow delay time to sleep
    naply = get_action_delay("follow", Settings)
    sleep(naply)

    return True, "success"
Esempio n. 3
0
def unfollow_user(browser, track, username, userid, person, person_id, button,
                  relationship_data, logger, logfolder, Settings):
    """ Unfollow a user either from the profile or post page or dialog box """
    # list of available tracks to unfollow in: ["profile", "post" "dialog"]

    # check action availability
    if quota_supervisor(Settings, "unfollows") == "jump":
        return False, "jumped"

    if track in ["profile", "post"]:
        """ Method of unfollowing from a user's profile page or post page """
        if track == "profile":
            user_link = "https://www.facebook.com/{}/".format(person)
            web_address_navigator(browser, user_link, Settings)

        # find out CURRENT follow status
        following_status, follow_button = get_following_status(
            browser, track, username, person, person_id, logger, logfolder)

        if following_status in ["Following", "Requested"]:
            click_element(browser, Settings,
                          follow_button)  # click to unfollow
            sleep(4)  # TODO: use explicit wait here
            confirm_unfollow(browser)
            unfollow_state, msg = verify_action(browser, "unfollow", track,
                                                username, person, person_id,
                                                logger, logfolder)
            if unfollow_state is not True:
                return False, msg

        elif following_status in ["Follow", "Follow Back"]:
            logger.info("--> Already unfollowed '{}'! or a private user that "
                        "rejected your req".format(person))
            post_unfollow_cleanup(["successful", "uncertain"], username,
                                  person, relationship_data, person_id, logger,
                                  logfolder)
            return False, "already unfollowed"

        elif following_status in ["Unblock", "UNAVAILABLE"]:
            if following_status == "Unblock":
                failure_msg = "user is in block"

            elif following_status == "UNAVAILABLE":
                failure_msg = "user is inaccessible"

            logger.warning("--> Couldn't unfollow '{}'!\t~{}".format(
                person, failure_msg))
            post_unfollow_cleanup("uncertain", username, person,
                                  relationship_data, person_id, logger,
                                  logfolder)
            return False, following_status

        elif following_status is None:
            sirens_wailing, emergency_state = emergency_exit(
                browser, Settings, username, userid, logger, logfolder)
            if sirens_wailing is True:
                return False, emergency_state

            else:
                logger.warning(
                    "--> Couldn't unfollow '{}'!\t~unexpected failure".format(
                        person))
                return False, "unexpected failure"
    elif track == "dialog":
        """  Method of unfollowing from a dialog box """
        click_element(browser, Settings, button)
        sleep(4)  # TODO: use explicit wait here
        confirm_unfollow(browser)

    # general tasks after a successful unfollow
    logger.info("--> Unfollowed '{}'!".format(person))
    update_activity(Settings, 'unfollows')
    post_unfollow_cleanup("successful", username, person, relationship_data,
                          person_id, logger, logfolder)

    # get the post-unfollow delay time to sleep
    naply = get_action_delay("unfollow", Settings)
    sleep(naply)

    return True, "success"