¿Cómo puedo obtener el código fuente del componente WebBrowser?¿Cómo puedo obtener el código fuente HTML de TWebBrowser
Quiero obtener el código fuente de la página activa en el componente WebBrowser y escribirlo en un componente Memo.
Gracias.
¿Cómo puedo obtener el código fuente del componente WebBrowser?¿Cómo puedo obtener el código fuente HTML de TWebBrowser
Quiero obtener el código fuente de la página activa en el componente WebBrowser y escribirlo en un componente Memo.
Gracias.
Puede utilizar la interfaz IPersistStreamInit
y el método save para almacenar el contenido del navegador web en una secuencia.
Uses
ActiveX;
function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
var
LStream: TStringStream;
Stream : IStream;
LPersistStreamInit : IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then exit;
LStream := TStringStream.Create('');
try
LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
Stream := TStreamAdapter.Create(LStream,soReference);
LPersistStreamInit.Save(Stream,true);
result := LStream.DataString;
finally
LStream.Free();
end;
end;
Esto se ha preguntado y respondido muchas veces en los foros de Embarcadero, con muchos ejemplos de códigos publicados. Busque los archivos.
El quid de la cuestión es que Navigate()
a la URL deseada y esperar a que el evento OnDocumentComplete
al fuego, a continuación, QueryInterface()
la propiedad Document
para la interfaz IPersistStreamInit
y llamar a su método save()
. Cree una instancia de objeto TStream
, como TMemoryStream
, envuélvala en un objeto TStreamAdapter
y pase el adaptador a save()
. Luego puede cargar el TStream
en el TMemo
según sea necesario.
Eso funciona bien también:
function GetHTML(w: TWebBrowser): String;
Var
e: IHTMLElement;
begin
Result := '';
if Assigned(w.Document) then
begin
e := (w.Document as IHTMLDocument2).body;
while e.parentElement <> nil do
begin
e := e.parentElement;
end;
Result := e.outerHTML;
end;
end;
incorrecto esto te dará la representación DOM del elemento 'document'. No será el código fuente HTML. – kobik
Sí, tiene razón, lo estaba usando solo para analizar algunos datos disponibles en la fuente html y el uso de la representación DOM estaba bien para eso. –
Votaré tu respuesta, es útil en cualquier caso. También utilizo un método similar en nuestra araña para manipular/analizar HTML desde un sitio web extranjero. – kobik
funciona. muchas gracias. – Leadri
¿Cómo podemos hacer que funcione de la manera REVERSA: SetWebBrowserHTML, reinyectando el código previamente extraído de nuevo a WebBrowser (o TEmbeddedWebBrowser). Imagino la siguiente situación: un componente memo obtiene el código fuente HTML con GetWebBrowserHTML, luego el usuario realiza algunos cambios en el código fuente, luego el código fuente cambiado se vuelve a inyectar en WebBrowser. ¡Esto sería un buen editor de HTML con una vista previa en tiempo real en el navegador! – user1580348
Mejor: 'LStream: = TStringStream.Create ('', TEncoding.UTF8);' – user1580348