TheNoobDeveloper0299
TheNoobDeveloper0299

Reputation: 767

Instaloader get_followers issue

So I wrote this code to get the list of followers on Instagram using instaloader library in python :

login_name = 'beyondhelloworld'

target_profile = 'femindharamshi'
# OR
#import sys
#target_profile = sys.argv[1] # pass in target profile as argument

from instaloader import Instaloader, Profile
loader = Instaloader()

# login
try:
    loader.load_session_from_file(login_name)
except FileNotFoundError:
    loader.context.log("Session file does not exist yet - Logging in.")
if not loader.context.is_logged_in:
    loader.interactive_login(login_name)
    loader.save_session_to_file()

profile = Profile.from_username(loader.context, target_profile)
followers = profile.get_followers()

loader.context.log()
loader.context.log('Profile {} has {} followers:'.format(profile.username, profile.followers))
loader.context.log()

for follower in followers:
    loader.context.log(follower.username, flush=True)

But I keep getting this error :

Loaded session from /Users/femindharamshi/.config/instaloader/session-beyondhelloworld.
Traceback (most recent call last):
  File "/Users/femindharamshi/Documents/instaload/env/lib/python3.7/site-packages/instaloader/structures.py", line 597, in _obtain_metadata
    self._node = metadata['entry_data']['ProfilePage'][0]['graphql']['user']
KeyError: 'graphql'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "il.py", line 20, in <module>
    profile = Profile.from_username(loader.context, target_profile)
  File "/Users/femindharamshi/Documents/instaload/env/lib/python3.7/site-packages/instaloader/structures.py", line 552, in from_username
    profile._obtain_metadata()  # to raise ProfileNotExistException now in case username is invalid
  File "/Users/femindharamshi/Documents/instaload/env/lib/python3.7/site-packages/instaloader/structures.py", line 606, in _obtain_metadata
    ', '.join(similar_profiles[0:5]))) from err
instaloader.exceptions.ProfileNotExistsException: Profile femindharamshi does not exist.
The most similar profile is: femindharamshi.

How do I solve this issue? The output says that profile "femindharamshi" does not exist but that is what my profile is. It also says :

The most similar profile is: femindharamshi.

Upvotes: 0

Views: 1675

Answers (2)

alireza jahani
alireza jahani

Reputation: 76

import instaloader
import random
import os
dir_path_driver = os.getcwd()
def username_password():
        listusername = []
        with open("./username.txt","r") as usernames:
            for username in usernames:
               listusername.append((username.rstrip("\n")).split(":"))
        if len(listusername) == 1:
            select = 0
        else:
            select = random.randint(0,len(listusername))
        return listusername[select][0],listusername[select][1]
def get_followers():
        L = instaloader.Instaloader()
        # Login or load session
        username,password =username_password()
        listfile = os.listdir(dir_path_driver+"/cookie")
        for i in listfile:
            if i != f"{username}":
                    L.login(username, password)
                    L.save_session_to_file(filename=dir_path_driver+"/cookie/"+f"{username}")
            else:
                L.load_session_from_file(filename=dir_path_driver+"/cookie/"+f"{username}",username = username)
        
        file = open("prada_followers.txt","a+")
        profile = instaloader.Profile.from_username(L.context, "idinstagram")
        for followee in profile.get_followers():
            username = followee.username
            file.write(username + "\n")
        file.close()

Upvotes: 1

Rohan Patel
Rohan Patel

Reputation: 46

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

class InstaBot:
    """InstaBot can login, can return unfollowers that don't
           follow you back.
           Object requires two args.
           'Username' & 'Password' """
    def __init__(self,username,pw):
        self.username = username
        self.pw = pw
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')
        self.base_url = "https://instagram.com"
        
        self.driver.get("{}".format(self.base_url))
        sleep(2)
        self.driver.maximize_window()
        self.login()

    def login(self):
        self.driver.find_element_by_xpath("//input[@name=\"username\"]")\
                .send_keys(self.username)
        self.driver.find_element_by_xpath("//input[@name=\"password\"]")\
            .send_keys(self.pw)
        self.driver.find_element_by_xpath("//button[@type=\"submit\"]")\
            .click()
        sleep(10)
        self.driver.find_element_by_xpath("//button[contains(text(), 'Not Now')]")\
            .click()
        sleep(2)

    def get_unfollowers(self):
        self.driver.find_element_by_xpath("//a[contains(@href, '/{}')]".format(self.username))\
            .click()

        sleep(3)
        self.driver.find_element_by_xpath("//a[contains(@href, '/following')]")\
            .click()
        sleep(2)
        following = self._get_names()

        self.driver.find_element_by_xpath("//a[contains(@href, '/followers')]")\
            .click()
        sleep(2)
        followers = self._get_names()
        not_following_back = [user for user in following if user not in followers]
        return not_following_back

##        suggetions = self.driver.find_element_by_xpath('//h4[contains(text(), Suggetions)]')
##        self.driver.execute_script('arguments[0].scrollIntoView()',suggetions)

    def _get_names(self):
        scroll_box = self.driver.find_element_by_xpath("/html/body/div[4]/div/div[2]")
        last_ht , ht = 0,1
        while last_ht != ht:
            last_ht = ht
            sleep(1)
            ht = self.driver.execute_script("""
                    arguments[0].scrollTo(0,arguments[0].scrollHeight);
                    return arguments[0].scrollHeight;
                    """, scroll_box)

        links = scroll_box.find_elements_by_tag_name('a')
        names = [name.text for name in links if name.text != '']
        
        sleep(2)
        self.driver.find_element_by_xpath("/html/body/div[4]/div/div[1]/div/div[2]/button")\
            .click()
        return names

    def navigate_to_user(self,user):
        self.driver.get("{}/{}".format(self.base_url,user))
        

    def scroll_down(self):
        last_height = self.driver.execute_script("return document.body.scrollHeight")
        while True:
            self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            sleep(2)

            new_height = self.driver.execute_script("return document.body.scrollHeight")

            if new_height == last_height:
                break

            last_height = new_height
        
        


my_bot = InstaBot(Username,Password)
##unfollowers = my_bot.get_unfollowers()  #will return a list
my_bot.navigate_to_user(Any User Name that you follow) #Will return your friend's followers list

Upvotes: 0

Related Questions