web deki html datanın gride alınması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

web deki html datanın gride alınması

Mesaj gönderen ALUCARD »

Arkadaşlar Selamun Aleyküm.

php listelenen kayıtları delphi 7 kullanarak bi şekilde grid içine almam lazım .

bunu nasıl yapabilirim yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim.

Kaynak Kaodum bu şekilde

Kod: Tümünü seç

<table class="display" id="tabledata">
<thead>
<tr>
<th>Kullanici</th>
<th>Isim</th>
<th>G&ouml;nderim zamani</th>
<th>Fiyat</th>
<th>Siparis Kodu</th>
<th>Durum</th>
<td class="ui-state-default">Islem</td>
</tr>
</thead>
<tbody>
	3
<tr class="gradeU">
<td>mete</td>
<td>ahmet mete</td>
<td>Hemen</td>
<td>20</td>
<td>9E2EauOVuX</td>			
<td>Okunmuş
</td>
<td>
<a class="button white viewOrder" href="#" rel="68" title="Incele"><span class="icon_single accept"></span></a>
</td>
</tr>
1
<script>$("#warningDiv").html("Okunmamis Siparisiniz Mevcut! Lutfen siparislerinizi kontrol ediniz!").show();</script>
<tr class="gradeG">
<td>mete</td>
<td>ahmet mete</td>
<td>Hemen</td>
<td>10</td>
<td>1yq73g2zTS</td>			
<td>Okunmamış
</td>
<td>
<a class="button white viewOrder" href="#" rel="70" title="Incele"><span class="icon_single accept"></span></a>
</td>
</tr>
	1
<script>$("#warningDiv").html("Okunmamis Siparisiniz Mevcut! Lutfen siparislerinizi kontrol ediniz!").show();</script>
tr class="gradeG">
<td>mete</td>
<td>ahmet mete</td>
<td>Hemen</td>
<td>5</td>
<td>Fed1blwl92</td>			
<td>Okunmamış
</td>
<td>
<a class="button white viewOrder" href="#" rel="69" title="Incele"><span class="icon_single accept"></span></a>
</td>
</tr>
</tbody>
</table>
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen vkamadan »

Merhaba ,
Bu iş için sayfayı TWebBrowser ile navigate edin ve aşağıdaki örnek yapıyı inceleyerek tabloyu hücre hücre okuyun. örnekte verdiğimiz tablonun (tabledata) her bir hücresini gezip InnerText değerini Memo1 e yazacak.

Kod: Tümünü seç

procedure TabloOku;
var
i, j: Integer;
ovTable: OleVariant;
begin
   ovTable := WebBrowser1.OleObject.Document.GetElementById('tabledata'); // sizin paylaştığınız kodda okumak istediğiniz tablonun ID si "tabledata"
for i := 0 to (ovTable.Rows.Length - 1) do
begin
for j := 0 to (ovTable.Rows.Item(i).Cells.Length - 1) do
begin
Memo1.Lines.Add(ovTable.Rows.Item(i).Cells.Item(j).InnerText) ;
end;
end;
end;

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen ALUCARD »

[Error] Unit1.pas(33): Undeclared identifier: 'WebBrowser1'
hatası alıyorum
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen vkamadan »

merhaba ,
formunuzda Adı WebBrowser1 olan bir TWebBrowser , ve Adı Memo1 olan bir TMemo nesnesi olmalıdır, ben örnek olması açısından isimleri varsayılan kullandım, kodu yorumlayıp kendinize göre uyarlamanız gerkir.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen ALUCARD »

Kod: Tümünü seç

TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Button1: TButton;
hocam onların hepsi formun üzerinde mevcut
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen vkamadan »

unitin tamamını paylaşırmısınız. kontrol edelim.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: web deki html datanın gride alınması

Mesaj gönderen unicorn64 »

prosedür tanımının başında formun classını belirtmeniz gerek

Kod: Tümünü seç

procedure TForm1.TabloOku;
var
i, j: Integer;
ovTable: OleVariant;
...
...
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
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen ALUCARD »

Aşağıdaki gibi yazınca düzeldi.

Kod: Tümünü seç

