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.
Ardından Class oluşturup başlangıç kodlarını yazacağız. Bunun için de
Burada user_name ve password parametrelerini tanımladık ardından
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.
Burada ilk olarak
kodu ile Instagram'ın login sitesine gidiyoruz. Ardından
kodu ile siteyi bulamaz ise 15 saniye boyunca tekrar tekrar deneyecek bulduğunda işlemi gerçekleştirecek.
kodunu ise
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.
Burada önemli husus self.browser.find_element_by_xpath ile XPath verisini kullanıyoruz. Ardından
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
getFollowers fonksiyonunu oluşturduk. Kodların içine neler yaptıklarını yazdım fakat yine de yazayım
komutu ile giriş yaptığımız kullanıcı adı ile https://www.instagram.com/ url'sini birleştirerek profilimize gidiyor.
kodu ile de kendi profilimizde ki takipçi sayısının verisini aldık onu almak için de
Ş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
Burada ilk olarak
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
Kodu ile takipçilerin kullanıcı adlarına erişeceğiz.
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.
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.
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.
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
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
)
Konum bu kadardı arkadaşlar, başka bir konumda görüşmek üzere sağlıcakla..
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)
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)
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)
Kod:
self.browser.get("https://www.instagram.com/accounts/login/")
Kod:
self.browser.implicitly_wait(15)
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")
![ruIHg1.jpg](https://resmim.net/f/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](https://resmim.net/f/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)
Ş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)
Kod:
self.browser.get(f"https://www.instagram.com/{self.user_name}")
Kod:
followersLink = self.browser.find_element_by_xpath(
"//*[@id='react-root']/section/main/div/header/section/ul/li[2]/a").click()
![xi1H2t.jpg](https://resmim.net/f/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)
Kod:
dialog = self.browser.find_element_by_css_selector("div[role=dialog] ul")
Ardından
Kod:
followersCount = len(dialog.find_elements_by_css_selector("li"))
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
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)
Ş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.")
Ş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.")
Ş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.")
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](https://resmim.net/f/f4XPQV.png)
Konum bu kadardı arkadaşlar, başka bir konumda görüşmek üzere sağlıcakla..
Son düzenleme: