![]() |
[Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
guten tag liebe Delphi-Gemeinde :zwinker:
ich hab gestern abend die idee gehabt spasshalber ein kleines tool zu programmieren das nach eingabe eines downloadlinks auf rapidshare.com sagt ob die datei noch verfügbar ist. dazu habe ich zunächst einmal die funktion zu auslesen eines quelltextes im twebbrowser das ganze sollte wiefolgt funktioneren Button wird gedrückt ===> eingegebener link wird (invisible) im twebbrowser geöffenet ===> Quelltext wird gelsen (das funktioniert auch) ===> der q.-text kommt in ne richedit ===> mithilfe einer if bedingung wird kontrolliert ob in einer bestimmten zeile des quelltextes das wort 'Fehler' vorkommt (das tut es nämlich wenn bei rapidshare die datei weg ist) ===> und je nachdem wird in nem label das ergebniss präsentiert. allerdings spuckt mir delphi sobald ich den knopf drücke einen für mich unverständlichen fehler aus und das programm bricht ab ! WARUM was stimmt im quelltext nicht:
Delphi-Quellcode:
ich bin dankbar für jede produktive antwort ;)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, HTTPApp, StdCtrls, ActiveX, ComCtrls; type TForm1 = class(TForm) WebDispatcher1: TWebDispatcher; WebBrowser1: TWebBrowser; Button2: TButton; Richedit1: TRichEdit; Label1: TLabel; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var Fehler,res : string; var i : integer; implementation {$R *.dfm} ///////////////////////////////////// // CODE AUSLESEN function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end; //////////////////////////////////// procedure TForm1.FormCreate(Sender: TObject); begin richedit1.Text := ''; end; procedure TForm1.Button2Click(Sender: TObject); var link : string; begin link := edit1.text; webbrowser1.Navigate(link); WB_GetHTMLCode(Webbrowser1, richedit1.Lines); if richedit1.Lines[70] = '<center><h2>Ein Fehler ist aufgetreten:</h2> <font color="red">' then begin label1.caption := 'DOWN!!!' ; end end; end. lg buster :cheers: |
Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
Hi und herzlich Willkommen! :dp:
Zitat:
Desweiteren würde ich nicht auf die bestimmte Zeile zugreifen, sondern per Pos nach "Ein Fehler ist aufgetreten" suchen. [edit] Ok, herzlich Willkommen passt nicht ganz, aber dafür ist es der erste Beitrag :stupid: [/edit] |
Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
Welche Fehlermeldung kommt denn?
Ein verstecktes RichEdit und WebBrowser nehmen ist aber nicht die feine Art. Zum downloaden einer Datei kannst du IdHttp in Verbindung mit der Routine Get verwenden. Dann könnte dein Code ungefähr so aussehen:
Delphi-Quellcode:
Damit brauchst du weder einen WebBrowser noch ein RichEdit und die Anwendung sollte schneller und auch kleiner sein :mrgreen:
var
Downloader: TIdHTTP; tmpstr: String; begin Downloader := TIdHTTP.Create; //möglicherweise wird noch ein Parameter erwartet, hab ich nicht im Kopf ;-) tmpstr := Downloader.Get(edi1.text); //dies läd die im edit angegebene seite runter if pos('Ein Fehler ist aufgetreten!', tmpstr) > 0 then //Schauen ob der Fehlerstring in der Datei vorhanden ist ShowMessage('Link nicht verfügbar!'); Downloader.Free; //ganz wichtig: Speicher freigeben end; |
Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
dank für eure flotten antworten :)
dumm von mir die fehlermeldung nicht mit zu senden :drunken: aber büdde schön : ____BEGIN____ --------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00466583 in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- ____END____ Delphi 7 Enterprise [engl.] @andreas: ja sicher nicht die feine art aber wie gesagft es ist nicht mehr und nicht weniger als ein 'Just 4 Fun' Projekt' lg buster |
Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
Hi,
ich würde es so machen:
Delphi-Quellcode:
Nicht vergessen in den Uses "IdHTTP" einzufügen.
var URL, Quelltext, Status: String;
i: Integer; HTTP: TIDHTTP; begin URL := 'http://www.google.de'; Try HTTP := TIDHTTP.Create(NIL); HTTP.HandleRedirects := True; Repeat Try Quelltext := HTTP.Get(URL); Except ON E:Exception DO begin case HTTP.ResponseCode of 400: Status := 'Bad Request'; 403: Status := 'Forbidden'; 404: Status := 'Not Found'; end; ShowMessage('Quelltext konnte nicht ausgelesen werden.' + #10#13 + 'Fehler ' + IntToStr(HTTP.ResponseCode) + ' / ' + Status); end; End; i := i + 1; Until (Quelltext <> '') or (i = 5); Finally HTTP.Free; End; if Quelltext <> '' then begin // Hier kann man nun mit den Quelltext arbeiten... end; Gruss Daniel |
Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
HEUL!
ich könnt mich selbst ohrefeigen für meine inkompetenz. delphi gibt sich natürlich als engländer aus wodruch rapidshare nicht den deutschen quelltext anzeigt sondern den englischen also muss man nicht nach 'Fehler' suchen sondern nach 'error' :( :( und weil meine erste version so unsauber programmiert war ist delphi abgeschmiert naja aus fehlern lernt man :mrgreen: danke für alles :wall: :wall: :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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