procedure TabloOku;
var
i, j: Integer;
ovTable: OleVariant;
begin
   ovTable := form1.WebBrowser1.OleObject.Document.GetElementById('detailItem'); // sizin paylaştığınız kodda okumak istediğiniz tablonun ID si "tabledata"
for i := 0 to (ovTable.Rows.Length - 1) do
begin
for j := 0 to (ovTable.Rows.Item(i).Cells.Length - 1) do
begin
form1.Memo1.Lines.Add(ovTable.Rows.Item(i).Cells.Item(j).InnerText) ;
end;
end;
end;
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen ALUCARD »

web sayfasında butonun altında aşağıdaki gibi bir kod var bu butona delphi 7 ile nasıl tıklarım acaba
sayfayı webbrovser ile kullanıyorum.

Kod: Tümünü seç

<a class="button white viewOrder" href="#" rel="69" title="Incele"><span class="icon_single accept"></span></a>
birde

Kod: Tümünü seç

<form id="sendOrder" name="sendOrder">
<input type="hidden" value=" " name="types" id="types" />
<p class="ui-widget" id="orderDetail">
</p>
<p class="fr">
<a class="button grey closer">Kapat</a>
<a class="button green print">Yazdir</a>
<a class="button themed saved">Gönder</a>
<a class="button red alert">Sorun Var!</a>
</p>
</form>
burdaki Gönder butonuna nasıl tıklarım.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen vkamadan »

Merhabalar ,

ID si olmayan bir "A" ya yani linke tıklamak için, döngüyle tüm linkleri gezip, title attributesi "Incele" olanı bulunca click metodunu çalıştırmalısınız, (tabi başka aynı title ye sahip A yoksa)

Kod: Tümünü seç

var
 i: Integer ;
begin
      for I := 0 to WebBrowser1.OleObject.Document.links.Length - 1 do
        begin
          if Trim(WebBrowser1.OleObject.Document.links.item(i).Title) = 'Incele' then
            begin
              WebBrowser1.OleObject.Document.links.item(i).click;
               break;
            end;
        end;
end;
Gönder butonuda gördüğümüz kadarıyla bir "A" yani link, yukarıdaki yöntemle yapabilirsiniz, tek fark Title yerine InnerText = 'Gönder' olanı bulup click yapacaksınız,

kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen G.Arkas »

Yeni konu açmamak adına hortlattığım bu konudan dolayı çok özür dilerim.

Bu işlemde satırları alabiliyoruz fakat ben colonları alıp listview e taşımak istediğimde hata veriyor. (Not suported ...) bu varianttan dolayı mı acaba?

Kod: Tümünü seç

var
i, j: Integer;
ovTable: OleVariant;
it:tlistitem;
s,ss:string;
  parse : TArrayOfString;
begin
try
ovTable := Form1.WebBrowser1.OleObject.Document.GetElementById('antivirus-results');
for i := 0 to (ovTable.Rows.Length - 1) do
begin
it:=Form1.Lv.items.add;
s:=(ovTable.Rows.Item(i).innertext);
Form1.Memo2.Lines.Add(s);
ss:=StringReplace(s,' ','|',[rfReplaceAll, rfIgnoreCase]);
parse := SplitString('|',ss);
it.Caption:=parse[0];
if parse[2] <> '' then
begin
it.SubItems.Add(parse[1]);
it.SubItems.Add(parse[2]);
end
else
it.SubItems.Add('Clean');
it.SubItems.Add(parse[1]);
yukarıda parse yapıp boşlukları '|' ile replace yapıyorum ve listviewe atıyorum. Ama birden fazla ve alakasız yerlerde boşluk olunca satırlar kayıyor. Bende Kolon olarak alayım dedim ama başaramadım. Nasıl yapabiliriz acaba?

Not : Rows ları Columns yapınca hata veriyor.

İyi çalışmalar...
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen mrmarman »

Birden fazla alakasız boşluk demişsin ya, parse işleminden önce tüm çift boşlukları tek boşluğa düşürüp deneyebilirsin.

strBlok := WebBrowser1.OleObject.Document.Body.InnerHTML; ile strBLOK içerisinde tüm HTML kaynak var diyelim.

