Python Selenium Instagram Bot Yapımı

Python Selenium Instagram Bot

Python Selenium Instagram Bot Yapımı

    Merhaba arkadaşlar bu günkü yazımda python selenium modülünü kullanarak instagram için basit bir bot geliştireceğiz. Bu botu geliştirirken en azından ortalama düzeyde Python veya yazılım bilgisine sahip olmanız gerekiyor aksi taktirde yazılan bazı yerleri anlamakta zorluk çekebilirsiniz, en azından Python class, fonksiyon ve self yapısını bilmeniz gerekiyor.

Selenium kurulumu ve Web Driveri indirmek için buradaki yazıya bakın.

Kütüphaneleri Ekleyelim

 Şimdi gelin yavaş yava kodlarımızı yazmaya başlayalım, ilk olarak projemizde kullanacağımız kütüphaneleri eklemek ile başlayalım.

from time import sleep ## Saniye bazlı geciktirme işlemi yapabilmemiz için gereken kütüphane
from selenium.common.exceptions import NoSuchElementException ## Selenium hata ayıklamaları için gerekli kütüphane
from selenium.webdriver.common.keys import Keys ## Selenium ile birlikte klavyeyi simüle etmemize yarayan kütüphane
from selenium import webdriver ## Selenium web driver kütüphanesi
tarayiciDriverKonum = "C:\\Users\\ahmet\\Desktop\\Python\\Selenium\\geckodriver.exe" ## Web driver konumu

**Web Driver olarak hangi tarayıcıyı kullanıyorsanız kodları ona göre düzenlemeniz gerekiyor, ben bu botu firefox baz alarak yazıyorum.

Class Oluşturup İlk Fonksiyonumuzu Yazalım

Kütüphaneleri eklediğimize göre devam edelim, şimdi Instagram adında bir class oluşturalım ve classımızın içerisine fonksiyonlarımızı yazmaya başlayalım.

class Instagram:
    def __init__(self, tarayiciKonum, url="https://www.urhoba.net", kullaniciAdi="kullanıcı adı", sifre="şifre"):
        self.tarayici = webdriver.Firefox(executable_path=tarayiciDriverKonum)
        self.url = url
        self.girisurl = "https://www.instagram.com/accounts/login/"
        self.kullaniciAdi = kullaniciAdi
        self.sifre = sifre
        self.girisYapilmismi = False
        self.tumTakipciler = []
        self.tumTakipEdilenler = []

Burada ilk fonksiyonumuz "def __init__ (self, a,b,c)" bu fonksiyonu burada basit bir şekilde açıklamak istiyorum.

__init__ fonksiyonu python da class a özgü değişkenler atamamızı ve class ı çağırırken değiştirebileceğimiz, ekleyebileceğimiz değişkenler oluşturmamızı sağlar.

Biz Instagram için bot hazırlarken __init__ ile bazı değişkenleri burada tanımlayacağız ki ileride yazacağımız fonksiyonlar içerisinde kullanıcıya sormadan direkt olarak bize gerekli olan bilgiyi buradan çekebilelim diye.

Bu __init__ kısmında bu botu yazarken aslında en önemli kısım self.tarayici kısmı olduğunu söyleyebilirim çünkü yaptığımız bütün işlemleri bu tarayıcı değişkeni sayesinde yapacağız.

Tarayıcıyıcı Açma ve Kapatma Fonksiyonlarımızı Yazalım

__init__ kısmının ne işe yaradığını basit olarak anlattığımıza göre artık selenium kontrolünde tarayıcıyı açmak ve kapatmak için gerekli fonksiyonlarımızı oluşturalım.

def TarayiciAc(self):
        try:            
            self.tarayici.get(self.url)
            print("Tarayıcı açıldı.")
            self.tarayici.implicitly_wait(10)
        except:
            print("Tarayıcı açılırken bir sorun ile karşılaşıldı!")

    def TarayiciKapat(self):
        self.tarayici.close()

Tarayıcıyı açma fonksiyonunda try ve except komutlarını görmüşsünüzdür, bunlar bir hata olduğu zaman kullanıcıya direkt sistemin çökmesi yerine kullanıcıya bilinçli bir şekilde hata mesajları göstermek için kullandığımız komutlardır.

