Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebBrowser Sourcecode auslesen (https://www.delphipraxis.net/66794-twebbrowser-sourcecode-auslesen.html)

Sven Janssen 4. Apr 2006 13:10


TWebBrowser Sourcecode auslesen
 
Moin,

ich tüftel hier schon ne stunde herum um an den Sourcecode einer HTML Datei aus der ActiveX Komponenten TWebBrowser zu laden. Ich haber mir schon die MS Doku http://msdn.microsoft.com/workshop/b.../document2.asp durchgelesen habe aber das Problem das ich nur an den gerenderten HTML Code komme. Entweder mit HTML Tags innerHTML oder unformatiert innerText.
Das Problem ist, das ich eine XML Datei von einem Intranet/Internet Server herunterladen muss und wirklich an den Original XML Code kommen muss. Der XML Code selber wird durch eine HTTP Anfrage generiert. Nun ist der IE (TWebBrowser ) so clever und bereitet den XML Code für die Anzeige auf. Nur leider kann ich damit dann nichts mehr anfangen.

Übel des ganzen Problems ist, das meine Anfrage an den Intranet Server nicht direkt gestellt wird, sondern durch Proxy, Ben-Hur und weiß der Geier was umgeleitet wird. In meinem Prototypen setze ich auf die Indy Komponente http auf, die allerdings damit große Probleme hat ( Anfrage geht an den Apache vom Intranet Server, kommt aber nicht zurück ).
Da der IE auf den Maschinen allerdings 1a den XML Code vom Server läd, dachte ich das ich diesen eben mit ins Boot hole und darauf im Problemfall ausweichen kann.
Ich muss jetzt nur noch an den Sourcecode der XML Datei kommen

Ich habe im Netz nun allerhand gelesen, allerdings nur wie ich HTML in und nicht aus dem TWebBrowser lade.
Hoffe mir kann jemand helfen, sonst muss ich meinen Parser umschreiben.

Sven
PS : Nutze Delphi 6

JonnyGuitar 4. Apr 2006 13:24

Re: TWebBrowser Sourcecode auslesen
 
servus sven,

ich hoffe ich habe dich richtig verstanden und denke das dir das weiterhelfen könnte: SwissDelphiCenter - ...den Quelltext vom TWebbrowser auslesen/speichern

mfg Jonny

Sven Janssen 4. Apr 2006 13:37

Re: TWebBrowser Sourcecode auslesen
 
Ne das ist ja mein Problem.
Im Fall einer XML Datei wird das Teil intelligent und generiert einen ganz neuen HTMLCode. Sprich mit CSS Tags, Javascript usw. Wie ich an den komme habe ich auch schon raus bekommen, nur kann ich den gar nicht gebrauchen.
Ich brauch das Ursprungsrohmaterial. Und ich habe das Gefühl, dass ich genau an diesen nicht heran komme.

Dennoch danke für die Antwort.

Sven

Sven Janssen 4. Apr 2006 14:21

Re: TWebBrowser Sourcecode auslesen
 
Glaube ich mache das nen Tick zu kompliziert.

URLDownloadToFile schaut schon einmal ganz nett aus. Weiß jemand ob der auf den IE aufsetzt ( laut MS mind. IE 3.0 ) und damit auch die Verbindungseinstellungen aus dem Internet Explorer benutzt ( Proxy etc? )

Sven

Daniel Schuhmann 4. Apr 2006 15:07

Re: TWebBrowser Sourcecode auslesen
 
Diese Funktion setzt auf IE3 auf und berücksichtigt die Proxyeinstellungen. Du bekommst hier einen String zurückgeliefert, der den Quellcode enthält. Bitte den Code ganz unten verwenden.

himitsu 4. Apr 2006 15:08

Re: TWebBrowser Sourcecode auslesen
 
Ja, der setzt auf dem IE auf ... im Grunde läder der IE die Datei runter und gibt sie dir dann, außerdem wird (wenn vorhanden) auch gleich die Kopie aus der Browsercache.

DGL-luke 4. Apr 2006 18:31

Re: TWebBrowser Sourcecode auslesen
 
Sollte IdHTTP da nicht auch transparente Resultate liefern?

Sven Janssen 4. Apr 2006 19:24

Re: TWebBrowser Sourcecode auslesen
 
Zitat:

Zitat von DGL-luke
Sollte IdHTTP da nicht auch transparente Resultate liefern?

Wie ich oben schrieb. Ich habe damit extreme Probleme.
Des weiteren ist mir heute aufgefallen das wohl die Indy Komponente nicht unter NT läuft. Zumindestens stürzen alle Programm beim starten ab die auf die Komponente aufsetzen.

Mit URLDownloadToFile habe ich aber auch so meine Probleme. Irgendwie hängt die Funktion auf einigen Rechner komplett, so dass ich das Programm nur noch über den Task Manger beenden kann.

Naja morgen mehr :-D

Mavarik 4. Apr 2006 19:28

Re: TWebBrowser Sourcecode auslesen
 
Versuch doch mal:

Delphi-Quellcode:
var
  h_cachedInternet: HINTERNET;

function GetRawHtml(var web_browser: TWebBrowser): String;
var
  http_handle: HINTERNET;
  buffer: array [0..20] of Char;
  url: String;
  bytes_read: DWORD;
begin
  url := web_browser.LocationURL;
  http_handle := InternetOpenUrl(h_cachedInternet,
    PChar(url),nil,0,INTERNET_FLAG_NO_UI,0);
  if http_handle = nil then
    result := ''
  else
  begin
    //--------------------------------------------------------------
    // Retrieve the URL data. Hopefully this should be straight from
    // the cache because of how the internet connection was defined.
    //--------------------------------------------------------------
    result := '';
    repeat
      InternetReadFile(http_handle,@buffer,Length(buffer),bytes_read);
      result := result + Copy(buffer,1,bytes_read);
    until bytes_read =0;
    InternetCloseHandle(http_handle);
  end;
end;

initialization

//--------------------
// Initialise WinInet.
//--------------------
h_cachedInternet := InternetOpen(PChar(application.title),
  INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,nil,nil,
  INTERNET_FLAG_FROM_CACHE);
Frank :coder:

Zu finden bei Brian Cryer

Sven Janssen 4. Apr 2006 21:22

Re: TWebBrowser Sourcecode auslesen
 
Ja schon gesehen in den Link oben. Ist aber blocking und somit nicht gerade das Gelbe vom Ei.

Mavarik 5. Apr 2006 06:53

Re: TWebBrowser Sourcecode auslesen
 
Zitat:

Zitat von Sven Janssen
Ja schon gesehen in den Link oben. Ist aber blocking und somit nicht gerade das Gelbe vom Ei.

Was auch immer blocking ist?

Ich dachte es ging dir darum, die XML-Source zu lesen!

Frank

Sven Janssen 5. Apr 2006 07:27

Re: TWebBrowser Sourcecode auslesen
 
Naja blocking ist das Gegenteil von non-blocking ;-)
Sprich das Programm hängt im Moment wo ich etwas herunterlade.

