Проблема с установщиком get_followers - PullRequest
0 голосов
/ 07 августа 2020

Итак, я написал этот код, чтобы получить список подписчиков в Instagram, используя библиотеку instaloader в 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)

Но я продолжаю получать эту ошибку:

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.

Как решить эту проблему? В выводе указано, что профиль «femindharamshi» не существует, но это мой профиль. Здесь также написано:

Наиболее похожий профиль: femindharamshi.

1 Ответ

0 голосов
/ 07 августа 2020
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...