def __get_account_following_set(self, id): Printer.START("Start of getting following set") variables = {} variables["id"] = id variables['first'] = 50 first_shot = True last_shot = False url = "view-source:https://www.instagram.com/graphql/query/?query_hash=58712303d941c6855d4e888c5f0cd22f&variables=" all_following = [] page_info = {} while True: if first_shot: first_shot = False else: variables["after"] = page_info["end_cursor"] req_url = url + str(json.dumps(variables)) self.__driver.get(req_url) pre = self.__driver.find_element_by_tag_name("pre").text data = json.loads(pre)['data'] page_info = (data['user']['edge_follow']['page_info']) edges = data['user']['edge_follow']['edges'] for user in edges: all_following.append(user['node']['username']) if not page_info["has_next_page"]: last_shot = True if last_shot: break Printer.OK("Getting all fallowing set is complete") all_following = set(all_following) return all_following
def __save_to_file(data, filename): Printer.START("Saving all fallowing in file") with open(filename, "w") as f: for unit in data: f.write("http://www.instagram.com/{}/\n".format(unit)) f.close() Printer.OK("Saving is complete")
def auto_follow(self, nickname, count=-1): Printer.START( "Starting of auto following. Target followers from user - {}\n". format(nickname)) user_data = self.get_user_data(nickname) if count < 0: count = user_data["edge_owner_to_timeline_media"] all_followers = self.__get_account_followers_set(user_data["id"]) self.__follow(all_followers[:count]) Printer.OK("Auto following is done\n")
def __authorization(self): Printer.START("Start of authorization \n") self.__driver.get("http://www.instagram.com") sleep(2) self.__driver.find_element_by_link_text("Вход").click() sleep(1) self.__driver.find_element_by_name("username").send_keys(self.__login) self.__driver.find_element_by_name("password").send_keys( self.__password, Keys.ENTER) sleep(4) self.__isAuth = True self.nickname = self.__get_my_nickname() self.update_my_data() Printer.OK("Authorization is done. Hello, {}!\n".format(self.nickname))
def auto_unlike(self, nickname, count): Printer.START( "Starting of UNLIKEMACHINE. Target - {}\n".format(nickname)) all_posts = self.get_user_all_posts(nickname) bar = progressbar.ProgressBar(max_value=len(all_posts)) for post, i in enumerate(all_posts[:count]): bar.update(i) self.__driver.get("http://www.instagram.com/{}/".format(post)) sleep(1) try: self.__driver.find_element_by_css_selector( "[aria-label='Не нравится']").click() except: continue Printer.OK("Unlike is done\n")
def __unfollow(self, following_list): Printer.START("Start of unfollow\n") bar = progressbar.ProgressBar(max_value=len(following_list)) for user, i in enumerate(following_list): bar.update(i) self.__driver.get("http://www.instagram.com/{}/".format(user)) self.__driver.find_element_by_css_selector( "[aria-label='Подписки']").click() self.__driver.find_element_by_xpath( "//button[text()='Отменить подписку']").click() print("User {} was unfollowed".format(user)) Printer.OK("Unfollow complete") print("_________________________") self.update_my_data() print("_________________________") self.__driver.get("http://www.instagram.com/{}/".format(self.nickname))
def __get_account_followers_set(self, id): Printer.START("Start of getting followers") variables = {} variables["id"] = id variables['first'] = 50 first_shot = True last_shot = False url = "view-source:https://www.instagram.com/graphql/query/?query_hash=37479f2b8209594dde7facb0d904896a&variables=" unfollowing_followers = [] following_followers = [] all_followers = [] page_info = {} while True: if first_shot: first_shot = False else: variables["after"] = page_info["end_cursor"] req_url = url + str(json.dumps(variables)) print(req_url) self.__driver.get(req_url) pre = self.__driver.find_element_by_tag_name("pre").text data = json.loads(pre)['data'] page_info = (data['user']['edge_followed_by']['page_info']) edges = data['user']['edge_followed_by']['edges'] for user in edges: all_followers.append(user['node']['username']) if user['node']['followed_by_viewer'] == True: following_followers.append(user['node']['username']) else: unfollowing_followers.append(user['node']['username']) if not page_info["has_next_page"]: last_shot = True if last_shot: break Printer.OK("Getting all fallowing set is complete") all_followers = set(all_followers) return all_followers, following_followers, unfollowing_followers
def __get_all_account_posts(self, id): Printer.START("Start of getting posts") variables = {} variables["id"] = id variables['first'] = 50 first_shot = True last_shot = False query_hash = "f2405b236d85e8296cf30347c9f08c2a" url = "view-source:https://www.instagram.com/graphql/query/?query_hash={}&variables=".format( query_hash) all_posts = [] liked_posts = [] not_liked_posts = [] page_info = {} while True: if first_shot: first_shot = False else: variables["after"] = page_info["end_cursor"] req_url = url + str(json.dumps(variables)) self.__driver.get(req_url) pre = self.__driver.find_element_by_tag_name("pre").text data = json.loads(pre)['data'] page_info = ( data['user']['edge_owner_to_timeline_media']['page_info']) edges = data['user']['edge_owner_to_timeline_media']['edges'] for post in edges: all_posts.append("p/" + post['node']['shortcode']) if post['node']['viewer_has_liked']: liked_posts.append("p/" + post['node']['shortcode']) else: not_liked_posts.append("p/" + post['node']['shortcode']) if not page_info["has_next_page"]: last_shot = True if last_shot: break Printer.OK("Getting all posts set is complete") all_posts = set(all_posts) return all_posts, liked_posts, not_liked_posts