Ich teste das mal aus, denn mit UrlDownloadToFile komme ich gerade nicht weiter. Weder meine Callbacks werden ausgeführt noch tut sich irgendetwas in meinem Programm. Es hängt sich komplett auf.

Sven

marabu 5. Apr 2006 07:27

Re: TWebBrowser Sourcecode auslesen
 
Hallo Sven,

Zitat:

Zitat von Sven Janssen
Das Problem ist, das ich eine XML Datei von einem Intranet/Internet Server herunterladen muss und wirklich an den Original XML Code kommen muss. Der XML Code selber wird durch eine HTTP Anfrage generiert. Nun ist der IE (TWebBrowser ) so clever und bereitet den XML Code für die Anzeige auf. Nur leider kann ich damit dann nichts mehr anfangen.

ich kann mir das nur so vorstellen, dass vom Server XML mit client-seitiger Transformation über ein referenziertes XSLT-Skript (xml-stylesheet) ausgeliefert wird. In dem Fall könntest du dir das XML-Dokument einfach so holen:

Delphi-Quellcode:
uses
  MSXML2;

var
  xd: IXMLDOMDocument;

begin
  xd := CoDomDocument.Create;
  xd.async := false;
  if xd.Load('http://server/demo.xml')
    then ShowMessage(xd.xml)
    else ShowMessage('dont''t call us - we call you');
end;
Grüße vom marabu

Sven Janssen 5. Apr 2006 07:29

Re: TWebBrowser Sourcecode auslesen
 
@marabu

Die MSXML2 gibt es nicht unter Delphi6.
Wo könnte man die her bekommen?

Sven

marabu 5. Apr 2006 07:33

Re: TWebBrowser Sourcecode auslesen
 
Du importierst sie einfach:

Code:
tlibimp -Fe- %windir%\system32\msxml4.dll
Anschließend "Komponente installieren".

marabu

Mavarik 5. Apr 2006 07:37

Re: TWebBrowser Sourcecode auslesen
 
Zitat:

Zitat von Sven Janssen
Naja blocking ist das Gegenteil von non-blocking ;-)
Sprich das Programm hängt im Moment wo ich etwas herunterlade.

