Python Basit Instagram Bot//"P4RS

P4RS

Özel Üye
8 Ocak 2017
5,156
59
Ankara
Merhabalar TürkHackTeam ailesi, bugün sizlere "Python Basit Instagram Bot" konusunu anlatacağım.

Yazacağımız kod ile otomatik Instagram'a giriş yapıp, takipçilerimizi listeleyecek, birilerini takipten çıkacak ve takip edeceğiz. Hadi başlayalım. :))

Öncelikle Selenium modülünü bilgisayarımıza kurmamız lazım. CMD'ye pip install selenium yazmanız yeterli olacaktır veyahut kullandığınız IDE'a da aynı şekilde pip install selenium yazınız. Bunları yaptıktan sonra https://chromedriver.chromium.org/downloads buradan sizin Chrome tarayıcınıza uygun Webdriver'ı yükleyelim ve Python dosyanızla aynı klasöre koyalım.

Şimdi kodlarımızı yazmaya başlayalım. Öncelikle modüllerimizi eklememiz gerekiyor. En başa yazmamız önemlidir genel olarak bu şekilde kullanılır çünkü alta yazarsanız üstte yazdığınız kodlar çalışmaz.
Kod:
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.keys import Keys

Ardından Class oluşturup başlangıç kodlarını yazacağız. Bunun için de
Kod:
class Instagram:
    def __init__(self, user_name, password):

        self.user_name = user_name
        self.password = password
        self.browserProfile = webdriver.ChromeOptions()  # Bu ve altında ki özellikler ile tarayıcımız ingilizce olarak açılacaktır.
        self.browserProfile.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
        
        self.browser = webdriver.Chrome(chrome_options=self.browserProfile)
