• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Sanal web browser – HtmlUnit

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar
  • Date 22 Ağustos 2011

HtmlUnit java programları için kullanılan headless ( gövdesiz, sanal ) bir web browser. Ne demek gövdesiz?, ortada bir görsel arayüz yok demek, yani tüm browser fonksiyonlarını java kodları ile yapabiliyor olmak demek!..

Örneğin :

  • Elma sitesine git
  • Benim yerime formu doldur
  • Giriş yap
  • Veri çek, javascript çalıştır, link aç
  • Cookie’ leri gör,ekle

kısacası HtmlUnit ile bir web browser ile yapabileceğimiz hemen hemen herşeyi yapabiliriz. Ayrıca arzu ediyorsak sayfalarımızı birim testine (unit test) ‘de tabi de tutabiliriz. İstiyorsak bir browser’ın imitasyonu (taklitçisi) olarak da kullanabiliriz. (ie, firefox) .

Yükleme ;

Bir maven projesi oluşturduğunuzu varsayarak,

<dependencies> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.9</version> </dependency> </dependencies>

yukarıdaki bağımlılıkları pom.xml dosyanıza ekleyerek, ve projenizi derleyerek, HtmlUnit in bağımlı olduğu jar kütüphanelerini projemize eklemiş oluyoruz.. Kullanım örnekleri ve Açıklamalar ;

public void sayfaCek(){
WebClient istemci= new WebClient();
HtmlPage sayfa= istemci.getPage("http://www.bir-site.com/");
}

WebClient nesnesi, HtmlUnit’ in başlangıç noktasını oluşturuyor ve sanal browser’ ımızı temsil ediyor. Eğer istiyorsak sanal browser’ ımızı firefox yada ie ‘ nin taklitçisi olarak kullanabiliriz.

Herhangi bir web sayfasını açmak için ise getPage metodundan faydalanıyoruz, burada dönen değer tabii ki bir HtmlPage nesnesi. HtmlUnit aslında iki temel fonksiyon için kullanılıyor. Scraping ( sayfadan veri kazımak ) ve Unit test ( birim testi).

HtmlPage sayfa= istemci.getPage("http://www.bir-site.com/");
String yazi= sayfa.asText();
String xml = sayfa.asXml();

Sayfa kaynağının tümüne erişmek için, asText ve asXml metodlarını kullanabiliriz, bunlardan asText metodu, html tag’ leri arasındaki yazıları listelemektedir, asXml ise tüm sayfayı Html tag’ leri ile birlikte listelemektedir.

WebClient istemci = new WebClient();
HtmlPage sayfa = istemci.getPage("http://www.bir-site.com/");
HtmlImage resim = (HtmlImage)sayfa.getHtmlElementById("logo");
System.out.println(resim.getAttribute("src"));

HtmlUnit, sayfa elemanlarına erişmek için iki türlü erişim imkanı sunuyor bunlardan ilki Html DOM, ikincisi ise XPATH , işte buradaki getHtmlElementById ve getAttribute, aslında Html DOM özelliğinden faydalanıyor. getHtmlElementById metoduyla dönen nesne bir HtmlElement nesnesi, bu nesne tüm Html elemanlarının atası konumunda. Bu sebep ile getHtmlElementById metodu ile dönen nesnenin türü ne ise, o sınıfa down-casting (aşağı uyarlama) edilmeli. getAttribute metodu herhangi bir Html elemanının özelliğini döndürmekte, ( ör : <a href=”www.kodedu.com” >kodedu.com</a>  , href Html Anchor nesnesinin bir özelliğidir.)

WebClient istemci = new WebClient();
HtmlPage sayfa= istemci.getPage("http://www.bir-site.com/");
HtmlAnchor link= sayfa.getAnchorByText(">> İndir <<");
sayfa= link.click();

