C# (c sharp)

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

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.

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.

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.

mertinko

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

View Comments

  • 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.

Recent Posts

Makerworld Koleksiyon İndirici | Download Your MakerWorld Collections in One Click

MakerWorld Koleksiyon İndirici MakerWorld üzerinde koleksiyonunuza eklediğiniz modelleri tek tek indirmek zaman alıcı ve zahmetli…

3 ay ago

Elektronik Raf Etiketi (ESL) Nedir? Fiyatları, Avantajları ve Mağazalar İçin Dijital Dönüşüm Rehberi

Elektronik Raf Etiketi (ESL) Nedir? Fiyatları, Avantajları ve Mağazalar İçin Dijital Dönüşüm Rehberi Perakende sektörü…

3 ay ago

Gigabyte G6 KF / MF 2024 Boot Sorunu Çözümü – No OS Will Boot Fix Rehberi

Gigabyte G6 Boot Sorunu Çözümü (KF ve MF 2024) – No OS Will Boot Fix…

4 ay ago

Microsoft Office 2016, 2019 ve 2021 KMS Aktivasyonu Nasıl Kaldırılır? [Detaylı Rehber]

Microsoft Office 2016, 2019 ve 2021 KMS Aktivasyonu Nasıl Kaldırılır? [Detaylı Rehber] Office KMS kaldırma,…

1 yıl ago

WooCommerce Kategori Menü Eklentisi – Menü Yönetimini Akıllandıran WordPress Eklentisi

Merhaba!Bu yazıda WooCommerce Kategori Menü Eklentisi anlatıyor olacağım. WooCommerce mağazalarında menü yönetimini kolaylaştıran, akıllı hale…

1 yıl ago

‘Microsoft.ACE.OLEDB.12.0’ Sağlayıcısı Yerel Makineye Kayıtlı Değil Hatası ve Çözümü (2025)

microsoft ace oledb 12.0 hatası,oledb 12.0 provider not registered,microsoft access database engine indir,accessdatabaseengine.exe indir,oledb provider…

1 yıl ago