Burada user_name ve password parametrelerini tanımladık ardından
Kod:
self.browserProfile = webdriver.ChromeOptions()          self.browserProfile.add_experimental_option('prefs',{'intl.accept_languages : 'en,en_US'})
                self.browser = webdriver.Chrome(chrome_options=self.browserProfile)
kodları ile açılan tarayıcımızın İngilizce olarak açılmasını sağlayacağız. Bunu yapmamızın sebebi alt tarafta göreceksiniz takip etme ve takipten çıkma kısımlarında kimi kullanıcıların tarayıcıları İngilizce kimilerinin de Türkçe olduğundan takip et ve takipten çık kısımları karışıyor. Bunun önüne geçmek için önlem alıyoruz.
Ardından giriş yapmak için bir fonksiyon tanımlayacağız onu da bu kodlar ile yapacağız.
Kod:
def signIn(self):
    self.browser.get("https://www.instagram.com/accounts/login/")
    self.browser.implicitly_wait(15)
    userInput = self.browser.find_element_by_xpath("//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[2]/div/label/input")
    passwordInput = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[3]/div/label/input")

    try:
        userInput.send_keys(self.user_name)  # Kullanıcı griniiz kısmına giriş verisini yazacak
        passwordInput.send_keys(self.password)  # Şifre giriniz kısmına giriş verisini yazacak
        passwordInput.send_keys(
            Keys.ENTER)  # Bunun sayesinde de şifre kısmında Enter'a basacak bu da giriş yap butonunu tetikleyecek.

    except:
        pass
    self.browser.implicitly_wait(10)
Burada ilk olarak
Kod:
self.browser.get("https://www.instagram.com/accounts/login/")
kodu ile Instagram'ın login sitesine gidiyoruz. Ardından
Kod:
self.browser.implicitly_wait(15)
kodu ile siteyi bulamaz ise 15 saniye boyunca tekrar tekrar deneyecek bulduğunda işlemi gerçekleştirecek.
Kod:
userInput = self.browser.find_element_by_xpath("//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[2]/div/label/input")
kodunu ise

ruIHg1.jpg


Resim de ki gibi sağ tıklayıp öğeyi denetle yapıp ardından yine sağ tık kopyala ve Copy XPath ile kodu kopyalıyoruz. Bu kod ne işimize yarayacak derseniz o kutucuğun kodudur ve biz kullanıcıdan aldığımız kullanıcı adı verisini oraya yazdıracağız. Aynı şekilde şifre kısmında da XPath verisini alıyoruz.

ViE2VL.jpg


Burada önemli husus self.browser.find_element_by_xpath ile XPath verisini kullanıyoruz. Ardından
Kod:
    try:
        userInput.send_keys(self.user_name)  # Kullanıcı griniiz kısmına giriş verisini yazacak
        passwordInput.send_keys(self.password)  # Şifre giriniz kısmına giriş verisini yazacak
        passwordInput.send_keys(
            Keys.ENTER)  # Bunun sayesinde de şifre kısmında Enter'a basacak bu da giriş yap butonunu tetikleyecek.

    except:
        pass
    self.browser.implicitly_wait(10)
kodu ile de verilerimizi kutucuklara yazdırıp şifre kısmında Enter tuşuna bastırıyoruz. Burada Giriş Yap butonunu da atayabilirdik fakat şifre kısmında da Enter'a basarsak işlem yapılacaktır.

Şimdi de takipçilerimizi çekmek için bir fonksiyon oluşturacağız. Bunun için de
Kod:
def getFollowers(self):
    self.browser.get(f"https://www.instagram.com/{self.user_name}")  # başta ki soruda ki veriye göre giriş yapacak
    self.browser.implicitly_wait(10)
    followersLink = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()  # Profilde ki takipçi sayısı kısmına tıklayacak
    self.browser.implicitly_wait(10)
getFollowers fonksiyonunu oluşturduk. Kodların içine neler yaptıklarını yazdım fakat yine de yazayım
Kod:
self.browser.get(f"https://www.instagram.com/{self.user_name}")
komutu ile giriş yaptığımız kullanıcı adı ile https://www.instagram.com/ url'sini birleştirerek profilimize gidiyor.
Kod:
    followersLink = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()
kodu ile de kendi profilimizde ki takipçi sayısının verisini aldık onu almak için de

xi1H2t.jpg


Şeklinde yapabilirsiniz. Kodun sonun da bir de .click() kodu var bunu da oraya tıklayıp takipçi verisini alması için yazdık.
Aynı class'a devam ederek
Kod:
dialog = self.browser.find_element_by_css_selector("div[role=dialog] ul")  # Bunun sayesinde takipçi ekranına geleceğiz.
followersCount = len(dialog.find_elements_by_css_selector("li"))  # Bunun sayesinde takipçilerin nicklerine erişeceğiz.

print(f"Şu anda {followersCount} takipçi var.")  # Ekran da şu anda kaç takipçinin olduğunu gösteriyor.

self.action = webdriver.ActionChains(self.browser)

while True:
    dialog.click()  # Burada dialog ile takipçi penceresine bir kere tıklayacak ki Space tuşunu algılayabilsin.
    self.action.key_down(Keys.SPACE).key_up(Keys.SPACE).perform()  # key_down(Keys.SPACE) ile scroll aşağıya inecek ve up metodu ile de yukarıya çıkacak
    self.browser.implicitly_wait(15)



    newCount = len(dialog.find_elements_by_css_selector("li"))

    if followersCount != newCount:  # followersCount newCount'a eşit değilse scroll aşağıya inmeye devam etsin.
        followersCount = newCount
        print(f"Toplam takipçi {newCount}")
        self.browser.implicitly_wait(15)


    else:  # Eşitlenirse de bu döngüden çıkılsın.
        break

followers = dialog.find_elements_by_css_selector("li")

for user in followers:
    link = user.find_element_by_css_selector("a").get_attribute("href")
    print(link)
Burada ilk olarak
Kod:
dialog = self.browser.find_element_by_css_selector("div[role=dialog] ul")
kodunu elde etmek için Takipçiler kısmına tıklayıp öğeyi denetle yaparak takipçilerin verilerinin bulunduğu kısma gidiyoruz ve hepsinin div'in role=dialog altında ki ul kısmından verileri çekecek çünkü bizim takipçilerimizin verileri burada bulunmaktadır.
Ardından
Kod:
followersCount = len(dialog.find_elements_by_css_selector("li"))
Kodu ile takipçilerin kullanıcı adlarına erişeceğiz.
Kod:
self.action = webdriver.ActionChains(self.browser)

while True:
    dialog.click()  # Burada dialog ile takipçi penceresine bir kere tıklayacak ki Space tuşunu algılayabilsin.
    self.action.key_down(Keys.SPACE).key_up(Keys.SPACE).perform()  # key_down(Keys.SPACE) ile scroll aşağıya inecek ve up metodu ile de yukarıya çıkacak
    time.sleep(2)

    newCount = len(dialog.find_elements_by_css_selector("li"))

    if followersCount != newCount:  # followersCount newCount'a eşit değilse scroll aşağıya inmeye devam etsin.
        followersCount = newCount
        print(f"Toplam takipçi {newCount}")
        self.browser.implicitly_wait(15)


    else:  # Eşitlenirse de bu döngüden çıkılsın.
        break
komutu ile takipçilerin olduğu kısma tıklayacak fakat bir sorunumuz var takipçiler her scroll(aşağıya inmek için kullandığımız dikdörtgen şekil) aşağıya indiğinde 12'şer olarak kullanıcıları bizleri listeliyor. Fakat biz hepsini istiyoruz bu yüzden Keys.SPACE olan kodu kullanıyoruz. Daha sonra if bloğuna girerek space tuşuna bastığında hep yeni takipçi geliyorsa işlemi devam ediyor fakat eşitlendiğinde işlem bitiyor.
Kod:
followers = dialog.find_elements_by_css_selector("li")

for user in followers:
    link = user.find_element_by_css_selector("a").get_attribute("href")
    print(link)
komutu ile listelenen kullanıcıların kullanıcı adlarını alarak bizlere onların profil linklerine veriyor.

Şimdi takip etme özelliğini yapalım. Yine bir fonksiyon oluşturacağız buna da followUser diyelim ve kodları bu şekilde yazalım.
Kod:
def followUser(self, username):

    self.browser.get("https://instagram.com/" + username)  # Bu fonksiyon da ise instagram/username'e gitmektedir.
    self.browser.implicitly_wait(5)

    self.follow_button = self.browser.find_element_by_tag_name(
        "button")  # Butonun Html bilgisi button olduğu için ve sadece bir adet buton olduğu için direk button yazdım.
    if self.follow_button.text != "Following":  # Eğer takiptesin yazmıyorsa "Takip Et" butonuna tıklayacaktır.
        self.follow_button.click()
        self.browser.implicitly_wait(5)
    else:
        print("Kullanıcıyı zaten takip ediyorsunuz.")
Burada ise bizim verdiğimiz kullanıcı adını alacak ve instagram linkinin sonuna ekleyerek kullanıcının profiline gidecek. Ardından Takip et butonunun sitede ki class'ını yazıyoruz bu da button oluyor. Ardından if bloğu içine giriyoruz ve buton da ki yazı eğer Following değilse butona tıklatıyoruz fakat buton da Following yazıyorsa bizlere çıktı olarak zaten takip ediyorsun verisini veriyor.

Şimdi kullanıcıyı takipten çıkmayı anlatalım. Bir tane de unfollowUser isimli bir fonksiyon tanımlayalım ve kodları bu şekil de yazalım.
Kod:
def unfollowUser(self, username):

    self.browser.get("https://instagram.com/" + username)
    self.browser.implicitly_wait(15)


    self.follow_button = self.browser.find_element_by_tag_name("button")
    if self.follow_button.text == "Following":
        self.follow_button.click()
        self.browser.implicitly_wait(15)


        self.browser.find_element_by_xpath('//button[text()="Unfollow"]').click()
        print(f"Artık {username}'i takip etmiyorsunuz.")
    else:
        print("Zaten takip etmiyorsunuz.")
Burada aynı takip kısmında ki gibi kullanıcıdan aldığı kullanıcı adını instagram url'sine ekliyor ve o kullanıcının sayfasına gidiyor ve aynı şekilde buton özelliğini kullanıyor. if bloğuna giriyor ve butonda ki yazı Following'e eşitse buna tıklıyor ve bir kısım daha açılıyor bildiğiniz gibi. Bunda ki veriyi de aynı giriş ekranında yaptığımız XPath verisi gibi sağ tık yapıp XPath verisini alıyoruz ve ona tıklatıyoruz. Takip etmiyorsanız da zaten etmiyorsunuz çıktısını bizlere veriyor.
Şimdi bunu bir döngüye alalım ve kullanıcı adı ve şifre verilerini alalım ki düzgün çalışan bir programımız olsun :))

