İdhtpp ile class çekme.!

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

İdhtpp ile class çekme.!

Mesaj gönderen spectermun »

Arkadaşlar iyi geceler ben bir web sitesinin kaynak kodlarından bir class içeriğini çekmek istiyorum bunu elimdeki şu kodla alabiliyorum

Kod: Tümünü seç

GetInnersByClass(webbrowser1.Document,'myvideo',lst);
fakat webbrowser idhttp ye göre çok yavaş idhttp ile sitenin komple kaynak kodunu alabiliyorum ama içinden sitemiz de de olan bir kod ile aradan seç deyip seçiyor fakat tek bir tanesini aktarıyor .

1.sorum: Direk idhttp ile sitenin kaynak kodundan myvideo class'ını nasıl alabilirim.

2.sorum: eğer birinci sorum olmasa bu kod da nasıl listbox içerisine memo1 de kileri sırayla aktarabilirim.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
 NONE              = $00; 
 INET_USERAGENT    = 'Mozilla/4.0, Indy Library (Windows; utf-8)';
 INET_REDIRECT_MAX = 10;
var
  StreamData :TMemoryStream;
  Url,html        : string;
begin
  idhttp1.request.userAgent:=INET_USERAGENT;                           
  idhttp1.redirectMaximum:=INET_REDIRECT_MAX;                           
  idhttp1.handleRedirects:=INET_REDIRECT_MAX<>NONE;
  Url        :=edit1.text;
  StreamData := TMemoryStream.Create;
  try
    try
     html:= idhttp1.Get(edit1.text); 
     idhttp1.Get(edit1.text, StreamData); 
     StreamData.Seek(0,soFromBeginning);
     memo1.Lines.Text:=html;
     Except On E : Exception Do
     MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
    End;
  finally
    StreamData.free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ara,s: string;
metin: AnsiString;
begin
listbox1.Clear;
for i := 0 to memo1.Lines.Count - 1 do
begin
  s := aradansec(memo1.lines,'<font color="green">','</font>');
  listbox1.Items.add(s);
end;
end;

Yukarıdaki kodda idhttp ile siteden kaynak kodu çekiyorum ve memo1 içine atıyorum daha sonra url ler <font color="green"></font> içerisinde olduğundan button 2 ile aradan seç deyip sırasıyla listbox'a ekletmek istiyorum fakat birinci link den dolu ekliyor. bu olayı çözemedim. Yardımcı olursanız çok sevinirim arkadaşlar.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: İdhtpp ile class çekme.!

Mesaj gönderen SimaWB »

aradansec fonksiyonunu yazmadığın için tam olarak nasıl çalıştığını bilmiyorum ama kodlara bakılırsa

Kod: Tümünü seç

s := aradansec(memo1.lines,'<font color="green">','</font>');
yerine

Kod: Tümünü seç

s := aradansec(memo1.lines[i],'<font color="green">','</font>');
olabilir mi?
There's no place like 127.0.0.1
spectermun
Üye
Mesajlar: 36
Kayıt: 06 Ara 2014 07:17

Re: İdhtpp ile class çekme.!

Mesaj gönderen spectermun »

Aradanseç fonksiyonu aşağıda yalnız memo1.lines önceden denedim boş atıyor :S bende anlamadım nedenini bu 3 kodu derleme imkanınınız varsa ne demek istediğimi daha iyi anlayacaksınız

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;
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: İdhtpp ile class çekme.!

Mesaj gönderen barisatalay »

Url yi atma şansınız var mı havadan tahmin yapmak yerine deneyerek yardımcı olsak ?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: İdhtpp ile class çekme.!

Mesaj gönderen SimaWB »

WebBrowser ile açtığınız sayfa içinde font tag'lerinin içeriğini bulmak için şöyle bir kod kullanabilirsiniz:

Kod: Tümünü seç

var
  doc: IHTMLDocument2;
  docAll: IHTMLElementCollection;
  el: IHTMLElement;
  i: Integer;
begin
  doc := WebBrowser1.Document as IHTMLDocument2;
  if Assigned(doc) then
  begin
    docAll := doc.all;
    for i := 0 to docAll.length-1 do
    begin
      el := docAll.Item(i,'') as IHTMLElement;
      if (el.tagName = 'FONT') then
       //el.innerText ile <font>'un içeriğini bulmuş olursun
    end;
  end;
end;
There's no place like 127.0.0.1
Cevapla