Merhaba Bir web sitesinde illere göre kayıtlı veriler var. iştediğim şey şu .. yaptığım uygulamada ilk anda bir embedded web browser içerinde sayfa açılıyor. ben sırayla sayfadaki comboya adana, adıyaman vs yazı dönen bilgileri (html kanaynak kodu değil sadece ekranda görüneni) kopyalarak bir memoya eklemek istiyorum. Yazdığım kod bir butona tıklayınca formu post edip geri döneni copy paste yapmak üzere yazıldı. tek bir il içinde olsa 2 defa tıklayınca çalışıyor. ilk çalıştığında verileri almıyor.
daha sonra sırasıyla illeride döngüyle ekledim. ama nedense bir anda hemen zonguldaka geliyor. yokmu bunu readystate ile bitmesini beklemeyi sağlayacak dönükten sonraki değeri alacak bir yolu.
kodun bu aşamasında sorun yok. bunu yapıyor. Mrmarmanın örneği ve swissdelphicenter dan yararlanarak yapmıştım onu zaten . bize gerekn döngünün her seferinde sayfa tamamemen yüklenene kadar beklemesi şartıyla sayfa içeriğini kopyalauıp memoya atılması
Ayni sorun bende de olmustu. Ben forma asama:integer olarak private degisken tanimladim, webbrowser'in ondocument complete olayinda inc(asama); yapip asamaya gore isleme devam ettim.
READYSTATE_COMPLETE olması sadece WebBrowser.Navigate komutuyla oluyor arkadaşlar. Gelen bir Web sayfasının içeriğini doldurduktan sonra web butonuna vs. click yapıyorsanız işe yaramıyor. Bu durumda OnDocumentComplete olayına başvuracaksınız. Daha önce tanımladığınız global bir değişkene ( örneğin değişkenimiz xIslemTamam:Boolean; olsun ) şöyle yazın.
xIslemTamam := False;
while NOT xIslemTamam do Application.ProcessMessages;
Bu döngü işinizi görecektir. Ben şimdi sonsuz döngüye çanak tuttum. Örnek olsun diye kısa tuttum. Bir de xIptal gibi bir global değişken tutun ve bunu da While kriterine dahil edin. herhangi bir yerde iptal butonuna vs. basılırsa xIptal değerini True yapar kullanıcının döngüden çıkabilmesini sağlarsınız.
Valla üstad konunun girişindede senin eski örneklerinden faydalanmıştım. Sonra swiss sitesine geçmiştim. verdiğin trick çok güzel görünüyor. bir kaç gündür bakamamıştım.
Deneyeceğim.
Ama her halükarda çok teşekkür ederim. senin konular ve cevaplar çok doyurucu oluyor...
burdakinde kafam karıştı yardımcı olabilirseniz sevinirim.
procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
xIslemTamam := ( Pos('blank', URL) <= 0 ) ;
end;
1) burada sayafanın complate olduğunu anlamak için, websayfası tamamen yüklendiğinde almış olduğumuz sabit bir değeri, pos fonksiyonu ile aratıp var olup olmadığını kontrol ediyoruz. eğer varsa xişlemTamam değerine bolean tipte true yada false değeri atamamız gerekmezmi. ( buradakinde xişlemTamama dönen değer integer). şöylemi yapmalıyız
procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
Ara:string;
begin
Ara := ( Pos('blank', URL) ) ;
if Ara >0 then xIslemTamam:=true;
end;
kulanırkende
while NOT xIslemTamam do Application.ProcessMessages;
2)Her web sayfasında sabit değer farklıysa nasıl yaparız, xislemTamam daki true değeri, bize hangi sayfanın complate olduğunu gösterir.
Eşitliğin bütünü bir değer olarak alınırsa, (yaptığım da buydu) boolean tipinde bir sonuç dönmüş olur. Yani bu eşitlik oluşuyorsa "True" veya oluşmuyorsa "False" diye karşılaştırmak bende alışagelmiştir.
Şimdi yapılması gereken, bir MEMO koyun. Bu memo'ya NAVIGATE edilen sitedeki her adımda gelen URL değerini satır satır ekleyin. Bu sayede siteden dönen URL içeriğini referans alarak, navigate işleminin tamam olduğunda nasıl bir sonuç bekleyeceğinizi gözlemleyin. Sonra bu gözleminizi kendi tetikleme mekanizmanızı kurmak için kullanacaksınız.
Konu dışı sayılsa da güzel bir örnektir, özellikle FACEBOOK sayfalarında bu duruma sıkça karşılaşıyorum. En son FaceBook sayfalarındaki profil veri içeriğini, MS Outlook'a atmak için bir proje hazırladım ve şunu gördüm. Bankacılık işlemleri, cep telofonu obone işlemleri vb. uygulamalar da hazırlamıştım, Facebook sayfalarının dinamik yapısı hepsinin üstüne bir zorluğa sahip.
Çoğu sitede gözlemlediğim sonuç, explorer için navigate işlemi tamamlandığı halde, içsel veri trafiği henüz tamama ermiyor. Bir süre daha beklemek gerekiyor. Bu bekleme web üzerindeki trafiğe göre değişkenlik gösterir. Bu nedenle şu kadar saniye bekleyim derseniz her zaman bütüne ulaşılamaz. Veri takip ederek istenen kısmın geldiğine kanaat getirmek gerekiyor.
teşekkürler hocam, sanırım bu hatalardan birini bende yaşıyorum. Vermiş olduğunuz kod örneği ile facebook giriş sayfasında ufak bir deneme yaptım. ( hala çözemediğim ve çözmeye çalıştığım güzel de bir hata aldım ) Facebook denemeleri yapan arkadaşlara ufak bir not facebooktaki giriş buttonunun id si sayfayı her yeniledinizde değişir. Bende buna istaneden hocamın vermiş olduğu kod ile bu sorunu aşarak bir deneme yaptım. sıkıntı şu ki bağlan dediğimde bağlandı profilim göründü ,ama hemen ardından internet explorer bu sayfayı görünteleyemiyor işlem iptal edildi diyerek boş bir sayfaya gonderdi. delphi7 ile yaptığım örneği ekli dosyada gönderiyorum. içerisinde aldığım hatanın printscreen resmide var.Sebebini bilen yardımcı olursa sevinirim.( sanırım hocamın baştaki yazısında dediği gibi complate işleminin sadece navigate tarafında olması )