Threading, Async Yada Herneyse
-
Merhaba arkadaşlar.
html parsing işlemi yapıyorum fakat takıldığım nokta şu;
Butona tıklandıktan sonra webBrowser.Navigate fonksiyonu ile bir sayfaya webbrowseri yönlendirim. sonrasında sayfa tamamen load olduktan sonra gelen html üzerinde parsing yapmak istiyorum.
fakat butona tıklandıktan sonra sayfanın load olmasını program beklemiyor. hemen alttaki parsing satırlarını işlemeye başlıyor.
bu sorunumu nasıl çözebilirim. örnek birkaç satır kod olursa sevinirim. teşekkürler.
-
-
click eventine yönlendirme yapıyorum. sonra browserin complated eventine parsing kodlarını yazıyorum.
breakpoint bırakıp baktığımda hala sayfa tam yüklenmeden parsing işlemine geçiyor.
-
Fonksiyon asenkron olabilir diye eklemişti bir abi.
-
mealen?
-
Şimdi yorumlayıcı olarak çalışıyor bu programlama dili hocam daha önce webBrowser.Navigate kullanmadım ama düşünüyorum butona basınca load beklemiyorsa buton eventine verdin ya işlemi sen butona basınca buton içinde ki evente gelene kadar yapabildiği yüklemeyi yapıyor ve sonra oraya atlıyor olabilir.
webBrowser.Navigate Asenkron/senkron olabilir
kontrol değişkeni de kaba bir çözüm olabilir yükleme işlemine göre bir kontrol değişkeni kurarsın , yükleme tamamlanınca yani bu değişken 1 ya da true olunca , fonksiyonu tetikletirsin ve parsing işlemi başlatırsın.
Haa şimdi aklıma geldi , neden safe-thread kullanmıyorsun hocam ?
Bir anahtar ver , loading bitene kadar kimse elleyemesin , loading bittikten sonra da gerekli işleme verirsin anahtarı
Roark tarafından 19/Nis/19 01:22 tarihinde düzenlenmiştir -
Bu tarz işlemlerde Selenium kütüphanesi kullanabilirsin. S.kimsonik IE browseri yerine daha performanslı ve js hatalarını minimuma indiren chrome,firefox etc. kullabilirsin.
Sorduğun soruya gelirsek;
Yazdığnı kodun DocumentCompleted eventinde yazdığında emin misin?
Veya şöyle bir senaryo olabilir, Sayfa load olur, fakat sayfadaki bazı componentler, div,span etc. js ile async olarak çağrılmıştır. Sayfa load olmasına rağmen div içeriği vs. yüklenmemiş olabilir.
Bu tarz durumlarda DOM'u dinleyip Ajax requestinin bittiğini anlaman gerekiyor.
Alttaki kaynaklara bakarak bilgi sahibi olabilirsin;
http://www.dotnetfunda.com/forums/show/5134/ajax-page-load-using-web-browser-control
https://automationrhapsody.com/efficient-waiting-for-ajax-call-data-loading-with-selenium-webdriver/
https://stackoverflow.com/questions/6201425/wait-for-an-ajax-call-to-complete-with-selenium-2-webdriver -
teşekkürler işe yaradı
-
bu Konu ne güzel oldu böyle. ^^. SvD.
-
saybirs bunu yazdı
Bu tarz işlemlerde Selenium kütüphanesi kullanabilirsin. S.kimsonik IE browseri yerine daha performanslı ve js hatalarını minimuma indiren chrome,firefox etc. kullabilirsin.
Sorduğun soruya gelirsek;
Yazdığnı kodun DocumentCompleted eventinde yazdığında emin misin?
Veya şöyle bir senaryo olabilir, Sayfa load olur, fakat sayfadaki bazı componentler, div,span etc. js ile async olarak çağrılmıştır. Sayfa load olmasına rağmen div içeriği vs. yüklenmemiş olabilir.
Bu tarz durumlarda DOM'u dinleyip Ajax requestinin bittiğini anlaman gerekiyor.
Alttaki kaynaklara bakarak bilgi sahibi olabilirsin;
http://www.dotnetfunda.com/forums/show/5134/ajax-page-load-using-web-browser-control
https://automationrhapsody.com/efficient-waiting-for-ajax-call-data-loading-with-selenium-webdriver/
https://stackoverflow.com/questions/6201425/wait-for-an-ajax-call-to-complete-with-selenium-2-webdriverlayyyynnnnnnn!!!
ben bu Selenium'la daha önce niye tanışmadım.
Parmaklarımı ısırıyorum şuan...... :)))