Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen nevzataksoy » 21 Ara 2013 06:19

Merhabalar,

Arkadaşlar Html 5 Tarzı Bir Sitede (Örn: hgs.epttavm.com ) İşlem Yapmak İstiyorum. Bunun İcin EmbeddedWB Kullanmak İstedim.
Ancak Burada Javascriptin Document Only Özelliği Çalışmadı. Html 5 e uygun Web Browser Componenti Ararken Chromium Embeded Componenti Buldum.
Kendi içerisindeki Demo Örnekleri İle Kodları Hakkında Biraz Bilgi Sahibi Oldum. Yinede Elimdeki Bilgi İle Yapmak İstediğimi Yapamıyorum.

Sorunuma Gelince;
Chromium da ExecuteJavascript() Methodu İle Web Sayfasındaki Butonlara Tıklayıp Formları Submit Edebiliyorum. Ama input Textlere Veri Girişinde sorunla karşılaşıyorum.

Örneğin;

Kod: Tümünü seç

crm.Browser.GetMainFrame.ExecuteJavaScript('$("#user").attr("value","nevzataksoy");','',0); 
Şeklinde Stabil Veriler Girdiğimde Yazdırabiliyorum.
Ama Bu Verileri Değişkenle Atamak İstediğimde Veriyi Yazmıyor.

Sorunlu Kodumuz Bu;

Kod: Tümünü seç

var 
    veriT,idT : ustring;
begin
   veriT  := veriMemo.Text;
   idT    := idText.Text;
   crm.Browser.GetMainFrame.ExecuteJavaScript('$("#'+idT+'").attr("value","'+veriT+'")','',0);
Bu Sorunla İlgili Araştırma Yaparken Başka Bir Örnek Gördüm. Örnekte Js Kodlarının Tamamı Değişkene Atanmıştı Ve Bende O Şekilde Yaptım.
Bukez Oldu Dedim Çalıştırdım. Bazen Çalışıyor Bazen Çalışmıyor. Bu Sorunu Sadece Veri Eklemede Yaşıyorum. Tıklama Ve Submitte Bir Sorunum Yok.
Sorunlu Kodumun Son Hali;

Kod: Tümünü seç

  var
    veriT,idT : ustring;
    vJSY : String;
begin
  veriT := veriMemo.Text;
  idT   := idText.Text;
  vJSY   := '$("#'+idT+'").attr("value","'+veriT+'");';
  crm.Browser.GetMainFrame.ExecuteJavaScript(vJSY,'',0);
Bu Kodun Neresinde Hata Var Acaba, Satır Satır Baktım Yazım Hatası Bulamadım. Mantık Hatasımı Yapıyorum Acaba.
Bu Durum Beni Hayal Kırıklığına Uğratıyor. 1 Aydır Bu Web Browser İşine Kafa Yoruyorum.
Böyle İstikrarsız Durumlarla Karşılaşınca İnsanın Şevki Kırılıyor. Ben Bu Chromium İle Sayfadaki İnput Textlere Daha İstikrarlı Bir Şekilde Nasıl Veri Ekleyebilirim.
ExecuteJavascript() den Başka Bir Method Varmı?
Yardımlarınızı Bekliyorum.

Saygılarımla...[/color]

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4727
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen mrmarman » 21 Ara 2013 06:52

Merhaba..

Çok uzağa gitmenize gerek yok. Şimdi cevabı vericem ama size başka bir konuda önerim olacak.

- EmbeddedWB'yi şahsen önermiyorum, şöyle ki virüs yazılımları bazı bileşen kombinasyonunda EmbeddedWB varsa virüs olarak algılıyor. Bunu hem virüs firmalarına hem de EmbeddedWB'nin geliştiricilerine eposta ile bildirdim.
(a) Virüs firmaları bu FALSE-POSITIVE olarak tanımlıyor ve kendilerine mail ile bildirdiğimiz taktirde yazılımlarımızı exclude listesine alabileceklerini bildiriyorlar. (virüs olmadığı halde sezgisel (heuristic) taramada fonksiyonlarında yanlışlıkla virüs gibi algılama durumudur)
(b) bsalsa.com ise hiç ilgilenmedi.

(1) Örneğin yeni bir proje açın.
(2) Forma bir tane TBitBtn koyun
(3) bir tane de TEmbeddedWB koyun.
(4) Sonra hiçbir şey yapmadan derleyip BUILD edin. EXE'sini WEB üzerinde toplu virüs sorgulayan siteler var oralardan birine yollayın. Bir kaç tanesinden virüslü olarak rapor alacaksınızdır. Bu hiç de hoş bir durum değil. Özellikle AVAS gibi yaygın kullanılan bir virüs tarama yazılımı, sizin projenize trojan içeriyor dediğinde.

