Fórum Novamente... como salvar em HTML #214910
17/02/2004
0
(solução do Beppe para limpar os <tag> de um documento HTML)
.................... inicio ..........................
Taqui...
Código:
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.
............................... fim .........................................
estou tentando utilizar esta função, mas retorna a seguinte mensagem de erro: ´Access violation ata address 00479221 in moule ´sile.exe´. Read of addres 000000000.
Na verdade este outro procedimento acontece o mesmo erro:
(outra resposta do Beppe para salvar arquivo HTML, sem formata-lo)
............................. inicio ..............................
Enviada: Seg Dez 15, 2003 3:16 pm Assunto:
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;
…………………. Fim …………………………….
Já percebi que estes procedimentos não dão o mesmo erro caso seja chamado por um objeto separado, com um botão, mas no meu caso estou chamando da seguinte maneira:
(função utilizada por mim, usando a função passada pelo Beppe no início deste documento)
procedure TForm1.Button1Click(Sender: TObject);
VAR
Nome,dia,mes,ano:string;
begin
Nome:= ´Adilson Portilho´;
Dia:=´01´;
Mes:=´10´;
Ano:=´1977´;
WebBrowser1.Navigate(´http://www.tre-mg.gov.br/eleitor/consulta.php?nome=´+NOME+´&dia=´+DIA+´&mes=´+MES+´&ano=´+ANO);
Memo1.Lines.Add(GetPlainTextOnBrowser(WebBrowser1)); // neste local acontece o erro especificado no inicio deste texto.
end;
Bem neste momento executa a linha MEMO1.LINES.ADD... o erro:
´Access violation ata address 00479221 in moule ´sile.exe´. Read of addres 000000000.
E o que é interessante é que não da erro quando coloco esta linha num procedimento separado da chamada webbrowser1.... , sei que eh problema de leitura, mas presciso executar o salvamento de várias paginas num loop, e não posso para enquanto não cabar, são mais ou menos 100.000 páginas!!!!,
Alguém sabe como resolver este problema!!!! Ufa acho que fui claro, tomara...
[color=green:1b1acd464c][b:1b1acd464c]Título editado, maiúsculas[/b:1b1acd464c][/color:1b1acd464c]
Oratis
Curtir tópico
+ 0Posts
17/02/2004
Beppe
function GetPlainTextOnBrowser2(WebBrowser: TWebBrowser): WideString; var Doc: IHTMLDocument2; begin repeat Application.ProcessMessages; until Assigned(WebBrowser.Document); Doc := WebBrowser.Document as IHTMLDocument2; repeat Application.ProcessMessages; until Assigned(Doc.body); Result := Doc.body.innerText; end;
Coloquei mais um loop, deve funcionar agora para o seu caso.
Gostei + 0
18/02/2004
Oratis
E OBRIGADO POR COMPARTILHAR CONOSCO ESTE CONHECIMENTO!!!!!
:lol:
Gostei + 0
18/02/2004
Beppe
Mas não fala assim que eu fico ´vegonhado´ rs... :oops:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)