En alta gelerek
Kod:
print("""1- Takipçileri göster.
2- Takipten Çık
3- Takip Et""")
user_name = input("Kullanıcı adını giriniz: ")
password = input("Şifrenizi giriniz: ")
instgram = Instagram(user_name, password)
if user_name and password != "":
    instgram.signIn()
devam =""
while devam !="q":



    deger = input("Hangi değeri seçmek istersiniz: ")

    if deger == "1":
        instgram.getFollowers()
    elif deger == "2":
        kullanici = input("Hangi kullanıcıyı takipten çıkacaksınız: ")
        instgram.unfollowUser(kullanici)
    elif deger == "3":
        kullanici_ekle = input("Hangi kullanıcıyı takip edeceksiniz: ")
        instgram.followUser(kullanici_ekle)
    devam = input("Programı kapatmak için 'q' harfine basınız. Programı devam ettirmek için 'Enter' a basınız.")
yazıyoruz. Burada user_name ve password verilerini alıyoruz. Instagram sınıfını instgram değişkenine eşitliyorum ki daha rahat kullanabileyim. Ardından eğer kullanıcı adı ve şifre verileri var ise instgram.signIn()
verisini etkinleştiriyor. Ardından devam isimli bir değişken belirledik ki döngü devam edebilsin. Döngüyü de bunun q harfine eşit olmamasına eşitledim. Olursa program kapanacak. Eğer kullanıcıya sorulan soruda 1 verisini girerse takipçilerini sıralaması için yazdığımız fonksiyon devreye girecek. Eğer 2 ve 3 verilerini girerse bir soru daha soracak ve kullanıcı adı alacak. Ardından o kullanıcının sayfasına gidip işlemi gerçekleştirecek.