- HTML içerisinde Name ile arama yapıp odaklanan ve değerini giren procedure hazırlamıştım. Daha önce de paylaşmıştım ama göremediniz sanırım.

//Procedure

Kod: Tümünü seç

// USES MSHTML
Procedure AlanDoldur( strAlanAdi, strDeger: String; WebBrowser:TWebBrowser );
Var
  Doc               : IHTMLDocument2;
  TumAlanlar        : IHTMLElementCollection;
  VeriGirisInput    : IHTMLInputElement;
  iSayac            : Integer;
begin
  Doc               := WebBrowser.Document as IHTMLDocument2;
  TumAlanlar        := Doc.body.all as IHTMLElementCollection;
  if TumAlanlar <> Nil then // veya ( Assigned(...)  ) şeklinde de sorabilirsiniz.
  begin // listemiz hazır demektir.
    for iSayac := 0 to TumAlanlar.Length - 1 do
    begin
      if ( TumAlanlar.Item(iSayac, EmptyParam) as IHTMLElement ).TagName = 'INPUT' then
      begin // Edit Alanıdır. // <input ile başlayanların listesi
        VeriGirisInput := ( TumAlanlar.Item(iSayac, EmptyParam) as IHTMLElement ) as IHTMLInputElement;
          if VeriGirisInput.Name = strAlanAdi then
          begin
            VeriGirisInput.Value := strDeger;
          end;
      end;
    end;
  end;
end;
//Kullanım örneği (sizin HGS sayfasından örnekle..)

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  strURL : String;
begin
  strUrl := 'http://hgs.epttavm.com/';
  WebBrowser1.Navigate( strURL );
  While WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;

  //Siteye Login olma zamanı...
  AlanDoldur( 'user', 'KullanıcıAdım',  WebBrowser1 );
  AlanDoldur( 'pass', 'KullanıcıŞifrem', WebBrowser1 );
  WebBrowser1.OleObject.Document.GetElementByID('btn-login1').Click;
end;
Başarılar. :bravo:
Resim Resim

nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Re: Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen nevzataksoy » 21 Ara 2013 07:21



@mrmarman İlginiz İçin Teşekkürler.
Verdiğiniz Kodu Deneyeceğim.
Gelişmeleri Tekrar Yazarım.


nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Re: Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen nevzataksoy » 21 Ara 2013 08:49



Yukarıdaki Kodu Denedim Sorunsuz Çalışıyor. Giriş Yapabiliyorum. Ama Bu Defa İlk Mesajımda Bahsettiğim Javascript Document Only Sorunu Yaşıyorum.

hgs.epttavm.com Sitesini Web Browser Kullanarak Açıp Plakayı Sorgulamaya Çalıştığımda Sorgulamıyor Daha Doğrusu Sorgula Butonunun Click Olayı Document Only İle Denetlendiği İçin Javascript Devreye Girmiyor. Bu Tip Sorunlardan Dolayı Delphi Chromium Framework Kullanmayı Düşündüm. Yukarıdaki Verdiğiniz Kodun Chromium Web Browser için Olanını Nasıl Yapabilirim?

Saygılarımla...



Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4727
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen mrmarman » 21 Ara 2013 08:58

Hocam sorunun login için isim ve şifre yazamamak diye yazdım. Şimdi söylediğin soruyu anlayabilmek için üye olmak gerekiyor. Görmeden birşey diyemiyeceğim. Login olabiliyorsun değil mi verdiğim kod ile. Bir hata vermeden yani.. Girerken hata vermiyorsa birinci aşama tamamdır.

- İkinci sorunlu şey nerede ?

- Şimdilik olay bundan ibaret. :idea:
Resim Resim

nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Re: Delphi Chromium da Input Alanına Nasıl Veri Girebilirim?

Mesaj gönderen nevzataksoy » 21 Ara 2013 09:04



Evet Verdiğiniz Kodda Bir Problem Yok. Sorun Giriş Yaptıktan Sonra Sorgulama Kısmında.

Sorgulama Ekranını Açmak için "Üye Olmadan Bakiye Yükle" Butonuna Tıklayıp Ulaşabilirsiniz.
Dediğim Sorunu Anlamak İçin Kodla Tıklatmak Yerine Siz Mous İle Tıklayın Oradada Göreceksiniz Document Only nin Devreye Girmediğini.
Login Butonunun OnClick Olayında Login() Fonksiyonunu Çağırdığı İçin Giriş Yapabildik. Ama Sorgulaya onClick Eklememişler.


Cevapla