5 Mart 2016 Cumartesi

c# webbrowser

C# i Webbrowser.
(Alternatif olarak; HttpWebRequest ya da Html Agility Pack kullanabilirsiniz.)
Sık sık C# kullanmadığım için kullanmam gerektiğinde, araştırmaya harcadığım süreyi azaltmak adına, en çok lazım olan şeyleri buraya not almak istedim. Ayrıca C# ile bot yazmak isterseniz de buradaki bilgiler oldukça işinize yarayabilir.
1 – Web Sayfasındaki Bir Nesneyi Seçmek
Burada nesneId yerine seçmek istediğiniz nesnenin Id’sini, webBrowser1 yerine de uygulamanızdaki webBrowser’in adını yazmanız gerekiyor.
Seçtiğiniz nesnenin içeriğini html olarak almak isterseniz :
Seçtiğiniz nesnenin içeriğini yazı olarak almak isterseniz, örneğin seçtiğiniz nesnenin html kodu <h1>Merhaba</h1><span>Ahmet</span> şeklindeyken siz bunu Merhaba Ahmet şeklinde alabilirsiniz :
 2 – Web Sayfasındaki Birden Fazla Nesneyi Seçmek
Bu işlem için ufak bir döngü kullanmamız gerekiyor.
Seçmek istediğimiz nesnenin etiketini kullanarak kuracağımız bu döngü de çeşitli filtreler uygulayarak nokta atışı yapmak mümkün.
En basit şekli ile aynı etikete sahip nesneleri çekmek istersek :
Burada birden fazla nesne seçmiş olduğumuz için HtmlElement yerine HtmlElementCollection kullandık.
Döngümüze ufak bir filtre uygulayıp sadece belirli bir sınıfa sahip olanları da çekebiliriz : (Sınıftan kastım Html de ki Class)
Normalde GetAttribute methodunu kullanırken className gibi istisnalar hariç direk html deki özellik adını kullanıyoruz;
  • Adı yani Name için -> GetAttribute(“name”);
  • Linki yani Href için -> GetAttribute(“href”);
  • Kaynağı yani Source için -> GetAttribute(“src”);
  • Çeşidi yani Type için -> GetAttribute(“type”);
Gibi.
Hazır GetAttribute() methodundan bahsetmişken kısaca SetAttribute() methoduna da değinmek istiyorum.
SetAttribute() methodu da nesneye ait bir özelliği değiştirmemize olanak sağlıyor.
Kullanımı ise nesne.SetAttribute("ozellik", "yeniDeger");  şeklinde. GetAttribute() de ki gibi özellik adını yazdıktan sonra, yeni değerini yazmamız yeterli oluyor :
3 – Seçilen Nesnenin İçeriğini Değiştirmek
Nesneleri seçtikten sonra seçmekle kalmayıp, nesnenin içeriğini değiştirmemiz mümkün :
Burada nesneyi bir textbox yani türü text olan bir input olarak düşünürsek, içindeki yazı deneme olarak değişecektir.
4 – İşlem Yapmadan Önce Sayfanın Yüklenmesini Beklemek
Genel sıkça karşılaştığım problemlerden birisi de sayfa yüklenmeden botun, uygulamanın harekete geçmesi.
Burada ortaya şöyle bir sorun çıkıyor; uygulama sayfa yüklenmeden işlem yapmaya çalıştığı için içeriğini okuyacağı ya da içeriğini değiştireceği ya da başka bir şey yapacağı nesneyi bulamıyor ve program hataya düşüyor.
Bunu engellemek için kodumuzdan önce ekleyeceğimiz ufak bir while döngüsü yeterli oluyor.
Burada webBrowser1 yerine formunuzdaki tarayıcının adını yazmanız gerekiyor. Döngünün içine eklediğimizApplication.DoEvents() sayfa yüklenirken uygulamamızın kitlenmesini engelliyor.
5 – Eventleri Tetiklemek
Web sayfalarının gittikçe daha etkileşimli hale gelmesi, uygulamamızın etkileşimini de arttırmamızı gerektiriyor.
Bu noktada tıklama(click), mouse’u çekme(mouseout), seçimi değiştirme(onchange) gibi event’ları tetiklemek için InvokeMember() methodunu kullanmamız gerekiyor.
Kullanımı ise oldukça basit, InvokeMember() içine tetiklemek istediğimiz event’ın adını yazıyoruz. Eventların adını nereden öğreneceğiz derseniz, aslında zaten biliyoruz :)
Yani javascript de kullandığımız event’ın adını yazmamız yeterli oluyor :
şeklinde bir kodumuz olsun, buradaki onchange event’ını tetiklemek için tek yapmamız gereken nesneyi seçtiken sonra  InvokeMember("onchange")  eklemek :
Click (tıklama) eventını bu şekilde de kullanabiliyoruz, diğer eventlarda da aynısı var mıdır bilmiyorum. Tıklamada onclick ya da click yazıyoruz :
 6 – Select Seçili Değeri Değiştirmek
Select de seçili değeri değiştirmenin iki yolu var.
Birinci yol direk value(değerini) değiştirmek, ikinci yol ise direk seçili değeri değiştirmek.
Direk value değiştirmek :
Direk value değiştirmek kestirme bir çözüm fakat her zaman işe yaramayabiliyor. Böyle durumlarda direk seçili değeri değiştirebiliyoruz :

Şimdilik aklıma gelenler bunlar. Merak ettiğiniz başka bir şey olursa ya da anlattığım şeylerde bir yanlışlık fark ederseniz, 30 saniyenizi ayırıp yorum yazmanız yeterli :)