Selenium kütüphanesinde tarayıcımızı belirledikten sonra ".get("siteadresi")" ile tarayıcı açılır ve açılması istenen siteye gidilir,".implicity_wait(süre)" komutu ile sayfa yüklenene kadar bir gecikme konulur.

".close()" komutu ile birlikte tarayıcı kapatılır. bizler bunları fonksiyonların içerisine attık ki botumuz tamamen bittiği zaman bunların hepsini peş peşe sıralayıp çok daha kolay bir şekilde kullanabilelim diye. 

Instagram Hesabına Giriş Yapma Fonksiyonumuzu Yazalım

Şimdi herhangi bir instagram hesabına giriş yapma kısmının kodlarını yazalım.

 def GirisYap(self, url):
        try:
            self.tarayici.get(url)
            self.tarayici.implicitly_wait(10)
            kullaniciAdiInput = self.tarayici.find_element_by_css_selector(
                "input[name='username']")
            sifreInput = self.tarayici.find_element_by_css_selector(
                "input[name='password']")
            girisButon = self.tarayici.find_element_by_xpath(
                "//button[@type='submit']")
            kullaniciAdiInput.send_keys(self.kullaniciAdi)
            sifreInput.send_keys(self.sifre)
            girisButon.click()
            print("Hesaba başarılı bir şekilde giriş yapıldı.")
            self.girisYapilmismi = True
            sleep(10)

        except:
            print("Hesaba giriş yapılırken bir sorun ile karşılaşıldı!")

Burada "GirisYap(self, url)" şeklinde bir fonksiyon tanımladık. self ile __init__ içerisinde bulunan değişkenleri çekebiliyoruz ve buna ek olarak kullanıcıdan bir adet url istedim çünkü buraya kullanıcı instagramın kullanıcı giriş sayfasını eklemesi daha iyi olacaktır.

Selenium username Input


Sonrasında kullanıcıAdiInput adında bir değişken oluşturduk ve selenium özelligi olan css selector kullanarak kullanıcı adı giriş inputunu seçtirdik, aynısını şifre içinde yaptıktan sonra birde giriş butonu için yapıyoruz.

Bu seçmeleri yapmak için instagram giriş sayfasında f12 tuşuna basın ve sonra seçmek istediğiniz inputun üzerine sağ tıklayın "incele" (Edge) seçeneğine basın, sonra sağ taraftaki yerde sağ tıklayın ve "copy" yazan yerden hangisini kullanmak isterseniz onu seçin. Tabi seçtiğiniz kopyalama yöntemine göre kodlarınızda değişiklik yapmayı unutmayın.

Örneğin xpath seçtiyseniz css_selector yerine  "self.tarayici.find_element_by_xpath" yapmayı unutmayın.

kullanıcı adı ve şifre inputlarını seçtiğimiz için artık ".send_keys("")" komutu ile bu inputların içerisine kullanıcı adı ve şifremizi girmesini sağlıyoruz.

girisButon.click() komutu ile giriş butonuna tıklamasını sağlıyoruz. __init__ içerisinde giriş yapılmışmı boolunu true yapıyoruz. 

Bu boolu ileride takip etme veya takipten çıkma işlemlerinde güvenlik amacı ile oluşturduğumuzu söylemeliyim.

Takip Et ve Takipten Çık Fonksiyonlarını Yazalım

