TWebbrowser - Quellcode auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ja ich weiß gibt schon eine Menge Threads dazu, aber ich bekomm es einfach nicht 100% hin. Also was ich will: 1x Edit Feld, bei dem man die URL eingibt 1x Memo, hier wird der Quellcode angezeigt 1x Button, aktualisieren des Quellcodes. Mein Programm:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Classes, Forms, ActiveX, ComObj, SysUtils, SHDocVw_tlb, Controls, StdCtrls, Dialogs; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form1: TForm1; Test: TWebBrowser; implementation {$R *.dfm} function WB_GetHTMLCode(WebBrowser: TWebBrowser): string; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; bool: boolean; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; bool := Succeeded(ps.Save(sa, True)); if bool then Result:=Result +#10+ ss.Datastring; finally ss.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin test.Navigate(edit1.text); memo1.Lines.Text:=wb_gethtmlcode(test); end; procedure TForm1.FormCreate(Sender: TObject); begin Test:=TWebBrowser.Create(self); end; end. Also meine Probleme: 1) Beim ersten mal auf den Button drücken kommt ein Laufzeitfehler, keine Ahnung warum :-( Beim zweiten mal drücken Funktioniert es 2) Es wird nicht immer der vollständige Quellcode ausgelesen, sondern mittendrin hört es auf. An was kann das liegen? Ich habe es auch schon mit widestring ausprobiert 3) Wenn ich eine neue Adresse im Edit Feld eingebe muss ich immer 2x am Button drücken, bis der Quellcode aktualisiert wird, warum?? Ich habe mal das ganze Projekt + exe im Anhang gegeben, damit ihr mein Problem vlt besser nachvollziehen könnt.. |
Re: TWebbrowser - Quellcode auslesen
Vielleicht solltest du nach dem wechseln auf eine Seite darauf warten, das der Browser fertig navigiert ist und die Seite vollständig geladen hat.
|
Re: TWebbrowser - Quellcode auslesen
Hallo,
ich habe mit Twebbrowser noch nie gearbeitet sondern immer nur mit INDY. Wie warte ich bis er fertig ist? Bzw, wie frag ich ab ob die Seite komplett geladen ist? |
Re: TWebbrowser - Quellcode auslesen
Zitat:
Delphi-Quellcode:
repeat
Application.ProcessMessages; until WebBrowser1.ReadyState >= READYSTATE_COMPLETE; |
Re: TWebbrowser - Quellcode auslesen
Hallo,
hmm, bei mir wird test.ReadyState nie READYSTATE_COMPLETE (=4) sondern ist gleich nach dem aufruf READYSTATE_LOADING (=1) (is klar) und dann bleibt es aber bei READYSTATE_INTERACTIVE (=3).... an was kann das liegen? Allerdings habe ich mit
Delphi-Quellcode:
Meine Problemme 1 und 3 wegbekommen.
repeat
Application.ProcessMessages; until test.ReadyState = 3; Jetzt hab ich nur noch das Problem, das zu lange Quellcodes einfach abgeschnitten werden |
Re: TWebbrowser - Quellcode auslesen
Keiner eine Ahnung warum der Quellcode abgeschnitten wird?
Also ich verwende jetzt diese Funktion
Delphi-Quellcode:
Und sie Funktioniert eigentlich, allerdings wenn ich eine Website eingebe, mit einen langen HTML Quellcode dann werden trotzdem nur ca.
function WB_GetHTMLCode(WebBrowser: TWebBrowser): widestring;
var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; bool: boolean; begin // Warten bis Quellcode fertig heruntergeladen ist repeat Application.ProcessMessages; until WebBrowser.ReadyState >= 3; ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; bool := Succeeded(ps.Save(sa, True)); if bool then Result:=ss.Datastring; finally ss.Free; end; end; 4000 zeichen zurückgegeben, warum? |
Re: TWebbrowser - Quellcode auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hello,
ich bin jetzt echt am verzweifeln, jetzt auch schon wieder eine Stunde lang am Quellcode herumprobiert :-( Ich habe noch immer das gleiche Problem: Es wird nicht der komplette Quellcode angezeigt, sondern mittendrin wird er abgeschnitten, und bis jetzt habe ich keine Ahnung an was das liegt :-( Ich habe mal mein ganzes Projekt mit Exe raufgeladen, vlt findet wer den Fehler. Es ist eigentlich eh ein recht kurzer Quellcode, nur leider muss ich da irgendetwas übersehen... |
Re: TWebbrowser - Quellcode auslesen
WideString hat ca. ~2^30 maximale Anzahl an Zeichen. Daher dürfte es wohl nicht kommen :)
Edit: Aber vielleicht kann das Memo nicht mehr zeichen darstellen? Das könnte ich mir schon eher vorstellen ... |
Re: TWebbrowser - Quellcode auslesen
Hallo,
habe ich beides schon ausprobiert, geht werder mit widestring, noch ist das memo voll, da ich nacher im memo noch was reinschreiben kann. |
Re: TWebbrowser - Quellcode auslesen
Lass dir mal die Größe des String-Streams anzeigen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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