Kod: Tümünü seç

While POS('  ', strBlok) > 0 do System.Delete(StrBlok, POS('  ', strBlok), 1);
bu kod yan yan çift boşluk gördüğü sürece hepsini tek boşluk kalana kadar sadece ilk boşluğunu siler. Bu işinin yarısını kurtarır.
Resim
Resim ....Resim
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen G.Arkas »

@mrmarman abicim öncelikle ilgilendiğin için çok teşekkür ederim. O cümleyi yanlış kurdum sanırım. Birden fazla boşluk yanyana değil. Mesela ben tüm tek boşlukları '|' çevirip parse yapıyordum.

Varsayılan olarak 3 kolonum var ve bu üç kolon arasındaki verilerde tek boşluk var.

Şöyle

Kod: Tümünü seç

ESET-NOD32 a variant of Win32/Troj.Simmi-GIV 20140725
Yukarıdaki kod listview'e şu şekilde girmesi lazım.

1. Kolon
ESET-NOD32

2. Kolon
a variant of Win32/Troj.Simmi-GIV

3. Kolon
20140725

Yukarıda 2. kolon değerinde birden fazla boşluk olduğu için onlarda '|' işaretini alıyor. SplitString de o işareti bir alt satıra kaydırıyor. Böylece tüm satırlar kayıyor. Yani normalde gelen değerlerin arasında tek boşluk olmaması lazım eğer olursa problem çıkıyor. Gelen verilerin tümü dinamik. Antivirüs isimlerinden tut 2. kolonda ki virüs isimlerine kadar hepsi dinamik.

Örnek sayfa
https://www.virustotal.com/en/file/f84f ... /analysis/

Tablo şeklinde parselemek istemiştim. Daha derli toplu olur diye. Kod yinede çalışıyor ama dediğim sorun olunca büyük sıkıntı çıkıyor. Virüs imzaları karışıyor.
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen mrmarman »

Parse işleminde neden lehine olan kısmınları aleyhine çeviriyorsun diye sormak istiyorum. TEXT olarak almayı tercih etme. HTML olarak almayı tercih et ki ayırt edici unsurları kaybetme.

Aşağıdaki kod PARSE işlemini yapar. Bak ne kadar basit.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  strBlok, strAra,
  strAntiVir, strSonuc, strGuncelle : String;
begin
  WebBrowser1.Navigate( 'https://www.virustotal.com/tr/file/f84fc2161bb38d0d0d802e709f41e43766ec2b714d084b3202ce4d5ea547460d/analysis/' );
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;
  strBlok := WebBrowser1.OleObject.Document.Body.InnerHTML;
  while Pos('<TD class=ltr>', strBlok) > 0 do
  begin
    strAra := '<TD class=ltr>';
    System.Delete( strBlok, 1, Pos(strAra, StrBlok) + Length(strAra)-1 );
    strAntiVir  := Trim( Copy( strBlok, 1, Pos('<', strBlok)-1 ) );

    strAra := '">';
    System.Delete( strBlok, 1, Pos(strAra, StrBlok) + Length(strAra)-1 );
    strSonuc    := Trim( Copy( strBlok, 1, Pos('<', strBlok)-1 ) );

    strAra := 'ltr>';
    System.Delete( strBlok, 1, Pos(strAra, StrBlok) + Length(strAra)-1 );
    strGuncelle := Trim( Copy( strBlok, 1, Pos('<', strBlok)-1 ) );

    With ListView1.Items.Add do
    begin
      Caption := '';
      SubItems.Add( strAntiVir  );
      if strSonuc <> ''
      then SubItems.Add( strSonuc    )
      else SubItems.Add('* Dosya Algılanmadı');
      SubItems.Add( strGuncelle );
    end;
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: web deki html datanın gride alınması

Mesaj gönderen G.Arkas »

Abi aslinda ListView kullanacaktim ama tablo halinde StringGrid'e aktarmak daha kolay oldu. Programlamayla ilgili cok buyuk bir sikintim var basit dusunemiyorum. Illaki bir atraksiyon pesindeyim. :) Bazen bosu bosuna oyalaniyorum.
Resim
Cevapla