Como salvar arquivos html

Delphi

15/12/2003

Eu tenho alguns arquivos no formato html e gostaria de salvar só o texto formatado num banco de dados.
Já abri o arquivo com o componente WebBrowser da paleta Internet. Mas não sei como salvar para um banco de dados. Tentei achar alguma função como:
WebBrowser1.selectall e WebBrowser1.copy e depois memo1.paste; ou
WebBrowser1.savetofile(´c:\teste.txt´);
Mas não existe nada parecido. Não posso fazer na unha pelo IE, pois são centenas de arquivos html. Tenho que salvar sem aqueles caracteres de controles das paginas html.
Alguém tem alguma ideia de como posso fazer?

[ ]´s


Ivonei

Ivonei

Curtidas 0

Respostas

Beppe

Beppe

15/12/2003

procedure WebSaveToFile(WebBrowser: TWebBrowser; const Filename: String); 
var 
  StrInit: IPersistStreamInit; 
begin 
  if Succeeded(WebBrowser.Document.QueryInterface(IPersistStreamInit, StrInit)) then 
    StrInit.Save(TStreamAdapter.Create(TFileStream.Create(Filename, fmCreate), soOwned), False); 
end;



GOSTEI 0
Ivonei

Ivonei

15/12/2003

procedure WebSaveToFile(WebBrowser: TWebBrowser; const Filename: String); 
var 
  StrInit: IPersistStreamInit; 
begin 
  if Succeeded(WebBrowser.Document.QueryInterface(IPersistStreamInit, StrInit)) then 
    StrInit.Save(TStreamAdapter.Create(TFileStream.Create(Filename, fmCreate), soOwned), False); 
end;


Olá Ataliba

Obrigado por responder.
Tentei usar, mas diz o seguinte:
[Error] WebDemoF.pas(47): Undeclared identifier: ´IPersistStreamInit´

Qual unit devo declarar?
Devo usar assim? : WebSaveToFile(WebBrowser, ´teste.txt´);


GOSTEI 0
Beppe

Beppe

15/12/2003

0) A unit é ActiveX.

1) Está certo como chamou.


GOSTEI 0
Ivonei

Ivonei

15/12/2003

0) A unit é ActiveX. 1) Está certo como chamou.


Funcionou, mas infelizmente não é o que preciso. :cry:
[b:e819d21849]Ele salva assim:[/b:e819d21849]
<HTML>
<HEAD><TITLE>Padrão</TITLE></HEAD>
<BODY>
<H2>Bem-vindo à WebDemo</h2>
<hr>
<h3>Este é o programa WebDemo do livro: <br>
<i>´Dominando o Delphi 5 - A Bíblia´</i>, escrito por Marco Cant&</h3>
</BODY></HTML>

[b:e819d21849]Preciso que salve assim:[/b:e819d21849]
Bem-vindo à WebDemo
Este é o programa WebDemo do livro:
´Dominando o Delphi 5 - A Bíblia´, escrito por Marco Cantù

Se souber como...
Obrigado mesmo assim. :roll:


GOSTEI 0
Beppe

Beppe

15/12/2003

Ah, só texto, sem formatação e imagens?
Tem como, sim. Se eu não me engano, tem uma propriedade InnerText no Document do WebBrowser. Assim que puder, posto um códico. :)


GOSTEI 0
Ivonei

Ivonei

15/12/2003

Ah, só texto, sem formatação e imagens? Tem como, sim. Se eu não me engano, tem uma propriedade InnerText no Document do WebBrowser. Assim que puder, posto um códico. :)


Beleza. Vou dar uma olhada. :)
Mas se você puder mandar um código é melhor, porque pode ser que eu não descubra nada. :lol:

Até +


GOSTEI 0
Beppe

Beppe

15/12/2003

Taqui...

function GetPlainTextOnBrowser(WebBrowser: TWebBrowser): WideString;
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser.Document as IHTMLDocument2;
  repeat
    Application.ProcessMessages;
  until Assigned(Doc.body);
  Result := Doc.body.innerText;
end;


Aquele loop geralmente não seria necessário, mas pelo que percebi no seu caso, ele é sim. Isso é porque ao carregar o browser com uma página ele não faz isso imediatamente. Mas pelo testei, o browser termina quando tiver um Document.body.


GOSTEI 0
Beppe

Beppe

15/12/2003

Esqueci de mencionar que a unit MsHtml é usada.


GOSTEI 0
Ivonei

Ivonei

15/12/2003

Taqui...
function GetPlainTextOnBrowser(WebBrowser: TWebBrowser): WideString;
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser.Document as IHTMLDocument2;
  repeat
    Application.ProcessMessages;
  until Assigned(Doc.body);
  Result := Doc.body.innerText;
end;


Ótimo, mas como devo usar? :lol:

No OnClick do Button:
GetPlainTextOnBrowser(WebBrowser1) ???

Depois de procurar e achar a unit MsHtml é que percebi sua outra msg a respeito. :roll:


GOSTEI 0
Beppe

Beppe

15/12/2003

[quote:c0bcd37fe7=´Ataliba´]Taqui...
function GetPlainTextOnBrowser(WebBrowser: TWebBrowser): WideString;
var
  Doc: IHTMLDocument2;
begin
  Doc := WebBrowser.Document as IHTMLDocument2;
  repeat
    Application.ProcessMessages;
  until Assigned(Doc.body);
  Result := Doc.body.innerText;
end;


Ótimo, mas como devo usar? :lol:

No OnClick do Button:
GetPlainTextOnBrowser(WebBrowser1) ???

Depois de procurar e achar a unit MsHtml é que percebi sua outra msg a respeito. :roll:[/quote:c0bcd37fe7]

A função retorna uma string Unicode. Pode carregá-la numa stringlist e salvar num arquivo, falow?


GOSTEI 0
Ivonei

Ivonei

15/12/2003

[color=blue:8ab378bf1a]A função retorna uma string Unicode. Pode carregá-la numa stringlist e salvar num arquivo, falow?[/color:8ab378bf1a]

Achei que seria isto. O problema é como fazer isto. Como carrego o resultado numa stringlist e depois salvo? :?: :(


GOSTEI 0
Ivonei

Ivonei

15/12/2003

[color=blue:9d42d58203]A função retorna uma string Unicode. Pode carregá-la numa stringlist e salvar num arquivo, falow?[/color:9d42d58203] Achei que seria isto. O problema é como fazer isto. Como carrego o resultado numa stringlist e depois salvo? :?: :(


Esquece Ataliba

Já consegui. Estava usando errado, assim:
Memo1.Lines.Add[b:9d42d58203]Strings[/b:9d42d58203](GetPlainTextOnBrowser(WebBrowser1));

Era assim:
Memo1.Lines.Add(GetPlainTextOnBrowser(WebBrowser1));

Muito obrigado pela ajuda. :D


GOSTEI 0
POSTAR