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