Delphi-PRAXiS
Seite 2 von 2     12   

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)

shmia 4. Aug 2005 17:12

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

Zitat von Assun
Delphi-Quellcode:
 root := TreeView1.Items;
da bringt er mir "undefinierter Bezeichner" obwohl ein TreeView namens TreeView1 existiert :gruebel

Mein Beispiel ist für Delphi 5. Du verwendest anscheinend D2005.
Hier musst du einfach selbstständig etwas Forschungsarbeit in der OH leisten.

Assun 4. Aug 2005 17:31

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Mist. ich hab doch kein Plan von dem scheiss ;-)

kann man meinen falschen Code oben nicht einfach korrigieren ?

Lannes 4. Aug 2005 22:09

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

hab mal deinen Code überarbeitet.
Die falschen Zeilen sind auskommentiert, neue durch //neu gekennzeichnet.
In einem Post zuvor hatte ich geschrieben :
"Wenn frames.length = 0 ist hast Du keine Frames ",
deshalb der Bereich mit den neuen Zeilen.
Delphi-Quellcode:
var z,z2,count1,count2 : Integer;
begin
  with WebBrowser1 do
  begin
  count1 := OleObject.document.frames.length;
  if count1 = 0 then//keine frames                               //neu
    begin                                                        //neu
    count1 := OleObject.document.images.length;                  //neu *
    for z := 0 to Count1-1 do                                    //neu
      Memo1.Lines.Add(OleObject.document.images.Item(z).Src);    //neu
    end                                                          //neu
    else                                                         //neu
      for z := 0 to Count1-1 do
        begin
        //Count2 := OleObject.document.frames.item(z).document.images.item(z).Src;
        Count2 := OleObject.document.frames.item(z).document.images.length;              //neu
        for z2 := 0 to Count2-1 do
          //Memo1.Lines.Add(OleObject.document.images.Item(z).Src);
          Memo1.Lines.Add(OleObject.document.frames.item(z).document.images.item(z2).Src);//neu
        end;
  end;
getestet u.a. mit:
ohne Frames = Delphi-Praxis
mit Frames = SELFHTML Framesbeispiel

Deine Web-Seite erzeugt bei mir auch die Fehlermeldung "Zugriff verweigert",
die Ursache wird in deinen Seiten liegen, da ich so ca 10 andere mit dem Code getestet hab.

//Edit: Wenn jemand den Grund kennt, oder eine Lösung hat, wäre schön.
//Edit2: den Code von shmia konnte ich nicht testen, da mein Delphi die Funktion VariantIsObject nicht kennt und Google auch nicht.
//Edit3: Zeile mit //neu * eingefügt

shmia 5. Aug 2005 09:54

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

Zitat von Lannes
//Edit2: den Code von shmia konnte ich nicht testen, da mein Delphi die Funktion VariantIsObject nicht kennt und Google auch nicht.

Ups, hatte ich vergessen.
VariantIsObject ist eine kleine, nützliche Hilfsfunktion, die prüft, ob in einem OleVariant ein Dispatch-Interface steckt.
Delphi-Quellcode:
function VariantIsObject(const value:OleVariant):boolean;
begin
   result := (VarType(value) = varDispatch);
end;

Lannes 5. Aug 2005 15:21

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

Zitat von shmia
...
Ups, hatte ich vergessen.
VariantIsObject ist eine kleine, ...

@shmia : Besten Dank

Der Code von shmia funktioniert gut und liest alle Elemente aus dem Tag <FORMS> aus,
berücksichtigt aber keine Frames.
Damit kann die Zugriffsverweigerung des IE/Webbrowsers leider auch nicht umgangen werden.

Im Zusammenhang mit Frames habe ich festgestellt das
OleObject.document.frames.length auch den Tag <iframe> berücksichtigt :wall:
Also wären folgende Situationen abzufangen:
- Framesets
- verschachtelte Framesets
- Seite incl. IFrame
- Seite incl. IFrame in einem Frame
- IFrame innerhalb eines IFrame
:gruebel: also rekursiv

Bei der Seite http://assun.de/ kann die Zugriffverweigerung umgangen werden:
1. Auslesen der Adresse der Seite die im Frame angezeigt wird
2. Laden der Seite im WebBrowser
3. auslesen der Images wie gehabt

Delphi-Quellcode:
...
sFrameName := WebBrowser1.OleObject.Document.all.tags('FRAME').Item(0).getattribute('src',0);
Webbrowser.Navigate(sFrameName);
...
ist aber keine Ideal-Lösung.

marabu 6. Sep 2005 20:57

Re: TWebBrowser : Alle Input Felder, Bilder etc. auflisten
 
Hi folks,

für den Fall, dass dieses Problem noch nicht ganz gelöst ist, möchte ich euch noch diesen Hinweis geben: klick. Vielleicht hilft er ja weiter.

Grüße vom marabu

Lannes 6. Sep 2005 21:58

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

@marabu
kann der WebBrowser nicht :(
Fehlermeldung:
Code:
Die Methode 'Window' wird vom Automationsobjekt nicht unterstützt.

marabu 7. Sep 2005 07:13

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

Zitat von Lannes
kann der WebBrowser nicht

Wetten dass?

Delphi-Quellcode:
procedure TWebForm.FramesButtonClick(Sender: TObject);
var
  win: IHTMLWindow2;
  doc: IHTMLDocument2;
  fc: IHTMLFramesCollection2;
begin
  doc := WebBrowser.Document as IHTMLDocument2;
  win := doc.parentWindow;
  fc := win.frames;
  ShowMessage(Format('%d frames found', [fc.length]));
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
Seite 2 von 2     12   

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