Web parse Değer alma yöntemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Web parse Değer alma yöntemi

Mesaj gönderen Lord_Ares »

arkadaşlar merak ettiğim bir konu var. Html parse ile uğraşırken ,
bilgi:= Form1.WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Item(j).Value
şeklinde websayfasındaki input bir alandaki değeri herhangi bir değişkene alabiliyorsak.
aşağıdaki webkodundaki HİZM.TAŞ.SAN.TİC.LTD.ŞTİ kısmını şu şekilde neden alamıyoruz. Alınabilirmi.

bilgi:= WebBrowser1.OleObject.Document.GetElementByID('ADRES').value;
veya
bilgi:= Form1.WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Item(j).Value

//// websayfası kodu
<TD align=left><SPAN id=ADRES >HİZM.TAŞ.SAN.TİC.LTD.ŞTİ.</SPAN> </TD>
/////
Eğer alabiliyorsak, parse işlemine gerek kalmaz :)
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: Web parse Değer alma yöntemi

Mesaj gönderen barutali »

sadece sonuca ulaşmak için aşağıdaki @marman hocanın function ı işini görebilir..

Kod: Tümünü seç

Function aradansec( text, ilk, son:String ): String;
begin
   Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
   Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
amatör küme programcı :D
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Web parse Değer alma yöntemi

Mesaj gönderen orhancc »

Kod: Tümünü seç

uses
  MSHTML, SysUtils, Variants;

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
    raise Exception.Create('Invalid HTML document');

  if not Supports(Document.body, IHTMLElement2, Body) then
    raise Exception.Create('Can''t find <body> element');

  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;
Kullanımı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Elem: IHTMLElement;
begin
  Elem := GetElementById(WebBrowser1.Document, 'myid') as IHTMLElement;
  if Assigned(Elem) then
    ShowMessage(
      'Tag name = <' + Elem.tagName + '>'#10 +
      'Tag id = ' + Elem.id + #10 +
      'Tag innerHTML = "' + Elem.innerHTML + '"'
    );
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Web parse Değer alma yöntemi

Mesaj gönderen Lord_Ares »

ilginiz için teşekkürler, fakat arkadaşlar ben zaten şu şekilde bilgiyi alabilyorum. Sanırım tam anlmatamdım. şöyle göstereyim.

bilgi:= Form1.WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Item(j).Value

benim sorduğum şu, yukarıdaki şekilde sadece input alanlarlarda geçerli ( edit, combobax gibi..) alanlardan bilgiyi alabiliyoruz.
Fakat,
<TD align=left><SPAN id=ADRES >HİZM.TAŞ.SAN.TİC.LTD.ŞTİ.</SPAN> </TD>aa

gibi alanlarında bi id numarası olmasına rağmen bilgiyi neden çekemiyoruz . Bu yüzden pos gibi fonksionlar ile parse etmek zorunda kalıyoruz.
Sonuçta oda id nurası olan bir nesne ve içerisine bilgi yazılabiliyor.(sayfanın içindeki değişkenden bilgiyi buraya çekiyor)
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Web parse Değer alma yöntemi

Mesaj gönderen unicorn64 »

Kod: Tümünü seç

Form1.WebBrowser1.OleObject.Document.Forms.Item(i).Elements.Item(j).innerHTML
şeklinde denediniz mi?
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla