Selenium İle Instagram Takip Botu Yapımı (C#)

Merhaba arkadaşlar, bu örnekte basit bir instagram takip botu yapalım. Kullanıcı girişi yaptıktan sonra seçtiğim excel dosyasındaki tüm kullanıcı adlarını takip etmesini sağlayalım.

Öncelikle daha önceki derslerden öğrendiğimiz yöntemlerle selenium’u projemize dahil edelim.

Ayrı bir div içinde scroll olayını yapamadığımdan malesef veriyi dışarıdan alacağız. Yapabilen arkadaşlar varsa yorum kısmında js kodunu paylaşırsa güncelleme yaparım.

Dışardan veri almak için öncelikle aşağıdaki adresteki eklentiyi kuralım.

https://chrome.google.com/webstore/detail/export-list-of-followers/hcdbfckhdcpepllecbkaaojfgipnpbpb?hl=en-US

Takip etmek istediğimiz kullanıcıya girelim ve eklenti vasıtasıyla takipçi listesini dışarıya aktaralım.

En sevdiğim sanatçılardan biri olan Monica’nın takip ettiklerini indirmeye karar verdim. Get List Of User’a basalım.

Açılan tablodan export tuşuna basalım ve listeyi excele aktaralım.

Şimdi tasarım kısmına geçelim ve bu kullanıcı adlarının hepsini listview’e basalım.

Tasarımı bu şekilde oluşturdum ilk başta verileri çekmek için projeye openFileDialog ekleyelim ve listbox’ın double click olayına aşağıdaki kodu yazalım.

   openFileDialog1.Title = "Lütfen Dosya Seçiniz";
            openFileDialog1.Filter = " (*.xlsx)|*.xlsx";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.Multiselect = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string dosya_adres = openFileDialog1.FileName; OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dosya_adres + ";Extended Properties=Excel 12.0");
                con.Open();
                string sql = "SELECT * from [UsersSheet$B1:B5000] ";
                OleDbCommand veri2 = new OleDbCommand(sql, con); OleDbDataReader dr = null;
                dr = veri2.ExecuteReader();

                while (dr.Read())
                {
                    if (dr[0] != "")
                    {
                        listBox4.Items.Add(dr[0].ToString());
                    }
                    else
                    {
                        break;
                    }
                }
                con.Close();
            }

Şimdi giriş butonuna basıldığında kutucuktaki bilgiler ile instagrama bağlanacak ve listedeki verilere ait kullanıcı sayfalarına tek tek giderek takip etmediği hesap varsa takip ettireceğiz.

Daha önceki konulardan öğrendiğimiz gibi thread işlemi ile yapacağız bunu da

Thread Baslat;
Thread BotuBaslat;
IWebDriver tarayici = new ChromeDriver(); //tarayıcı isminde 
chrome tarayıcısı oluşturduk ve tarayıcıya yapılan ayarları atadık.

Baslat dediğimiz instagrama kullanıcı bilgilerimizle giriş yapmamızı sağlayacak Botu başlat ise listboxdan verileri çekerek takip etmemizi. Ayrı ayrı yerine tek voidde de yapabilirdik ancak anlaşılır olması açısından böldüm.


        private void InstagramBaglan()
        {
            //Buraya kadar olan işlemler proje çalıştığında otomatik olarak çıkan ChromeDriver konsol ekranını gizlemeye yarıyor.
            tarayici.Navigate().GoToUrl("https://www.instagram.com/"); //olusturulan tarayıcı tırnak içerisindeki adrese yönlendirdik
            Thread.Sleep(3000);
            IWebElement kullaniciAdi = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[1]/section[1]/main[1]/article[1]/div[2]/div[1]/div[1]/form[1]/div[1]/div[1]/div[1]/label[1]/input[1]")); //açtığımız tarayıcıda xpath ile kullanıcı adı giriş kutucuğunu buldu ve element nesnesine atadı
            kullaniciAdi.SendKeys(txtKullaniciAdi.Text); //atanan nesneye Kullanıcı Adını Girdik deki metinleri gönderdi
            IWebElement sifre = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[1]/section[1]/main[1]/article[1]/div[2]/div[1]/div[1]/form[1]/div[1]/div[2]/div[1]/label[1]/input[1]")); //açtığımız tarayıcıda xpath ile Şifre giriş kutucuğunu buldu ve element nesnesine atadı
            sifre.SendKeys(txtSifre.Text); //atanan nesneye Kullanıcı Adını Girdik deki metinleri gönderdi
            IWebElement girisButonu = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[1]/section[1]/main[1]/article[1]/div[2]/div[1]/div[1]/form[1]/div[1]/div[3]")); //açtığımız tarayıcıda xpath ile giriş butonunu buldu ve element nesnesine atadı
            girisButonu.Click(); //giriş butonuna tıkladı
        }

Şimdiye kadar instagrama bağlanmada bir sorun yok hesabımızı açıp anasayfaya erişebiliyoruz. Artık listedeki verileri tek tek dönmeye geldi.

int takipEdilen = 0;
int takipEdilemeyen = 0;

Dışarıda değişkenleri tanımladım bu sayede işlem bittikten sonra bu değişkenlere göre kaç kişinin takip edildiğini kaç kişinin ise takip edilemediğini yazacağım.

  private void InstagramBotunuBaslat()
        {

            foreach (var item in listBox4.Items)
            {
                tarayici.Navigate().GoToUrl("https://www.instagram.com/" + item.ToString()); //olusturulan tarayıcı tırnak içerisindeki adrese yönlendirdik
                Thread.Sleep(1000);
               
                try
                {
                    IWebElement takipEt = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[1]/section[1]/main[1]/div[1]/header[1]/section[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/button[1]")); //açtığımız tarayıcıda xpath ile giriş butonunu buldu ve element nesnesine atadı
                    if (takipEt.Text == "Takip Et")
                    {
                        takipEt.Click();
                        takipEdilen += 1;
                    }
                }
                catch(Exception)
                {
                    takipEdilemeyen += 1;
                }
               
                Thread.Sleep(Convert.ToInt32(txtSure.Text));
            }
            MessageBox.Show("İşlem Tamamlandı!. Toplam:" + listBox4.Items.Count + " hesaptan; " + takipEdilen + " hesap takip edildi. " + takipEdilemeyen + " hesap iste daha önceden takip ediliyordu.");

        }

yukarıdaki metodu ise botu başlat click eventinde çağırıyoruz.

 private void btnBaslat_Click(object sender, EventArgs e)
        {
            BotuBaslat = new Thread(InstagramBotunuBaslat);
            BotuBaslat.Start();
           
        }

artık programımız hazır. Projemiz çalıştıktan sonra listview’e tıklayarak verilerin olduğu excel tablosunu çağırıyoruz liste çekildikten sonra ise giriş butonu ile instagrama bağlanıyoruz. Botu başlat’a bastıktan sonra ise listview’deki her kullanıcı adının olduğu adrese tarayıcı yönlendirerek takip et butonuna otomatik olarak bastırıyoruz. Butonu bulamazsa ise takip edilemeyen olarak bulursa takip edilen olarak sayaca işliyor en sonda ise bu sonuçları ekrana bastırıyoruz.

İyi çalışmalar.

Yorum bırakın