1. Anasayfa
  2. C# (c sharp)

C# SELENİUM İLE CANLI BORSA VERİ ÇEKME

C# SELENİUM İLE CANLI BORSA VERİ ÇEKME
2

Merhaba, bu yazımızda tarayıcının web sitesine giderek tablodan istediğimiz verileri döngü ile çekmesini sağlayacağız bu sayede tek tık ile veri güncelleme ya da aklınıza başka ne geliyorsa yapabilirsiniz. Ben örnek olarak borsa verilerini çekmek istedim.

Ayrıca sayfa açılırken programın kitlenmemesi ve sayfanın tamamen yüklenmesini beklerken işlem yapılmamasının önüne geçmek için Thread özelliğini kullandım.

using System.Threading;
Kütüphanesini projemize çağırdıktan sonra;

Aşağıdaki kodu ekliyoruz. Bu sayede birden fazla Thread kullanımına olan sağlıyor.

public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}

Tasarım olarak böyle bir görüntü tercih ettim. Listbox1’e adı, listbox2’ye alış fiyatı ve listbox3’e satış fiyatını çekeceğim.

Jivo Chat Reklam

http://bigpara.hurriyet.com.tr/borsa/canli-borsa/ adresinden verileri çekmeye karar verdim. Bu sebeple öncelikle adrese giderek neyi hangi yol ile çekeceğime karar veriyorum.

ChroPath uygulaması ile çekmek istediğim verilerinin XPath yolunu kopyalıyorum. Tablo oldukları içinde genelde tek değişiklikle bir alt satıra geçilebiliyor. Bu örnekte ilk satır için;
İsmin xPath’ı:
/html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[1]/li[1]/a[2]
Alış Fiyatının xPath’ı: /html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[1]/li[3]
Satış Fiyatının xPath’ı ise: /html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[1]/li[4] olarak gözükmektedir.

Bir alt satıra baktığımda ise sadece ul‘nin 1 yerine 2 olduğu gözükmektedir. Bu sebeple hepsini for döngüsüne alarak ul’yi otomatik arttırabilir ve tek seferde çekebilirim.

Thread Cek; 

İsminde bir thread nesnesi oluşturuyorum. Bu thread nesnesini başlatmak için içinde çağıracağım bir metod oluşturmalıyım. Bu sebeple ihtiyacım olan kodları bu metodun içine yazıyorum.

  private void veriCek()
        {
            ChromeDriverService servis = ChromeDriverService.CreateDefaultService();//chrome servisinin varsayılan ayarları ile servis nesnesini canlandırdık
            servis.HideCommandPromptWindow = true; //konsolu göster/gizle varsayılan ayarını true yaptık
            IWebDriver tarayici = new ChromeDriver(servis); //tarayıcı isminde chrome tarayıcısı oluşturduk ve tarayıcıya yapılan ayarları atadık.
            //Buraya kadar olan işlemler proje çalıştığında otomatik olarak çıkan ChromeDriver konsol ekranını gizlemeye yarıyor.

            tarayici.Navigate().GoToUrl("https://bigpara.hurriyet.com.tr/borsa/canli-borsa/"); //olusturulan tarayıcı tırnak içerisindeki adrese yönlendirdik
            Thread.Sleep(3000); //metodu 3 saniyeliğine beklemeye aldık bu sayede sayfa tamamen yüklenecek
            int satirSayisi = tarayici.FindElements(By.XPath("//div[@id='sortable']/ul")).Count(); //tablodaki satır sayısını bulduk

            for (int i = 1; i < satirSayisi; i++)
            {
                IWebElement adi = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[" + i + "]/li[1]/a[2]")); //İsmi buldu ve adi nesnesine atadı
                listBox1.Items.Add(adi.Text);
                IWebElement alis = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[" + i + "]/li[3]")); //Alış fiyatını buldu ve alis nesnesine atadı
                listBox2.Items.Add(alis.Text);
                IWebElement satis = tarayici.FindElement(By.XPath("/html[1]/body[1]/div[7]/div[4]/div[1]/div[1]/div[1]/div[3]/div[5]/div[1]/div[1]/div[2]/ul[" + i + "]/li[4]")); //Satış Fiyatını buldu ve satis nesnesine atadı
                listBox3.Items.Add(satis.Text);
            }
        }

Gördüğünüz gibi VeriCek isminde bir metod oluşturduk ve bu metodu ihtiyacımız olan kodlar ile doldurduk. Kodların yanlarında açıklamaları mevcuttur.

Click here to preview your posts with PRO themes ››

Daha sonradan bu metodun Değerleri Çek butonunun click eventine aşağıdaki kodları yazıyoruz.

private void button2_Click(object sender, EventArgs e)
        {
            Cek = new Thread(veriCek);
            Cek.Start();
        }

Artık uygulamamız hazır çalıştıralım bakalım.

Görüldüğü gibi projemiz isteğimiz verileri internet sitesinden çekti. Bu uygulama örnek alınarak istediğiniz verileri istediğiniz siteden çektirerek işlemlerinizi hızlandırabilirsiniz.

İyi çalışmalar.

Bu Yazıya Tepkiniz Ne Oldu?
  • 1
    be_endim
    Beğendim
  • 1
    alk_l_yorum
    Alkışlıyorum
  • 0
    e_lendim
    Eğlendim
  • 0
    d_nceliyim
    Düşünceliyim
  • 0
    _rendim
    İğrendim
  • 0
    _z_ld_m
    Üzüldüm
  • 0
    _ok_k_zd_m
    Çok Kızdım

Yazılım hakkında bildiklerini anlatan sıradan biri.

Yazarın Profili
Paylaş
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (2)

  1. Hocam merhaba. Bu uygulamanın çektiği veriyi karşılaştırıp anlık olarak yükeliş eğimi gösteren hisseyi farklı bir ekrana yansıtma versiyonu nasıl yapılabilir peki ? veriyi anlık olarak sürekli güncelleyecek ve son 5 dakika içindeki hareketlerine göre tüm hisseler arasında yükselişe gidenleri yansıtacak bi uygulama mümkün mü bu c# ile

    • Eğer gerekli API bağlantısını sağlayabilirseniz dediğiniz yazılımı yapabilirsiniz. Anlık olarak API hizmeti veren bir firma ya da kendiniz bu verileri temin edebilirseniz istediğiniz yönelik bir yazılımı C# ile yapabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir