Otomatik WebForm Doldurma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Otomatik WebForm Doldurma

Mesaj gönderen SimaWB »

TWebBrowser için buraya bakabilirsiniz. Linkini verdiğim çözüm kesin çözümdür, bence onu kullanılın.

İlk denediğiniz şekilde kullanmak isterseniz; kod yazma tekniği bakımından hiç hoş değil ama şu şekilde de kontrol edebilirsiniz:

Kod: Tümünü seç

if Assigend(EmbeddedWB1.OleObject.Document.GetElementByID('adi'))  then
  EmbeddedWB1.OleObject.Document.GetElementByID('adi').Value := Form1.RzDBEdit7.Text;
Yada EmbeddedWB'de GetElementByID fonksiyonunun dönüş tipine göre bir değişken tanımlayın. Daha önce yazdığınız hata koduna bakılırsa GetElementByID Variant tipinde sonuç döndürüyor.

Kod: Tümünü seç

var
  el: Variant;
begin
  el := EmbeddedWB1.OleObject.Document.GetElementByID('adi');
  if not VarIsNull(el) then//yada VarIsEmpty yada her ikisi
    IHTMLInputElement(el).value := Form1.RzDBEdit7.Text;
There's no place like 127.0.0.1
McVeLeT
Üye
Mesajlar: 65
Kayıt: 22 May 2005 06:45
Konum: Bursa

Re: Otomatik WebForm Doldurma

Mesaj gönderen McVeLeT »

Uğraştırdığımı düşünerek mesaj yazmayada utanıyorum aslında, kusura bakmayın.

Verdiğiniz ikinci ve üçüncü örnek hataları aşağıdaki gibidir.

Resim

Resim
Bazen sesini duyurabilmen için,
Susman gerekir...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Otomatik WebForm Doldurma

Mesaj gönderen SimaWB »

McVeLeT yazdı:Uğraştırdığımı düşünerek mesaj yazmayada utanıyorum aslında, kusura bakmayın.
Estağfurullah. Soru sormak utanılacak birşey olsa forumlar olmazdı :D

Bu da olmazsa ben de EmbeddedWB'yi kuracam bilgisayarıma :lol:

Kod: Tümünü seç

var
  el: Variant;
  InputEl: IHTMLInputElement;
begin
  el := EmbeddedWB1.OleObject.Document.GetElementByID('adi');
  if not VarIsNull(el) then//yada VarIsEmpty yada her ikisi
  begin
    InputEl := el as IHTMLInputElement;
    InputEl.value := Form1.RzDBEdit7.Text;
  end;
There's no place like 127.0.0.1
McVeLeT
Üye
Mesajlar: 65
Kayıt: 22 May 2005 06:45
Konum: Bursa

Re: Otomatik WebForm Doldurma

Mesaj gönderen McVeLeT »

:cry:

Resim
Bazen sesini duyurabilmen için,
Susman gerekir...
notname
Üye
Mesajlar: 149
Kayıt: 11 Şub 2005 02:15

Re: Otomatik WebForm Doldurma

Mesaj gönderen notname »

uses mshtml ekliomusun? + embeded browsera ne gerek varki webbrowser bence daha sağlıklı çalışmaktadır.
McVeLeT
Üye
Mesajlar: 65
Kayıt: 22 May 2005 06:45
Konum: Bursa

Re: Otomatik WebForm Doldurma

Mesaj gönderen McVeLeT »

Evet mshtml ekli ama olmuyor.

Daha anlaşılır olsun diye Webbrowser kullanarak örnek yaptım linkten bakabilirsiniz. Şimdi bunun üzerinde yapmaya çalışacağım.

http://depo.programvadisi.com/ornek.rar
Bazen sesini duyurabilmen için,
Susman gerekir...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Otomatik WebForm Doldurma

Mesaj gönderen SimaWB »

Webbrowser'la yapmaya karar verdiyseniz daha önce verdiğim linke size lazım olan herşey var.
Öncelikle GetElementById fonksiyonunu projenize ekleyin. Daha sonra sizin Button1Click prosedürü şu şekilde olabilir:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Elem: IHTMLElement;
begin

//http://www.bedavasiteekle.com/
Elem := GetElementById(WebBrowser1.Document, 'linkadi') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;
Elem := GetElementById(WebBrowser1.Document, 'url') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;
Elem := GetElementById(WebBrowser1.Document, 'kelimeler') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;

//www.site-ekle.net
Elem := GetElementById(WebBrowser1.Document, 'alk') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;
Elem := GetElementById(WebBrowser1.Document, 'url') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;
Elem := GetElementById(WebBrowser1.Document, 'aciklama') as IHTMLElement;
if Assigned(Elem) then Elem.innerText := Edit1.Text;

end;
There's no place like 127.0.0.1
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Otomatik WebForm Doldurma

Mesaj gönderen SimaWB »

Üzerinde çalıştığınız siteye baktığımda (bedavasiteekle) giriş yapılacak inputların ID'lerinin olmadığını farkettim :!:
Dolayısıyla GetElementByID ile bu elemanlara ulaşamazsınız. Elemanları "name" özelliğinden tespit etmelisiniz. Ayrıca textarea tag'lı alanlara da veri girişi yapmaya çalıştığınızı gördüm. Bunlara da erişim için IHTMLInputElement değil IHTMLTextAreaElement kullanmalısınız.
There's no place like 127.0.0.1
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Otomatik WebForm Doldurma

Mesaj gönderen mrmarman »

Merhaba.

- Size bir procedure hazırladım. Mümkün olduğunca anlaşılır olsun diye neyin ne olduğunu Türkçe değişken ismi kullandım. Bir bakışta çalışma sistemini anlayabileceksiniz.

- Bir HTML sayfanın hiyerarşik düzenle (TAG'lar ile ayrılarak) oluştuğunu hepimiz biliyoruz. Bu örnekte bu hiyerarşi içerisindeki INPUT (delphi'deki EDIT) ile TEXTAREA (delphi'deki Memo) ilişkisini kurarak anlatmaya çalıştım.

- Bir sayfanın olgunlaştığını if Assigned() veya <> Nil şeklinde sorgulayabilirsiniz. Bir element'in de mevcut olup olmadığını da ya yine if Assigned() ile veya <> Nil şeklinde sorgulayabilirsiniz.

- Bir sayfada veri girişi yapılabilen alanlar (bu başlıkta geçenler ile sınırlandırırsak) <input ... ile başlayanlar EDIT tipindeki alanlardır veya <textarea ... ile başlayanlar MEMO tipindeki alanlardır. Bu alanlarda atama yaparken kurallı olarak erişmek şarttır. Aşağıdaki procedure içerisinde bu kuralları göreceksiniz.

- Son söz olarak, kısadan GetElementByID('itemadi').Value şeklinde kullanıyoruz ya, aşağıda bundan daha farklı bir şekilde, yani body bünyesindeki item'leri bir liste halinde alıp, her birini dolaşarak adının 'itemadi' olup olmadığını sorarak erişmeyi de örneklemiş olayım. Bu yapıyı, ileride başka URL'lerdeki html'lerin de veri noktalarını basitçe bir MEMO'ya dökecek şekle de rahatlıkla dönüştürebilirsiniz. :idea:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Doc               : IHTMLDocument2;
  TumAlanlar        : IHTMLElementCollection;
  VeriGirisInput    : IHTMLInputElement;
  VeriGirisMemo     : IHTMLTextAreaElement;
  iSayac            : Integer;
begin
  if Assigned(WebBrowser1.Document) then // veya ( ... <> Nil ) şeklinde de sorabilirsiniz.
  begin
    Doc               := WebBrowser1.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;
            //http://www.bedavasiteekle.com/
            if VeriGirisInput.Name = 'linkadi'   then VeriGirisInput.Value := Edit1.Text;
            if VeriGirisInput.Name = 'url'       then VeriGirisInput.Value := Edit2.Text;
            //www.site-ekle.net
            if VeriGirisInput.Name = 'alk'       then VeriGirisInput.Value := Edit1.Text;
            if VeriGirisInput.Name = 'url'       then VeriGirisInput.Value := Edit2.Text;
        end;
        if ( TumAlanlar.Item(iSayac, EmptyParam) as IHTMLElement ).TagName = 'TEXTAREA' then
        begin // Memo Alanıdır. // <textarea  ile başlayanların listesi
          VeriGirisMemo := ( TumAlanlar.Item(iSayac, EmptyParam) as IHTMLElement ) as IHTMLTextAreaElement;
            //http://www.bedavasiteekle.com/
            if VeriGirisMemo.Name = 'kelimeler' then VeriGirisMemo.Value := Edit3.Text;
            //www.site-ekle.net
            if VeriGirisMemo.Name = 'aciklama'  then VeriGirisMemo.Value := Edit3.Text;
        end;
      end;
    end;
  end;
end;
Başarılar.
:bravo:
Resim
Resim ....Resim
McVeLeT
Üye
Mesajlar: 65
Kayıt: 22 May 2005 06:45
Konum: Bursa

Re: Otomatik WebForm Doldurma

Mesaj gönderen McVeLeT »

Yardımlarınız için tek tek teşekür ederim. :bravo:
Bazen sesini duyurabilmen için,
Susman gerekir...
Cevapla