Instagram hesabına giriş yaptık, şimdi herhangi bir hesabı nasıl takip edeceğiz ya da nasıl takipten çıkacağız bunların kodunu yazmaya başlayalım.

    def TakipEt(self, kullaniciAdi):
        if self.girisYapilmismi == True:
            try:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takipEtButton = self.tarayici.find_element_by_css_selector(
                    'button')
                if takipEtButton.text == "Takip Et":
                    takipEtButton.click()
                    print(kullaniciAdi + " Takip edildi")
                else:
                    print(kullaniciAdi + " Zaten takip ediliyor..")

            except:
                print(kullaniciAdi + " Takip edilirken bir hata ile karşılaşıldı!")
        else:
            print("Lütfen birini takip etmek için önce bir hesap ile giriş yapın!")

    def TakiptenCik(self, kullaniciAdi):
        if self.girisYapilmismi == True:
            try:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takiptenCikButton1 = self.tarayici.find_element_by_xpath(
                    '//*[@id="react-root"]/section/main/div/header/section/div[1]/div[1]/div/div[2]/div/span/span[1]/button/div/span')
                takiptenCikButton1.click()
                self.tarayici.implicitly_wait(10)
                takiptenCikButton2 = self.tarayici.find_element_by_xpath(
                    '/html/body/div[4]/div/div/div/div[3]/button[1]')
                if takiptenCikButton2.text == "Takibi Bırak":
                    takiptenCikButton2.click()
                    self.tarayici.implicitly_wait(10)
                    print(kullaniciAdi + " Takipten çıkıldı.")
            except:
                print(kullaniciAdi + "Takipten çıkılırken bir sorun ile karşılaşıldı!")
        else:
            print("Lütfen birini takipten çıkmak için önce bir hesap ile giriş yapın!")

Bu iki fonksiyonda da ortak olarak if ile birlikte herhangi bir hesaba giriş yapılmışmı kontrol ettiriyoruz, sonrasında try ve except ile hataları yakalamaya başlıyor daha sonrasında da kullanıcı adını kullanarak tarayıcıda takip edeceğimiz, takipten çıkacağımız kişinin profiline gidiyoruz.
Takip et kısmı için takip et butonunun xpath konumunu alıyoruz ve sonrasında "Takip Et" yazıyorsa takip et butonuna tıklamasını sağlıyoruz, eğer ki "Takip Et" yazmıyorsa zaten takip ediyorsunuz yazdırıyoruz.

Takipten çıkmak için ilk olarak takipten çık kısmından önce gözüken butona tıklatıyor, sonra da takipten çık kısmının xpath ile konumunu alıyor ve takipten çık butonuna tıklatıyoruz.

Takipten çık

Profil Analiz Fonksiyonu Yazalım

 def ProfilAnaliz(self, kullaniciAdi):
        try:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            gonderiSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[1]/a/span')
            takipciSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[2]/a/span')
            takipEdilenSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[3]/a/span')
            kullaniciIsim = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/h1')
            kullaniciBio = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/span')
            kullaniciURL = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/a')
            print("Hesap : " + kullaniciAdi + "\nİsim : " + kullaniciIsim.text + "\nBiyografi : " + kullaniciBio.text + "\nURL : " + kullaniciURL.text +
                  "\nGönderi sayısı : " + gonderiSayisi.text + "\nTakipci sayısı : " + takipciSayisi.text + "\nTakip edilen sayısı : " + takipEdilenSayisi.text)
        except:
            print(kullaniciAdi +
                  " Profili analiz edilirken bir sorun ile karşılaşıldı!")

Herhangi bir kullanıcının gönderi sayısı gibi bilgileri çekmek için yazdığımız fonksiyon. Gene xpath ile bu bilgilerin yazdığı yerlerin konumunu kopyalayıp selenium ile yazan verileri çekip ekrana bastırıyoruz. 

Hesap Gizlimi Kontrol Etme

def HesapGizlimi(self, kullaniciAdi):
        try:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            hesapGizlimi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/div/article/div/div/h2')
            if hesapGizlimi.text == "Bu Hesap Gizli":
                return True
            else:
                return False
        except NoSuchElementException:
            return False
        else:
            print("Hesap gizlimi kontrol edilirken bir sorun ile karşılaşıldı!")

Selenium genel olarak xpath gibi adres seçim araçları ile yazıları almamızı sağlar ve bu çektiğimiz yazılar ile bizler ne yapmak istiyorsak o amaç doğrultusunda kullanırız, ileride herhangi bir hesabın takipçilerini görmek veya takip etmeyenlerini analiz etmek için hesabın profilinin açık olması gerekiyor işte bu yüzden hesap açık mı kapalı mı kontrol etmeliyiz bunu da profil gizli yazısına bakarak yapıyoruz.

Takip Edenleri ve Takip Ettiklerimizi Gösteren Fonksiyonu Yazalım


Evet buraya kadar her şey oldukça basitti, aslında buradan sonrasında da oldukça basit ama burada yapacağımız işlem diğer yere göre biraz daha meşakatli. Takip edenleri ve Takip ettiklerimizi görmek birebir aynıdır bu yüzden anlatımı Takip Edenler üzerinden anlatacağım.

Takip Edenleri bulmak için kodumuz


  def TakipEdenleriGoster(self, kullaniciAdi, gosterGizle = False):
        if self.HesapGizlimi(kullaniciAdi):
            print("Hesap gizli olduğu için takip edenleri göremiyorum!")
        else:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takipEdenlerLink = self.tarayici.find_element_by_xpath(
                "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()
                self.tarayici.implicitly_wait(10)
                pencere = self.tarayici.find_element_by_css_selector("div[role=dialog] ul")
                takipEdenSayac = len(pencere.find_elements_by_css_selector("li"))
                print("Şu anda "+ str(takipEdenSayac) +" takip edeniniz var.")

                self.action = webdriver.ActionChains(self.tarayici)
                pencere.click()
                
                while True:
                    self.action.key_down(Keys.END).key_up(Keys.SPACE).perform()
                    sleep(5)                    
                    yeniSayac = len(pencere.find_elements_by_css_selector("li"))

                    if takipEdenSayac != yeniSayac:
                        takipEdenSayac = yeniSayac
                        print("Toplam takipçi " + str(yeniSayac))
                        self.tarayici.implicitly_wait(15)
                    else: 
                        break                                      
                    
                takipciler = pencere.find_elements_by_css_selector("li")

                for hesap in takipciler:
                    link = hesap.find_element_by_css_selector("a").get_attribute("href")
                    self.tumTakipciler.append(link)
                    if gosterGizle:
                        print(link)

Burada fonksiyonumuzda ileriye dönük olarak gösterGizle isimli bir değişken daha ekledik bunun sebebi takip etmeyenler gösterirken hem takip edenleri, hem takip edilenleri hem de takip etmeyenleri göstermesini engellemek amacı ile koyduk, Çünkü ileride çalışacak olan takip etmeyenleri bulma fonksiyonu temel olarak bu fonksiyondan sonra yazılması gerekiyor.

İlk olarak analiz ettiğimiz hesap gizlimi onu kontrol ediyoruz ve gizli değilse  tarayıcıda profilini açıyoruz,  ardından takip edenlere tıklıyoruz. 
Takip edenlere tıkladıktan sonra takip edenlerin sonuna gelene kadar kaydırma çubuğunu aşağı çekip isimleri bir diziye aktarıyoruz.
Eğer gösterGizli true değerini döndürüyorsa takip edenlerin adlarını ekrana yazdırıyoruz.

Burada diğer yerlere göre farklı olan kısım "action.key_down(Keys.END)" kısmıdır, bu sayfanın inebildiği kadar aşağı inmesini sağlıyor.
".key_up(Keys.SPACE)" bu ise sayfa bugda kalmasın diye indikten sonra 1 space birim yukarı çıkmasını sağlıyor.

Takip Edilenleri bulmak için kod

 def TakipEttikleriniGoster(self, kullaniciAdi, gosterGizle = False):
        if self.HesapGizlimi(kullaniciAdi):
            print("Hesap gizli olduğu için takip ettiklerini göremiyorum!")
        else:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            takipEttikleriLink = self.tarayici.find_element_by_xpath(
            "//*[@id='react-root']/section/main/div/header/section/ul/li[3]/a").click()
            self.tarayici.implicitly_wait(10)
            pencere = self.tarayici.find_element_by_css_selector("div[role=dialog] ul")
            takipEttikleriSayac = len(pencere.find_elements_by_css_selector("li"))
            print("Şu anda "+ str(takipEttikleriSayac) +" kişiyi takip ediyorsunuz.")

            self.action = webdriver.ActionChains(self.tarayici)
            pencere.click()

            while True:
                self.action.key_down(Keys.END).key_up(Keys.SPACE).perform()
                sleep(5)                    
                yeniSayac = len(pencere.find_elements_by_css_selector("li"))

                if takipEttikleriSayac != yeniSayac:
                    takipEttikleriSayac = yeniSayac
                    print("Toplam takip ettiğin " + str(yeniSayac))
                    self.tarayici.implicitly_wait(15)
                else: 
                    break                                      
                    
            takipedilenler = pencere.find_elements_by_css_selector("li")

            for hesap in takipedilenler:
                link = hesap.find_element_by_css_selector("a").get_attribute("href")
                self.tumTakipEdilenler.append(link)
                if gosterGizle:
                    print(link)

Takip Etmeyenlerin Bulunması

 def TakipEtmeyenler(self):
        if len(self.tumTakipEdilenler) != 0 and len(self.tumTakipciler) != 0:
            print("Takip Etmeyenler")
            for takipEdilenler in self.tumTakipEdilenler:
                if takipEdilenler not in self.tumTakipciler:
                    print(takipEdilenler)   
        else:
            print("Lütfen ilk olarak takipcileri ve takip edilenleri gösterin!")

Takip etmeyenleri bulmak için takip edilenler ve takipçiler bulunduktan sonra oluşturulan listelerden takip edilenlerin takipcilere olan farkı alınıyor ve bu sayede takip ettiğiniz kişilerden sizi takip edenler çıkartılınca geriye kalanlar takip etmeyenleri veriyor.

Şimdi gelelim bu yazdığımız class ı nasıl kullanacağız ?

Ins = Instagram(tarayiciDriverKonum, "https://instagram.com/", "kullanıcı adı", "şifre")
Ins.TarayiciAc()
Ins.ProfilAnaliz("urhob")
Ins.GirisYap("https://www.instagram.com/accounts/login/")
Ins.TakipEdenleriGoster("urhoba",True)
Ins.TakipEttikleriniGoster("urhoba",True)
Ins.TakipEtmeyenler()
Ins.TakiptenCik("urhoba")
Ins.TakipEt("urhoba")
Ins.TarayiciKapat()

Herhangi bir değişken oluşturup sonrasında sınıfımızı çekecek, gerekli bilgileri gireceğiz ve kullanmak istediğimiz fonksiyonları yazacağız. Kullanmak istediğimiz fonksiyonları yazarken dikkat etmemiz gereken bir kaç koşul var bunlar

Birini takip etmek veya takipten çıkmak için ilk olarak giriş fonksiyonunu çağırmanız gerekiyor.

Birinin takip etmeyenlerini bulmak için ilk olarak takip edenler ve takip edilenler fonksiyonunu çağırmanız sonrasında takip etmeyenler fonksiyonunu çağırmanız gerekiyor.

Not : Eğer işlemler bittikten sonra konsol hemen kapanıyorsa kodlarınızın sonuna "print(input())" ekleyin. Böylelikle siz konsolda herhangi bir tuşa basıp yollayana kadar bekleyecektir.

Kullandığımız kodların tümü

from time import sleep ## Saniye bazlı geciktirme işlemi yapabilmemiz için gereken kütüphane
from selenium.common.exceptions import NoSuchElementException ## Selenium hata ayıklamaları için gerekli kütüphane
from selenium.webdriver.common.keys import Keys ## Selenium ile birlikte klavyeyi simüle etmemize yarayan kütüphane
from selenium import webdriver ## Selenium web driver kütüphanesi
tarayiciDriverKonum = "C:\\Users\\ahmet\\Desktop\\Python\\Selenium\\geckodriver.exe" ## Web driver konumu

"""
Özellikler

Takip Et
Takipten Çık
Takip Edenler
Takip Ettikleri
Takip Etmeyenler
Profil Analiz

"""


class Instagram:
    def __init__(self, tarayiciKonum, url="https://www.urhoba.net", kullaniciAdi="kullanıcı adı", sifre="şifre"):
        self.tarayici = webdriver.Firefox(executable_path=tarayiciDriverKonum)
        self.url = url
        self.girisurl = "https://www.instagram.com/accounts/login/"
        self.kullaniciAdi = kullaniciAdi
        self.sifre = sifre
        self.girisYapilmismi = False
        self.tumTakipciler = []
        self.tumTakipEdilenler = []

    def TarayiciAc(self):
        try:            
            self.tarayici.get(self.url)
            print("Tarayıcı açıldı.")
            self.tarayici.implicitly_wait(10)
        except:
            print("Tarayıcı açılırken bir sorun ile karşılaşıldı!")

    def TarayiciKapat(self):
        self.tarayici.close()

    def GirisYap(self, url):
        try:
            self.tarayici.get(url)
            self.tarayici.implicitly_wait(10)
            kullaniciAdiInput = self.tarayici.find_element_by_css_selector(
                "input[name='username']")
            sifreInput = self.tarayici.find_element_by_css_selector(
                "input[name='password']")
            girisButon = self.tarayici.find_element_by_xpath(
                "//button[@type='submit']")
            kullaniciAdiInput.send_keys(self.kullaniciAdi)
            sifreInput.send_keys(self.sifre)
            girisButon.click()
            print("Hesaba başarılı bir şekilde giriş yapıldı.")
            self.girisYapilmismi = True
            sleep(10)

        except:
            print("Hesaba giriş yapılırken bir sorun ile karşılaşıldı!")

    def TakipEt(self, kullaniciAdi):
        if self.girisYapilmismi == True:
            try:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takipEtButton = self.tarayici.find_element_by_css_selector(
                    'button')
                if takipEtButton.text == "Takip Et":
                    takipEtButton.click()
                    print(kullaniciAdi + " Takip edildi")
                else:
                    print(kullaniciAdi + " Zaten takip ediliyor..")

            except:
                print(kullaniciAdi + " Takip edilirken bir hata ile karşılaşıldı!")
        else:
            print("Lütfen birini takip etmek için önce bir hesap ile giriş yapın!")

    def TakiptenCik(self, kullaniciAdi):
        if self.girisYapilmismi == True:
            try:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takiptenCikButton1 = self.tarayici.find_element_by_xpath(
                    '//*[@id="react-root"]/section/main/div/header/section/div[1]/div[1]/div/div[2]/div/span/span[1]/button/div/span')
                takiptenCikButton1.click()
                self.tarayici.implicitly_wait(10)
                takiptenCikButton2 = self.tarayici.find_element_by_xpath(
                    '/html/body/div[4]/div/div/div/div[3]/button[1]')
                if takiptenCikButton2.text == "Takibi Bırak":
                    takiptenCikButton2.click()
                    self.tarayici.implicitly_wait(10)
                    print(kullaniciAdi + " Takipten çıkıldı.")
            except:
                print(kullaniciAdi + "Takipten çıkılırken bir sorun ile karşılaşıldı!")
        else:
            print("Lütfen birini takipten çıkmak için önce bir hesap ile giriş yapın!")

    def ProfilAnaliz(self, kullaniciAdi):
        try:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            gonderiSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[1]/a/span')
            takipciSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[2]/a/span')
            takipEdilenSayisi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/ul/li[3]/a/span')
            kullaniciIsim = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/h1')
            kullaniciBio = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/span')
            kullaniciURL = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/header/section/div[2]/a')
            print("Hesap : " + kullaniciAdi + "\nİsim : " + kullaniciIsim.text + "\nBiyografi : " + kullaniciBio.text + "\nURL : " + kullaniciURL.text +
                  "\nGönderi sayısı : " + gonderiSayisi.text + "\nTakipci sayısı : " + takipciSayisi.text + "\nTakip edilen sayısı : " + takipEdilenSayisi.text)
        except:
            print(kullaniciAdi +
                  " Profili analiz edilirken bir sorun ile karşılaşıldı!")

    def HesapGizlimi(self, kullaniciAdi):
        try:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            hesapGizlimi = self.tarayici.find_element_by_xpath(
                '/html/body/div[1]/section/main/div/div/article/div/div/h2')
            if hesapGizlimi.text == "Bu Hesap Gizli":
                return True
            else:
                return False
        except NoSuchElementException:
            return False
        else:
            print("Hesap gizlimi kontrol edilirken bir sorun ile karşılaşıldı!")

    def TakipEdenleriGoster(self, kullaniciAdi, gosterGizle = False):
        if self.HesapGizlimi(kullaniciAdi):
            print("Hesap gizli olduğu için takip edenleri göremiyorum!")
        else:
                self.tarayici.get(self.url + kullaniciAdi)
                self.tarayici.implicitly_wait(10)
                takipEdenlerLink = self.tarayici.find_element_by_xpath(
                "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()
                self.tarayici.implicitly_wait(10)
                pencere = self.tarayici.find_element_by_css_selector("div[role=dialog] ul")
                takipEdenSayac = len(pencere.find_elements_by_css_selector("li"))
                print("Şu anda "+ str(takipEdenSayac) +" takip edeniniz var.")

                self.action = webdriver.ActionChains(self.tarayici)
                pencere.click()
                
                while True:
                    self.action.key_down(Keys.END).key_up(Keys.SPACE).perform()
                    sleep(5)                    
                    yeniSayac = len(pencere.find_elements_by_css_selector("li"))

                    if takipEdenSayac != yeniSayac:
                        takipEdenSayac = yeniSayac
                        print("Toplam takipçi " + str(yeniSayac))
                        self.tarayici.implicitly_wait(15)
                    else: 
                        break                                      
                    
                takipciler = pencere.find_elements_by_css_selector("li")

                for hesap in takipciler:
                    link = hesap.find_element_by_css_selector("a").get_attribute("href")
                    self.tumTakipciler.append(link)
                    if gosterGizle:
                        print(link)

    def TakipEttikleriniGoster(self, kullaniciAdi, gosterGizle = False):
        if self.HesapGizlimi(kullaniciAdi):
            print("Hesap gizli olduğu için takip ettiklerini göremiyorum!")
        else:
            self.tarayici.get(self.url + kullaniciAdi)
            self.tarayici.implicitly_wait(10)
            takipEttikleriLink = self.tarayici.find_element_by_xpath(
            "//*[@id='react-root']/section/main/div/header/section/ul/li[3]/a").click()
            self.tarayici.implicitly_wait(10)
            pencere = self.tarayici.find_element_by_css_selector("div[role=dialog] ul")
            takipEttikleriSayac = len(pencere.find_elements_by_css_selector("li"))
            print("Şu anda "+ str(takipEttikleriSayac) +" kişiyi takip ediyorsunuz.")

            self.action = webdriver.ActionChains(self.tarayici)
            pencere.click()

            while True:
                self.action.key_down(Keys.END).key_up(Keys.SPACE).perform()
                sleep(5)                    
                yeniSayac = len(pencere.find_elements_by_css_selector("li"))

                if takipEttikleriSayac != yeniSayac:
                    takipEttikleriSayac = yeniSayac
                    print("Toplam takip ettiğin " + str(yeniSayac))
                    self.tarayici.implicitly_wait(15)
                else: 
                    break                                      
                    
            takipedilenler = pencere.find_elements_by_css_selector("li")

            for hesap in takipedilenler:
                link = hesap.find_element_by_css_selector("a").get_attribute("href")
                self.tumTakipEdilenler.append(link)
                if gosterGizle:
                    print(link)

    def TakipEtmeyenler(self):
        if len(self.tumTakipEdilenler) != 0 and len(self.tumTakipciler) != 0:
            print("Takip Etmeyenler")
            for takipEdilenler in self.tumTakipEdilenler:
                if takipEdilenler not in self.tumTakipciler:
                    print(takipEdilenler)   
        else:
            print("Lütfen ilk olarak takipcileri ve takip edilenleri gösterin!")


Ins = Instagram(tarayiciDriverKonum, "https://instagram.com/", "kullanıcı adı", "şifre")
Ins.TarayiciAc()
Ins.ProfilAnaliz("urhob")
Ins.GirisYap("https://www.instagram.com/accounts/login/")
Ins.TakipEdenleriGoster("urhoba",True)
Ins.TakipEttikleriniGoster("urhoba",True)
Ins.TakipEtmeyenler()
Ins.TakiptenCik("urhoba")
Ins.TakipEt("urhoba")
Ins.TarayiciKapat()


print(input())

Bu projenin kaynak kodlarına GitHub üzerinden bakabilirsiniz.

Çıktı