En son kodumuzu görmek isterseniz https://github.com/WhiteRedTHT/Karalamalarim/tree/master/Instagram_Bot bakabilirsiniz.


Kod da ki hatalarda yardımcı olduğu için umutkalay'a teşekkürler :))

f4XPQV.png


Konum bu kadardı arkadaşlar, başka bir konumda görüşmek üzere sağlıcakla..





 
Son düzenleme:

mamihakan

Katılımcı Üye
25 Ocak 2012
342
0
29
Kabristan
Windowsta modulenotfounderror: no module named 'selenium' hatası alıyorum.Rica etsem yardım edermisiniz.
 

hakan2299

Yeni üye
24 Eyl 2007
11
0
ustam ellerine saglık güzel paylaşım olmuş. instagram çekiliş uygulaması nasıl yaparız internette aramadıgım yer kalmadı. yorumları listeleyip işte kaç kişi kaç yorum atmış arkadaş etiketlemiş sayfayı takip edip etmedigini ona göre çekliş yapıp şanslı kişiyi bulma gibi. hiç bir konu bulamadım çok faydalı olacaktır. şimdiden teşekkürler...
 

x4807

Katılımcı Üye
10 Ağu 2019
985
17
Eline sağlık hocam cok güzel olmuş. Güzel emek vermişsiniz çok teşekkürler emekleriniz için hocam :sırıtan
 

