Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebBrowser : Alle Input Felder, Bilder etc. auflisten (https://www.delphipraxis.net/50893-twebbrowser-alle-input-felder-bilder-etc-auflisten.html)

Assun 2. Aug 2005 12:50


TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Hi !

Ich habe vor einen kleinen Website Analyzer zu schreiben. Soll heissen man gibt die URL ein und per knopfdruck surft der WebBrowser auf die Seite und in einer ListBox sollen dann alle Items aufgelistet werden.

Also so dinge wie InputFelder, Bilder, Links etc.

Gibt es da vielleicht schon beim TWebBrowser von Haus aus so ein Feature ?

Oder muss ich da von hand den Quellcode durchscannen ? Wenn ja, wie ?

THX

Gruß Assun

Lannes 2. Aug 2005 13:06

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Hallo,

ja, Document Object Model ist das Stichwort.
Hier mal ein kleines Beispiel:
Delphi-Quellcode:
var z,count : Integer;
begin
  with WebBrowser1 do
  begin
  count := OleObject.document.images.Length;
  for z := 0 to Count-1 do
    Memo1.Lines.Add(OleObject.document.images.Item(z).Src);
  end;

Assun 2. Aug 2005 14:52

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal ein kleines sample angehängt, denn ich habe ein Problem.

Es klappt nich bei allen seiten !!!!!! denn auf Delphipraxis.net gehts zwar, nicht aber auf http://assun.de

aber seht selbst unten im Anhang :

Lannes 2. Aug 2005 16:09

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Hallo,

Du arbeitest auf deiner Seite mit Frames, darum musst Du erst mit Hilfe von
Delphi-Quellcode:
OleObject.document.frames.length
und dann
Delphi-Quellcode:
OleObject.document.frames.items(z)
alle Frames über eine Schleife durchgehen.
In dieser Schleife dann die Images auslesen.
In dem Fall dann:
Delphi-Quellcode:
OleObject.document.frames.item(z).document.images.item(z).Src
Wenn frames.length = 0 ist hast Du keine Frames und kannst den Code wie gehabt nehmen.

Assun 2. Aug 2005 17:23

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Also irgendwie peil ich das nicht so richtig :oops:

wenn ich folgenden code verwende :

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var z,count : Integer;
begin
  with WebBrowser1 do
  begin

  OleObject.document.frames.length;
  for z := 0 to Count-1 do
    OleObject.document.frames.items(z);

    Memo1.Lines.Add(OleObject.document.frames.item(z).document.images.item(z).Src);
  end;
end;
Bringt er mir beim ausführen den Error :"Nicht implementiert" :gruebel:

Was mache ich falsch ?

Lannes 2. Aug 2005 21:25

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Hallo,

Du musst zwei Schleifen verschachtelt ausführen,
dafür brauchst Du zwei Zählvariablen und zwei Countvariablen.
die Anzahl Frames hast Du ermittelt aber nicht Count zugewiesen.
Hab gerade nicht viel Zeit( :sharkylinchen: ), hier mal etwas Pseudocode:
Code:
Count_1 = Anzahl Frames im Document
Schleife_1 0 to Count_1
  begin
  Count_2 = Anzahl Images im Frame-Document
  Schleife_2 0 to Count_2
    begin
    Images auslesen
    end
  end
Versuchs mal umzusetzen, sonst melde Dich wieder. :)

Assun 4. Aug 2005 16:51

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Liste der Anhänge anzeigen (Anzahl: 2)
also ich habe den Code versucht umzusetzen :

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var z,z2,count1,count2 : Integer;
begin
  with WebBrowser1 do
  begin
  count1 := OleObject.document.frames.length;
  for z := 0 to Count1-1 do
  begin
  Count2 := OleObject.document.frames.item(z).document.images.item(z).Src;
  for z2 := 0 to Count2-1 do
    Memo1.Lines.Add(OleObject.document.images.Item(z).Src);
  end;
end;
end;
end.
beim compilieren bekomm ich zwar keinen Error, aber beim ausführen passiert wenn ich aud http://delphi-Praxis.net navigiere gar nix und bei http://Assun.de kommt dieser Error :

