Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen! (https://www.delphipraxis.net/114791-%5Bprob-%5Dfunktion-den-html-code-aus-twebbrowser-zu-lesen.html)

buster55 31. Mai 2008 13:40


[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:
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.
ich bin dankbar für jede produktive antwort ;)
lg buster :cheers:

Die Muhkuh 31. Mai 2008 13:44

Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
 
Hi und herzlich Willkommen! :dp:

Zitat:

Zitat von buster55
allerdings spuckt mir delphi sobald ich den knopf drücke einen für mich unverständlichen fehler aus und das programm bricht ab !

Welchen Fehler denn? Index out of bounds?

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]

Andreas L. 31. Mai 2008 13:45

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:
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;
Damit brauchst du weder einen WebBrowser noch ein RichEdit und die Anwendung sollte schneller und auch kleiner sein :mrgreen:

buster55 31. Mai 2008 14:16

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

finalr 31. Mai 2008 16:20

Re: [Prob.]Funktion den HTML-Code aus TWebbrowser zu lesen!
 
Hi,

ich würde es so machen:

Delphi-Quellcode:
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;
Nicht vergessen in den Uses "IdHTTP" einzufügen.

Gruss Daniel

buster55 1. Jun 2008 11:24

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 04:54 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