Ich teste das mal aus, denn mit UrlDownloadToFile komme ich gerade nicht weiter. Weder meine Callbacks werden ausgeführt noch tut sich irgendetwas in meinem Programm. Es hängt sich komplett auf.

Sven

Dann nimm die Procedure doch in einen Thread!

Frank

Sven Janssen 5. Apr 2006 07:56

Re: TWebBrowser Sourcecode auslesen
 
Zitat:

Zitat von marabu
Du importierst sie einfach:

Code:
tlibimp -Fe- %windir%\system32\msxml4.dll
Anschließend "Komponente installieren".

marabu

Was ist dann mit den Computern auf dem das Programm läuft. Benötigen diese auch die DLL?

Sven

Sven Janssen 5. Apr 2006 08:00

Re: TWebBrowser Sourcecode auslesen
 
@Mavarik

das klappt nun schon ganz gut (danke). Das mit dem Thread werde ich nachher noch machen. Hatte ich total vergessen das ich es auch darüber lösen könnte.
Kennst Du dich etwas besser mit dem WinINET Funktionen aus?
Mir geht es da gerade um http://msdn.microsoft.com/library/de...aavailable.asp
Die gibt mir immer false zurück. Ich würde aber ganz gerne wissen ( zwecks Fortschrittsbalken ) wie groß die Datei ist, die ich herunterlade.

Momentan mache ich das so:
Delphi-Quellcode:
    http_handle := InternetOpenUrl(h_cachedInternet,PChar(url),nil,0,INTERNET_FLAG_NO_UI,0);
    if http_handle <> nil then begin
        InternetQueryDataAvailable(h_cachedInternet,bytes,0,0);
    end;

Hat sich erledigt. Falsches Handle mitgegeben.

Sven

MathiasSimmack 5. Apr 2006 08:12

Re: TWebBrowser Sourcecode auslesen
 
Zitat:

Zitat von Sven Janssen
Was ist dann mit den Computern auf dem das Programm läuft. Benötigen diese auch die DLL?

Ja. Du kannst zwar davon ausgehen, dass die meisten Rechner nun mittlerweile MS-XML 4 installiert haben. Aber besser wäre es, du [dp="DoesXmlExist"]prüfst[/dp] es. Ausliefern darfst du die DLL mit deinem Programm nicht. Wenn, dann nur das Installerpaket, oder du bietest einen Direktlink zu Microsoft an.

marabu 5. Apr 2006 08:54

Re: TWebBrowser Sourcecode auslesen
 
Ich hatte MSXML4 geschrieben, weil ich diese Version im Produktiveinsatz habe. Wahrscheinlich ist jede Version ausreichend - und eine ist auf jedem Wintel-Rechner seit Win95.

marabu

Hoschie 27. Feb 2008 08:30

Re: TWebBrowser Sourcecode auslesen
 
Moin Moin,

ich wollte mal nachfragen, ob es zu dem Kernproblem schon eine praktikable Lösung gibt. Auch ich habe dieses Problem : Ich habe mit der TWebBrowser Komponente einen Browser erstellt, den ich nach meinen Wünschen automatisieren kann. Das läuft auch soweit. Mein Problem ist eben, dass ich auch wie der Ersteller dieses Posts den XML-Code benötige, der Browser aber über
Delphi-Quellcode:
...body.innerHtml
nur das generierte HTML in die Textdatei schreibt.

Im Endeffekt brauche ich nur die gleiche Funktion wie "rechte Maustaste->Quelltext anzeigen", denn da zeigt auch der IE den XML Text an.

Danke.
Hoschie

marabu 27. Feb 2008 10:25

Re: TWebBrowser Sourcecode auslesen
 
Hallo Hoschie,

an den XML-Source des WebBrowsers kommst du per late binding:

Delphi-Quellcode:
var
  ws: WideString;
  doc: OleVariant;
begin
  doc := WebBrowser.Document;
  ws := doc.XMLDocument.XML;
  ShowMessage(ws);
end;
Freundliche Grüße

Hoschie 27. Feb 2008 12:39

Re: TWebBrowser Sourcecode auslesen
 
Super, danke.

Das werde ich gleich nachher mal ausprobieren. Ich darf das aber auch erst aufrufen, wenn die Seite fertig geladen wurde oder ?

Gruß
Hoschie

marabu 27. Feb 2008 12:42

Re: TWebBrowser Sourcecode auslesen
 
Besser ist das.

Hoschie 29. Feb 2008 07:14

Re: TWebBrowser Sourcecode auslesen
 
Moin,

habs getestet und es funktioniert einwandfrei.

Vielen Dank,

Hoschie


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.

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