Zen0X

Yeni üye
2 Haz 2023
4
0
Hocam eklediğiniz fotoğraflar şuan kullanılamıyor eğer şansınız varsa fotoğrafları ulaştırabilir veya ihtiyacımız olan Xpath'lerin nereye ait olduklarını iletebilir misin?
 

gostking

Katılımcı Üye
29 Nis 2020
410
717
Ötüken
Merhabalar TürkHackTeam ailesi, bugün sizlere "Python Basit Instagram Bot" konusunu anlatacağım.

Yazacağımız kod ile otomatik Instagram'a giriş yapıp, takipçilerimizi listeleyecek, birilerini takipten çıkacak ve takip edeceğiz. Hadi başlayalım. :))

Öncelikle Selenium modülünü bilgisayarımıza kurmamız lazım. CMD'ye pip install selenium yazmanız yeterli olacaktır veyahut kullandığınız IDE'a da aynı şekilde pip install selenium yazınız. Bunları yaptıktan sonra ChromeDriver - WebDriver for Chrome - Downloads buradan sizin Chrome tarayıcınıza uygun Webdriver'ı yükleyelim ve Python dosyanızla aynı klasöre koyalım.


Şimdi kodlarımızı yazmaya başlayalım. Öncelikle modüllerimizi eklememiz gerekiyor. En başa yazmamız önemlidir genel olarak bu şekilde kullanılır çünkü alta yazarsanız üstte yazdığınız kodlar çalışmaz.
Kod:
from selenium import webdriver[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.keys import Keys



Ardından Class oluşturup başlangıç kodlarını yazacağız. Bunun için de
Kod:
class Instagram:[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]    def __init__(self, user_name, password):

        self.user_name = user_name
        self.password = password
        self.browserProfile = webdriver.ChromeOptions()  # Bu ve altında ki özellikler ile tarayıcımız ingilizce olarak açılacaktır.
        self.browserProfile.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
        
        self.browser = webdriver.Chrome(chrome_options=self.browserProfile)
Burada user_name ve password parametrelerini tanımladık ardından
Kod:
self.browserProfile = webdriver.ChromeOptions()          self.browserProfile.add_experimental_option('prefs',{'intl.accept_languages : 'en,en_US'})
                self.browser = webdriver.Chrome(chrome_options=self.browserProfile)
kodları ile açılan tarayıcımızın İngilizce olarak açılmasını sağlayacağız. Bunu yapmamızın sebebi alt tarafta göreceksiniz takip etme ve takipten çıkma kısımlarında kimi kullanıcıların tarayıcıları İngilizce kimilerinin de Türkçe olduğundan takip et ve takipten çık kısımları karışıyor. Bunun önüne geçmek için önlem alıyoruz.


Ardından giriş yapmak için bir fonksiyon tanımlayacağız onu da bu kodlar ile yapacağız.
Kod:
def signIn(self):[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]    self.browser.get("https://www.instagram.com/accounts/login/")
    self.browser.implicitly_wait(15)
    userInput = self.browser.find_element_by_xpath("//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[2]/div/label/input")
    passwordInput = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[3]/div/label/input")

    try:
        userInput.send_keys(self.user_name)  # Kullanıcı griniiz kısmına giriş verisini yazacak
        passwordInput.send_keys(self.password)  # Şifre giriniz kısmına giriş verisini yazacak
        passwordInput.send_keys(
            Keys.ENTER)  # Bunun sayesinde de şifre kısmında Enter'a basacak bu da giriş yap butonunu tetikleyecek.

    except:
        pass
    self.browser.implicitly_wait(10)
Burada ilk olarak
Kod:
self.browser.get("https://www.instagram.com/accounts/login/")
kodu ile Instagram'ın login sitesine gidiyoruz. Ardından
Kod:
self.browser.implicitly_wait(15)
kodu ile siteyi bulamaz ise 15 saniye boyunca tekrar tekrar deneyecek bulduğunda işlemi gerçekleştirecek.
Kod:
userInput = self.browser.find_element_by_xpath("//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[2]/div/label/input")
kodunu ise



ruIHg1.jpg


Resim de ki gibi sağ tıklayıp öğeyi denetle yapıp ardından yine sağ tık kopyala ve Copy XPath ile kodu kopyalıyoruz. Bu kod ne işimize yarayacak derseniz o kutucuğun kodudur ve biz kullanıcıdan aldığımız kullanıcı adı verisini oraya yazdıracağız. Aynı şekilde şifre kısmında da XPath verisini alıyoruz.


ViE2VL.jpg


Burada önemli husus self.browser.find_element_by_xpath ile XPath verisini kullanıyoruz. Ardından
Kod:
[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]
    try:
        userInput.send_keys(self.user_name)  # Kullanıcı griniiz kısmına giriş verisini yazacak
        passwordInput.send_keys(self.password)  # Şifre giriniz kısmına giriş verisini yazacak
        passwordInput.send_keys(
            Keys.ENTER)  # Bunun sayesinde de şifre kısmında Enter'a basacak bu da giriş yap butonunu tetikleyecek.

    except:
        pass
    self.browser.implicitly_wait(10)
kodu ile de verilerimizi kutucuklara yazdırıp şifre kısmında Enter tuşuna bastırıyoruz. Burada Giriş Yap butonunu da atayabilirdik fakat şifre kısmında da Enter'a basarsak işlem yapılacaktır.



Şimdi de takipçilerimizi çekmek için bir fonksiyon oluşturacağız. Bunun için de
Kod:
def getFollowers(self):[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]    self.browser.get(f"https://www.instagram.com/{self.user_name}")  # başta ki soruda ki veriye göre giriş yapacak
    self.browser.implicitly_wait(10)
    followersLink = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()  # Profilde ki takipçi sayısı kısmına tıklayacak
    self.browser.implicitly_wait(10)
getFollowers fonksiyonunu oluşturduk. Kodların içine neler yaptıklarını yazdım fakat yine de yazayım
Kod:
self.browser.get(f"https://www.instagram.com/{self.user_name}")
komutu ile giriş yaptığımız kullanıcı adı ile url'sini birleştirerek profilimize gidiyor.
Kod:
    followersLink = self.browser.find_element_by_xpath(
        "//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()
kodu ile de kendi profilimizde ki takipçi sayısının verisini aldık onu almak için de



xi1H2t.jpg


Şeklinde yapabilirsiniz. Kodun sonun da bir de .click() kodu var bunu da oraya tıklayıp takipçi verisini alması için yazdık.

Aynı class'a devam ederek
Kod:
dialog = self.browser.find_element_by_css_selector("div[role=dialog] ul")  # Bunun sayesinde takipçi ekranına geleceğiz.[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]followersCount = len(dialog.find_elements_by_css_selector("li"))  # Bunun sayesinde takipçilerin nicklerine erişeceğiz.

print(f"Şu anda {followersCount} takipçi var.")  # Ekran da şu anda kaç takipçinin olduğunu gösteriyor.

self.action = webdriver.ActionChains(self.browser)

while True:
    dialog.click()  # Burada dialog ile takipçi penceresine bir kere tıklayacak ki Space tuşunu algılayabilsin.
    self.action.key_down(Keys.SPACE).key_up(Keys.SPACE).perform()  # key_down(Keys.SPACE) ile scroll aşağıya inecek ve up metodu ile de yukarıya çıkacak
    self.browser.implicitly_wait(15)



    newCount = len(dialog.find_elements_by_css_selector("li"))

    if followersCount != newCount:  # followersCount newCount'a eşit değilse scroll aşağıya inmeye devam etsin.
        followersCount = newCount
        print(f"Toplam takipçi {newCount}")
        self.browser.implicitly_wait(15)


    else:  # Eşitlenirse de bu döngüden çıkılsın.
        break

followers = dialog.find_elements_by_css_selector("li")

for user in followers:
    link = user.find_element_by_css_selector("a").get_attribute("href")
    print(link)


Burada ilk olarak
Kod:
dialog = self.browser.find_element_by_css_selector("div[role=dialog] ul")
kodunu elde etmek için Takipçiler kısmına tıklayıp öğeyi denetle yaparak takipçilerin verilerinin bulunduğu kısma gidiyoruz ve hepsinin div'in role=dialog altında ki ul kısmından verileri çekecek çünkü bizim takipçilerimizin verileri burada bulunmaktadır.

Ardından
Kod:
followersCount = len(dialog.find_elements_by_css_selector("li"))
Kodu ile takipçilerin kullanıcı adlarına erişeceğiz.
Kod:
self.action = webdriver.ActionChains(self.browser)[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]
while True:
    dialog.click()  # Burada dialog ile takipçi penceresine bir kere tıklayacak ki Space tuşunu algılayabilsin.
    self.action.key_down(Keys.SPACE).key_up(Keys.SPACE).perform()  # key_down(Keys.SPACE) ile scroll aşağıya inecek ve up metodu ile de yukarıya çıkacak
    time.sleep(2)

    newCount = len(dialog.find_elements_by_css_selector("li"))

    if followersCount != newCount:  # followersCount newCount'a eşit değilse scroll aşağıya inmeye devam etsin.
        followersCount = newCount
        print(f"Toplam takipçi {newCount}")
        self.browser.implicitly_wait(15)


    else:  # Eşitlenirse de bu döngüden çıkılsın.
        break
komutu ile takipçilerin olduğu kısma tıklayacak fakat bir sorunumuz var takipçiler her scroll(aşağıya inmek için kullandığımız dikdörtgen şekil) aşağıya indiğinde 12'şer olarak kullanıcıları bizleri listeliyor. Fakat biz hepsini istiyoruz bu yüzden Keys.SPACE olan kodu kullanıyoruz. Daha sonra if bloğuna girerek space tuşuna bastığında hep yeni takipçi geliyorsa işlemi devam ediyor fakat eşitlendiğinde işlem bitiyor.


Kod:
followers = dialog.find_elements_by_css_selector("li")[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]
for user in followers:
    link = user.find_element_by_css_selector("a").get_attribute("href")
    print(link)
komutu ile listelenen kullanıcıların kullanıcı adlarını alarak bizlere onların profil linklerine veriyor.



Şimdi takip etme özelliğini yapalım. Yine bir fonksiyon oluşturacağız buna da followUser diyelim ve kodları bu şekilde yazalım.
Kod:
def followUser(self, username):[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]
    self.browser.get("https://instagram.com/" + username)  # Bu fonksiyon da ise instagram/username'e gitmektedir.
    self.browser.implicitly_wait(5)

    self.follow_button = self.browser.find_element_by_tag_name(
        "button")  # Butonun Html bilgisi button olduğu için ve sadece bir adet buton olduğu için direk button yazdım.
    if self.follow_button.text != "Following":  # Eğer takiptesin yazmıyorsa "Takip Et" butonuna tıklayacaktır.
        self.follow_button.click()
        self.browser.implicitly_wait(5)
    else:
        print("Kullanıcıyı zaten takip ediyorsunuz.")
Burada ise bizim verdiğimiz kullanıcı adını alacak ve instagram linkinin sonuna ekleyerek kullanıcının profiline gidecek. Ardından Takip et butonunun sitede ki class'ını yazıyoruz bu da button oluyor. Ardından if bloğu içine giriyoruz ve buton da ki yazı eğer Following değilse butona tıklatıyoruz fakat buton da Following yazıyorsa bizlere çıktı olarak zaten takip ediyorsun verisini veriyor.



Şimdi kullanıcıyı takipten çıkmayı anlatalım. Bir tane de unfollowUser isimli bir fonksiyon tanımlayalım ve kodları bu şekil de yazalım.
Kod:
def unfollowUser(self, username):[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]
    self.browser.get("https://instagram.com/" + username)
    self.browser.implicitly_wait(15)


    self.follow_button = self.browser.find_element_by_tag_name("button")
    if self.follow_button.text == "Following":
        self.follow_button.click()
        self.browser.implicitly_wait(15)


        self.browser.find_element_by_xpath('//button[text()="Unfollow"]').click()
        print(f"Artık {username}'i takip etmiyorsunuz.")
    else:
        print("Zaten takip etmiyorsunuz.")
Burada aynı takip kısmında ki gibi kullanıcıdan aldığı kullanıcı adını instagram url'sine ekliyor ve o kullanıcının sayfasına gidiyor ve aynı şekilde buton özelliğini kullanıyor. if bloğuna giriyor ve butonda ki yazı Following'e eşitse buna tıklıyor ve bir kısım daha açılıyor bildiğiniz gibi. Bunda ki veriyi de aynı giriş ekranında yaptığımız XPath verisi gibi sağ tık yapıp XPath verisini alıyoruz ve ona tıklatıyoruz. Takip etmiyorsanız da zaten etmiyorsunuz çıktısını bizlere veriyor.


Şimdi bunu bir döngüye alalım ve kullanıcı adı ve şifre verilerini alalım ki düzgün çalışan bir programımız olsun :))

En alta gelerek
Kod:
print("""1- Takipçileri göster.[/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=white][CENTER][COLOR=white][CENTER]2- Takipten Çık
3- Takip Et""")
user_name = input("Kullanıcı adını giriniz: ")
password = input("Şifrenizi giriniz: ")
instgram = Instagram(user_name, password)
if user_name and password != "":
    instgram.signIn()
devam =""
while devam !="q":



    deger = input("Hangi değeri seçmek istersiniz: ")

    if deger == "1":
        instgram.getFollowers()
    elif deger == "2":
        kullanici = input("Hangi kullanıcıyı takipten çıkacaksınız: ")
        instgram.unfollowUser(kullanici)
    elif deger == "3":
        kullanici_ekle = input("Hangi kullanıcıyı takip edeceksiniz: ")
        instgram.followUser(kullanici_ekle)
    devam = input("Programı kapatmak için 'q' harfine basınız. Programı devam ettirmek için 'Enter' a basınız.")
yazıyoruz. Burada user_name ve password verilerini alıyoruz. Instagram sınıfını instgram değişkenine eşitliyorum ki daha rahat kullanabileyim. Ardından eğer kullanıcı adı ve şifre verileri var ise instgram.signIn()


verisini etkinleştiriyor. Ardından devam isimli bir değişken belirledik ki döngü devam edebilsin. Döngüyü de bunun q harfine eşit olmamasına eşitledim. Olursa program kapanacak. Eğer kullanıcıya sorulan soruda 1 verisini girerse takipçilerini sıralaması için yazdığımız fonksiyon devreye girecek. Eğer 2 ve 3 verilerini girerse bir soru daha soracak ve kullanıcı adı alacak. Ardından o kullanıcının sayfasına gidip işlemi gerçekleştirecek.


En son kodumuzu görmek isterseniz https://github.com/WhiteRedTHT/Karalamalarim/tree/master/Instagram_Bot bakabilirsiniz.


Kod da ki hatalarda yardımcı olduğu için umutkalay'a teşekkürler :))

f4XPQV.png


Konum bu kadardı arkadaşlar, başka bir konumda görüşmek üzere sağlıcakla..






Elinize sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.