![]() |
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 ![]() 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 |
Re: TWebBrowser Sourcecode auslesen
servus sven,
ich hoffe ich habe dich richtig verstanden und denke das dir das weiterhelfen könnte: ![]() mfg Jonny |
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 |
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 |
Re: TWebBrowser Sourcecode auslesen
![]() |
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.
|
Re: TWebBrowser Sourcecode auslesen
Sollte IdHTTP da nicht auch transparente Resultate liefern?
|
Re: TWebBrowser Sourcecode auslesen
Zitat:
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 |
Re: TWebBrowser Sourcecode auslesen
Versuch doch mal:
Delphi-Quellcode:
Frank :coder:
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); Zu finden bei ![]() |
Re: TWebBrowser Sourcecode auslesen
Ja schon gesehen in den Link oben. Ist aber blocking und somit nicht gerade das Gelbe vom Ei.
|
Re: TWebBrowser Sourcecode auslesen
Zitat:
Ich dachte es ging dir darum, die XML-Source zu lesen! Frank |
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 |
Re: TWebBrowser Sourcecode auslesen
Hallo Sven,
Zitat:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: TWebBrowser Sourcecode auslesen
@marabu
Die MSXML2 gibt es nicht unter Delphi6. Wo könnte man die her bekommen? Sven |
Re: TWebBrowser Sourcecode auslesen
Du importierst sie einfach:
Code:
Anschließend "Komponente installieren".
tlibimp -Fe- %windir%\system32\msxml4.dll
marabu |
Re: TWebBrowser Sourcecode auslesen
Zitat:
Frank |
Re: TWebBrowser Sourcecode auslesen
Zitat:
Sven |
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 ![]() 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 |
Re: TWebBrowser Sourcecode auslesen
Zitat:
|
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 |
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:
nur das generierte HTML in die Textdatei schreibt.
...body.innerHtml
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 |
Re: TWebBrowser Sourcecode auslesen
Hallo Hoschie,
an den XML-Source des WebBrowsers kommst du per late binding:
Delphi-Quellcode:
Freundliche Grüße
var
ws: WideString; doc: OleVariant; begin doc := WebBrowser.Document; ws := doc.XMLDocument.XML; ShowMessage(ws); end; |
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 |
Re: TWebBrowser Sourcecode auslesen
Besser ist das.
|
Re: TWebBrowser Sourcecode auslesen
Moin,
habs getestet und es funktioniert einwandfrei. Vielen Dank, Hoschie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz