Recuperar el código completo de una página
Artículo por Club Developers · 13 marzo 2006
4875 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