232-301-2136
kursat.arslan@deu.edu.tr
Buca Eğitim Fakültesi
Sosyal Bina, 2.Kat 207, İzmir
  • Ana Sayfa
  • Özgeçmiş
  • Hakkımda
  • Blog
  • İletişim
  • Ders Kayit
  • Giriş
    E-mail Adresi:
    Şifre:
Girdim ilim meclisine, eyledim kıldım talep,Dediler ilim geride, illa edep illa edep Yunus Emre
Son blog yazısı (3.11.2023) Bir şiir: Gitse
Dr. Kürşat ArslanDokuz Eylül Üniversitesi, Buca Eğitim Fakültesinde, Bilgisayar ve Öğretim Teknolojileri bölümünde Doçent.

c# (.net)'de webbrowser nesnesi kullanımı ve web sayfasına veri gönderme ve butona tıklama

Yayınlanma: 6 Ekim, 2020 Güncellenme: 9 Ekim, 2020

!Bu makale yeterli düzeyde detay içermediğinden yeni başlayanlar için uygun olmayabilir.

Tanım

c#'da bir web sayfanı forma yüklemek yani chrome ya da explorer benzeri bir tarayıcı oluşturmak için webbrowser nesnesini kullanmamız gerekir. Bu nesne aracılığıyla, kolaylıkla bir web sayfasını yükleyebilir ve sayfalar arasında genizebilirsiniz. Ancak projelerde genellikle ihtiyaç duyulan nokta, yüklenen web sayfasına müdahale etmek ya da arka planda bir web sayfasını çalıştırarak sonuçları kullanıcıya iletmektir. Örneğin, google'dan arama yapmak istediğinizde, kullanıcıdan aranacak kelimeyi alıp sonuçları istediğiniz gibi manüpüle edip kullanıcıya istediğiniz şekilde gösterebilirsiniz.

Örnek Kullanım

Öncelikle ben aşağıdaki gibi bir fonksiyon yazdım. Bu fonksiyon, gelen adres bilgisini kontrol etmek için kullandım. Daha sonra buton'a tıkladığımda, textBox1'de yazılan adres değeri webbrowser'a yüklenecek.

private void gezin(String adres)
{
    if (String.IsNullOrEmpty(adres)) return;
    if (!adres.StartsWith("http://") &&
        !adres.StartsWith("https://"))
    {
        adres = "http://" + adres;
    }
    try
    {
        webBrowser1.Navigate(new Uri(adres));
    }
    catch (System.UriFormatException)
    {
        return;
    }
}


private void button1_Click(object sender, EventArgs e)
{
    //webBrowser1.ScriptErrorsSuppressed = true;
    gezin(textBox1.Text);
}

Yukarıdaki fonksiyonu kullanmadan doğrudan, aşağıdaki satırı da yazabilirsiniz. Buda işinizi görür.

webBrowser1.Navigate(new Uri(adres));

daha sonra web sayfası yükleme işi tamamlandığında, form üzerinde bir butona tıklayarak sayfa içerisinde yer alan istediğiniz input öğresinin içerisine istediğiniz yazıyı yazabilirsiniz. Aşağıdaki kod, yüklenen web sayfasında className'i form-control olan input'a textbox2'de yazan metni eklemek için kullanılabilir. Burada web sayfasında birden fazla input olduğu için ve elimde bir ID olmadığı için, classname üzerinden yaptım.

private void button2_Click(object sender, EventArgs e)
{
    var links = webBrowser1.Document.GetElementsByTagName("input");
    foreach (HtmlElement link in links)
    {
        //MessageBox.Show("test");

        if (link.GetAttribute("className") == "form-control")
            link.InnerText = textBox2.Text;

    }
}

benzer şekilde form içerisinde başka bir butona tıklayarak, web sayfasında bulunan bir butonun tıklama olayıda tetiklenebilir. Bunun için aşağıdaki gibi bir kod kullanılabilir.

private void button3_Click(object sender, EventArgs e)
{
    var butons = webBrowser1.Document.GetElementsByTagName("button");
    foreach (HtmlElement link1 in butons)
        link1.InvokeMember("click");
}

Örnek ekran görüntüsü

Yukarıdaki kodları kullanarak aşağıdaki gibi bir ekran elde edebilirsiniz.

Umarım faydalı olmuştur. Selamlar.

Bu gibi yazıların çoğalması için site içerisinde yer alan reklama tıklayın. Teşekkürler :)

Bir Yorum Bırak

    Bu yazıya şimdiye dek yapıldı.
  • Avatar
    Yusuf Yaman 2/7/2022 18:54:28
    Şöyle ki hocam webbrowser kullanarak Google'da arama yaptıracağım. 
    ​​​​​​
    { webbrowser1.Navigavte("https://www.google.com/search?q=" + Textbox1.text);
    }

    Daha sonra arama sonucu parsel parsel textbox2'ye yansıtacağım
    {
        Textbox2.Text = WebBrowser1.DocumentText;
    }
     
    Çıkan parseller içerisinde arama yaptığım Google sonuçlarının URL'leri de var ama ben bu URL'leri parseller içerisinde bulup listboxa yansıtmak istiyorum. İşte bunu nasıl yapabilirim? 
    Regex kullanımı çok karışık. HTML agility pack içerisinde for döngüsü kullanmam gerekiyor ama nasıl kodlayacagimi bilmiyorum. Yardımcı olursanız sevinirim.
  • Avatar
    Kürşat Arslan 10 Şubat, 2022 11:39:57

    Yusuf Merhaba,

    GetElementsByTagName("h3")

    yukarıda yazdığım kod ile Google arama sonuçlarından sayfa kaynağı içerisinde h3 ün altında yazan metni veya linki almak mümkün. Umarım bu soruna cevap olur sanırım. 

  • Avatar
    Yusuf Yaman 2/6/2022 19:25:33
    Hocam hayırlı geceler diliyorum. HTML agility pack ve regex kullanımı hakkında bilginiz var mı acaba? Bir kaç sorum olacaktı size
  • Avatar
    Kürşat Arslan 7 Şubat, 2022 09:28:45

    Merhaba Yusuf, ne yazık ki bilgim sorularına cevap verebilecek düzeyde değil, oldukça yüzeysel. 

Bu site Galloglu.com üzerinden, öğrencilerim ve diğer ilgili herkes için online içerik geliştirme amaçlı tasarlanmıştır. Özellikle SPSS ve ARDUINO blog yazıları, sizin bu konuları örnekler üzerinden daha iyi anlamanız için basitleştirilerek anlatılmıştır. Sitede yer alan içerikler, düzenli olarak kontrol edilerek hatalardan kaçınılmaya çalışılmaktadır, diğer taraftan bilgilerin tümüyle doğruluğu garanti edilemez.
Designed and Created by Kursat Arslan. Copyrigt © 2016-2024
Bu site Kürşat Arslan tarafından tasarlanmış ve geliştirilmiştir.
Bütün hakları saklıdır.Sitede yer alan bütün içerikler galloglu.com'a aittir.