Recuperar el código completo de una página

4580 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:



delphi
  1. procedure RecuperarContenido1(CurrentWB: TWebBrowser; var Code: String);
  2. begin
  3.   // recuperación de todo el código
  4.   Code := (CurrentWB.Document as IHTMLDocument3).documentElement.outerhtml;
  5. 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
  1. function RecuperarContenido2(WB: TWebBrowser): String;
  2. var
  3.   PersistStream: IPersistStreamInit;
  4.   Stream: IStream;
  5.   StrStream: TStringStream;
  6. begin
  7.   // comprobamos que haya alguna página cargada
  8.   if not Assigned(WB.Document) then
  9.   begin
  10.     Result := '';
  11.     Exit;
  12.   end;
  13.  
  14.   // TWebBrowser.Document implementa las funcionalidades de la interfaz
  15.   // IPersitStream. Pedimos el accedo.
  16.   PersistStream := WB.Document as IPersistStreamInit;
  17.  
  18.   // creación de un flujo de carácteres (vacÃo al inicio)
  19.   StrStream := TStringStream.Create('');
  20.   try
  21.     // vreamos una instancia de TStreamAdapter pidiendo las funcionalidades
  22.     // de la interfaz IStream. Será nuestro "puente" entre el stream de
  23.     // carácteres y el documento HTML.
  24.     Stream := TStreamAdapter.Create(StrStream, soReference) as IStream;
  25.     // intentamos guardar el documento en el stream creado
  26.     if Failed(PersistStream.Save(Stream, True)) then
  27.       Result := ''
  28.     else
  29.     begin
  30.       // si ha funcionado bien, ponemos el stream de carácteres al inicio
  31.       StrStream.Position := 0;
  32.       // y devolvemos su contenido
  33.       Result := StrStream.Read(StrStream.Size);
  34.     end;
  35.   finally
  36.     StrStream.Free;
  37.   end;
  38. end;



Un ejemplo de uso de esta función podrÃa ser:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   Memo1.Lines.Text := RecuperarContenido2(WebBrowser1);
  4. end;



IHTMLDocument está definido en MSHTML.pas
IPersistStreamInit está definido en ActiveX.pas
IStream está definido en IStreams