getAnchorByText metodu, HtmlAnchor yani bir link nesnesi  döndürüyor, click() metodu ise söz konusu linke tıklamamızı sağlıyor. HtmlUnit ile, HtmlPage nesnesine ulaşmanın iki türlü yolu mevcut. İlki getPage metodu ile ,ikincisi ise tıklanabilir bir  nesnesinin click metodu aracılığı ile ( HtmlButton, Html Anchor.. )

public void onayFormu() throws Exception
{
final WebClient istemci= new WebClient();
final HtmlPage sayfa= istemci.getPage("http://www.bir-site.com");
final HtmlForm form = sayfa.getFormByName("form-adı");
final HtmlSubmitInput buton= form.getInputByName("buton-adı");
final HtmlTextInput kullaniciAdi= form.getInputByName("kullanıcı-adı-input");
kullaniciAdi.setValueAttribute("admin");
final HtmlPasswordInput sifre= form.getInputByName("şifre-input");
sifre.setValueAttribute("adminadmin");
HtmlCheckBoxInput tik =form.getInputByName("beni-hatırla");
tik.setChecked(true);
final HtmlPage sayfa2= buton.click();
System.out.println(sayfa2.asXml+"n"+sayfa2.asText);
istemci.closeAllWindows();
}

getFormByName metodu ile ilgili sayfanın form nesnesini döndürmekteyiz. getInputByName fonksiyonu ile de buton, textfield, checkbox gibi bir Html formuna ait nesnelere erişebilmekteyiz. HtmlUnit ile veri çekebildiğimiz gibi elbette, form nesnelerine veri girişi de yapabiliriz. Örneğin burada setValueAttribute fonksiyonu ile yazı ve şifre alanı bilgilerini doldurmaktayız. Beni hatırla kutusunu da seçili hale getiriyoruz. Ardından buton nesnemizin click olay yordamıyla yeni bir page nesnesi elde etmiş oluyoruz.

final HtmlElement eleman =
    (HtmlElement)sayfa2.getByXPath("//*[contains(@class,'tablom')]").get(0);
final HtmlTable tablo = (HtmlTable)eleman;
for (final HtmlTableRow satir : tablo.getRows()) {
System.out.println("Satır bulundu..");
for (final HtmlTableCell hucre : satir.getCells())
System.out.println("Hücre bulundu : " + hucre.asText() );
}

XPath, kullanılış amacı  XML ve HTML eleman ( element ) ve özelliklerine ( attribute ) kolay bir şekilde erişmek için oluşturulmuş bir ifade dili.. Bu örneğimizde class özelliği tablom olan ( <table class=”tablom” > ……</table> ) bir Html tablo nesnesine erişiyoruz ve mevcut  döngülerle hücreler arasında bulunan tüm text içerikleri ekrana bastırıyoruz. Şimdilik bu kadar..

Alternatif olarak : Php için Curl, Ruby ve Perl için Mechanize programları incelenebilir.

  • Share:
author avatar
Kodedu

Previous post

Java ile harici sistem kodu || programı çalıştırma
22 Ağustos 2011

Next post

Arm7 Nxp 2104 işlemci ile basit bir Uygulama
11 Ekim 2011

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    5 Comments

  1. Burak
    23 Ağustos 2011
    Cevapla

    Tebrikler.. Elinize sağlık..

  2. Miraç
    23 Ağustos 2011
    Cevapla

    Tamda çok lazımken geldi =) Teşekküler.

  3. taha
    24 Ağustos 2011
    Cevapla

    Bilgi için teşekkür ederim

  4. eminsahin
    29 Ağustos 2011
    Cevapla

    Çok faydalı oldu teşekkürler

  5. Aycup ®
    7 Kasım 2018
    Cevapla

    Bilgi için teşekkür ederiz.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Webiner : Java 8 | Project Lambda
07Ara2012
Java EE 8 için yeni plan yolda!
13Eki2016
Swagger Nedir? Neden kullanılır?
10Eki2018
Upucuz ARM Geliştirme Kiti – Kinetis KL25Z
01Eyl2012

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.