http://home.arcor.de/assun/error.JPG

Und ich habe keine Ahnung wieso.

Ich habe unten mal sowohl die EXE als auch den Source angehängt, in der Hoffnung, dass mir vllt jemand helfen kann ;-)

Union 4. Aug 2005 16:59

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Zitat:

Zitat von Assun
also ich habe den Code versucht umzusetzen :

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var z,z2,count1,count2 : Integer;
begin
  with WebBrowser1 do
  begin
  count1 := OleObject.document.frames.length;
  for z := 0 to Count1-1 do
  begin
  Count2 := OleObject.document.frames.item(z).document.images.item(z).Src;
  for z2 := 0 to Count2-1 do
    Memo1.Lines.Add(OleObject.document.images.Item(z).Src);
  end;
end;
end;
end.
beim compilieren bekomm ich zwar keinen Error, aber beim ausführen passiert wenn ich aud http://delphi-Praxis.net navigiere gar nix und bei http://Assun.de kommt dieser Error :

http://home.arcor.de/assun/error.JPG

Und ich habe keine Ahnung wieso.

Ich habe unten mal sowohl die EXE als auch den Source angehängt, in der Hoffnung, dass mir vllt jemand helfen kann ;-)

Wenn Du in Deinen Frames Cross-Site Scripting verwendest, weigert sich der IE Dir Zugriff darauf zu geben.

shmia 4. Aug 2005 16:59

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Folgender Code benötigt noch ein Treeview auf dem Formular:
Delphi-Quellcode:
procedure TFrmHTMLUpload.FillTreeView(WebBrowser: TWebBrowser);
var
  i,j, k :Integer;
  FormItem, Element, SubElement: OleVariant;
  root : TTreeNodes;
  child, child2, child3 : TTreeNode;
  s_type : string;

begin
   root := TreeView1.Items;  
   root.Clear;

  //count forms on document
  for I:=0 to WebBrowser.OleObject.Document.forms.Length -1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);

    if VariantIsObject(FormItem.Name) then
       child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name.Name)
    else
       child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name);
    child.ImageIndex := 3;


    For j:= 0 to FormItem.Length-1 do
    begin
      try
         Element := FormItem.Item(j);
         //when the fieldname is found, try to fill out
         child2 := root.AddChild(child, Element.Name+' = '+Element.Value);

         s_type := Element.Type;

         if s_type = 'submit' then
            child2.ImageIndex := 1
         else if s_type = 'text' then
            child2.ImageIndex := 0
         else if s_type = 'file' then
            child2.ImageIndex := 2
         else if s_type = 'hidden' then
            child2.ImageIndex := 4
         else if s_type = 'checkbox' then
            child2.ImageIndex := 5
         else if s_type = 'radio' then
            child2.ImageIndex := 6
         else if s_type = 'select-one' then
            child2.ImageIndex := 7
         else
            child2.ImageIndex := -1;

         child3 := root.AddChild(child2, s_type);
         child3.ImageIndex := -1;


         if s_type = 'text' then
         begin
            child3 := root.AddChild(child2, 'MaxLen='+IntToStr(Element.maxLength));
            child3.ImageIndex := -1;
         end
         else if s_type = 'select-one' then
         begin
            for k := 0 to Element.Options.Length-1 do
            begin
               SubElement := Element.Options.Item(k);
               child3 := root.AddChild(child2, SubElement.Text+ ' = <'+SubElement.Value+'>');
               child3.ImageIndex := -1;

            end;

//            ShowMessage(IntToStr(Element.Options.Length));
         end;

         if (s_type = 'hidden') then
         else
            ListBox1.Items.Add(Element.Name);

      except
        on E:Exception do
         root.AddChild(child, E.Message);
      end;
    end;
  end;

   if root.Count > 0 then
      root.GetFirstNode.Expand(True);
end;

Assun 4. Aug 2005 17:07

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Delphi-Quellcode:
 root := TreeView1.Items;
da bringt er mir "undefinierter Bezeichner" obwohl ein TreeView namens TreeView1 existiert :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz