Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Ajax Sayfa Bekleme
#1
Merhabalar, 

Bir site üzerinden sorgulama yapmaya çalışıyorum. Veriyi göndermede problem yok fakat dönen değeri alırken problem yaşıyorum. 

Denediğim yöntemler

idHTTP.Post

TWebBrowser onDocumentComplete olayı

TWebBrowser onDownloadComplete olayı

 while WebBrowser1.ReadyState <> Shdocvw.READYSTATE_COMPLETE do
 begin
  Sleep(1);
  Application.ProcessMessages;
 end;


Hiç birinde maalesef başarılı olamadım.. Bunların haricinde bildiğiniz yöntem var mıdır?
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#2
Merhaba,
Sitede iç içe Frame'ler varsa DocumentComplete olayı çalışmayabiliyor (tüm Frame'ler bağımsız bir URL/URI ile çalıştığından, tamamlanmıyor). 
Site kaynak kodunu iyi inceleyin, almak istediğiniz bilgi bir Frame'in içerisinde ise, o Frame'in navigate olayını kullanarak DocumentComplete olayını bekleyin.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
(01-07-2017, Saat: 15:44)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Sitede iç içe Frame'ler varsa DocumentComplete olayı çalışmayabiliyor (tüm Frame'ler bağımsız bir URL/URI ile çalıştığından, tamamlanmıyor). 
Site kaynak kodunu iyi inceleyin, almak istediğiniz bilgi bir Frame'in içerisinde ise, o Frame'in navigate olayını kullanarak DocumentComplete olayını bekleyin.

 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol sayfadan deniyorum hocam.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#4
Kaynak kodunda frame yok, fakat benzer yapıda form var.
 <form action="/adsl/ttnet-fatura-odeme" method="post">
Amaç bu form üzerindeki verileri almaksa, Delphi için benzer bir çok örnek uygulama var. Örnek: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
(01-07-2017, Saat: 16:07)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlKaynak kodunda frame yok, fakat benzer yapıda form var.
 <form action="/adsl/ttnet-fatura-odeme" method="post">
Amaç bu form üzerindeki verileri almaksa, Delphi için benzer bir çok örnek uygulama var. Örnek: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

 O forma veriyi gönderiyorum. Bu arada konuyu açarken idhttp.get demişim ama o post olacak. 
 Veriyi gönderdikten sonra aynı sayfa içinde ajax ile yükleme yapıyor. <body> içinde ajax ile yüklenen <div> var. Onun tam olarak yüklenip yüklenemediğini anlayamadan veriyi çeviriyor. Yada TWebBrowser işlemi kesiyor gibi bir şey anlayamadım.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#6
WebBrowser1.Navigate(edt_SiteUrl.Text);
repeat
Application.ProcessMessages;
until (WebBrowser1.ReadyState = READYSTATE_COMPLETE);
bu şekilde deneyebilirmisin derken zaten öyle kullanmışsın.

“Do. Or do not. There is no try.”
Cevapla
#7
(01-07-2017, Saat: 16:20)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(01-07-2017, Saat: 16:07)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlKaynak kodunda frame yok, fakat benzer yapıda form var.
 <form action="/adsl/ttnet-fatura-odeme" method="post">
Amaç bu form üzerindeki verileri almaksa, Delphi için benzer bir çok örnek uygulama var. Örnek: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

 O forma veriyi gönderiyorum. Bu arada konuyu açarken idhttp.get demişim ama o post olacak. 
 Veriyi gönderdikten sonra aynı sayfa içinde ajax ile yükleme yapıyor. <body> içinde ajax ile yüklenen <div> var. Onun tam olarak yüklenip yüklenemediğini anlayamadan veriyi çeviriyor. Yada TWebBrowser işlemi kesiyor gibi bir şey anlayamadım.

Merhabalar , 

Web sayfası Manipülasyonu konularıyla oldukça haşır neşirim ,  bahsettiğiniz durumda ki gibi sayfadaki bir bölümün yüklenip yüklenmediğini (daha doğrusu sayfada beklenen değişikliğin gerçekleşip gerçekleşmediğini) kontrol etmenin güvenli bir yolu da ilgili değişikliği içerecek elementin varlığının ya da içeriğinin kontrolünü düzenli aralıklarla yapmaktır.

Basitçe inceleyecek olursak  genelde her elementin bir "ID" değeri vardır bu sebeple örneğimde "ID" değerini kullanarak elementin varlığını kontrol  edeceğiz ;

MSHTML i uses a eklemelisiniz.

function GetElementById(const Doc: IDispatch;
  const Id: string): IDispatch;
var
 Document: IHTMLDocument2;
 Body: IHTMLElement2;
 Tags: IHTMLElementCollection;
 Tag: IHTMLElement;
 I: Integer;
begin
 Result := nil;


 if not Supports(Doc, IHTMLDocument2, Document) then
   begin
   Result := nil;
   Exit;
   end;

 if not Supports(Document.body, IHTMLElement2, Body) then
   begin
     Result := nil;
     Exit;
   end;
 Tags := Body.getElementsByTagName('*');
 for I := 0 to Pred(Tags.length) do
 begin
   Tag := Tags.item(I, EmptyParam) as IHTMLElement;
   if AnsiSameText(Tag.id, Id) then
   begin
     Result := Tag;
     Break;
   end;
 end;
end;

Bu fonksiyon verdiğimiz "HTML Document" (TWebBrowser.Document) in içinde verilen ID deki elementi bulup döndürür, bulamaz ise "NIL" döndürür.


function WaitWb(pDoc : IDispatch ; pObjectID: String ; pTimeOut : Integer = 5) : Boolean;
var
intBeginTime : Cardinal ;
begin
intBeginTime := 0;
intBeginTime := GetTickCount;
Result := True;

while not Assigned( GetElementById( pDoc, pObjectID ) as IHTMLElement ) do
    begin
       if (GetTickCount - intBeginTime) > (pTimeOut * 1000) then
         begin
            Result := False ;
            Break ;
         end;
       Sleep(250);
       Application.ProcessMessages ;
    end;
end;


Verilen HTML Document için de (TWebBrowser.Document) verilen "ID" ye sahip elementin gelip gelmediğini verilen zaman aşımı süresince (sn) bekler bulursa True bulamazsa ise False döndürür.



İyi çalışmalar.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  webbrowser nesnesi sayfa bulunamadı hatası klavye 2 137 01-06-2018, Saat: 16:55
Son Yorum: klavye
  Uygulama içinde bekleme konumunda ekranda animasyon oynatma Bay_Y 13 427 11-05-2018, Saat: 08:18
Son Yorum: Tuğrul HELVACI
  Excel sayfa 2 Dostk 3 833 08-12-2016, Saat: 18:01
Son Yorum: Dostk



Konuyu Okuyanlar: 1 Ziyaretçi