Recuperar el código completo de una página
Artículo por Club Developers · 13 marzo 2006
5624 vistas
Con el fin de analizar el contenido de una página web, puede ser interesante recuperar todo el código (cabecera HTML incluida). Para ello tenemos dos métodos.
El primero (y más sencillo) emplea la interfaz IHTMLDocument3:
La interfaz IHTMLDocument3 sólo está disponible a partir de la versión 5 de Internet Explorer.
Si no disponemos de esta versión del navegador, tenemos un método alternativo para recuperar todo el código de la página.
Aquà mostramos una función que devolverá en un string el código completo.
Un ejemplo de uso de esta función podrÃa ser:
IHTMLDocument está definido en MSHTML.pas
IPersistStreamInit está definido en ActiveX.pas
IStream está definido en IStreams
El primero (y más sencillo) emplea la interfaz IHTMLDocument3:
delphi
procedure RecuperarContenido1(CurrentWB: TWebBrowser; var Code: String); begin // recuperación de todo el código Code := (CurrentWB.Document as IHTMLDocument3).documentElement.outerhtml; end;
La interfaz IHTMLDocument3 sólo está disponible a partir de la versión 5 de Internet Explorer.
Si no disponemos de esta versión del navegador, tenemos un método alternativo para recuperar todo el código de la página.
Aquà mostramos una función que devolverá en un string el código completo.
delphi
function RecuperarContenido2(WB: TWebBrowser): String; var PersistStream: IPersistStreamInit; Stream: IStream; StrStream: TStringStream; begin // comprobamos que haya alguna página cargada if not Assigned(WB.Document) then begin Result := ''; Exit; end; // TWebBrowser.Document implementa las funcionalidades de la interfaz // IPersitStream. Pedimos el accedo. PersistStream := WB.Document as IPersistStreamInit; // creación de un flujo de carácteres (vacÃo al inicio) StrStream := TStringStream.Create(''); try // vreamos una instancia de TStreamAdapter pidiendo las funcionalidades // de la interfaz IStream. Será nuestro "puente" entre el stream de // carácteres y el documento HTML. Stream := TStreamAdapter.Create(StrStream, soReference) as IStream; // intentamos guardar el documento en el stream creado if Failed(PersistStream.Save(Stream, True)) then Result := '' else begin // si ha funcionado bien, ponemos el stream de carácteres al inicio StrStream.Position := 0; // y devolvemos su contenido Result := StrStream.Read(StrStream.Size); end; finally StrStream.Free; end; end;
Un ejemplo de uso de esta función podrÃa ser:
delphi
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := RecuperarContenido2(WebBrowser1); end;
IHTMLDocument está definido en MSHTML.pas
IPersistStreamInit está definido en ActiveX.pas
IStream está definido en IStreams


