Fórum Novamente... como salvar em HTML #214910

17/02/2004

0

Bem já procurei no FORUM do Clube Delphi, e depois de muito procurar sobre como salvar arquivos HTML, li várias respostas sua iguais, a respeito deste problema, então apliquei as soluções do Beppe(que aliás, são incríveis!!!!!) que se encaixavam perfeitamente no meu problema, mas ainda sim encontrei um problema que especifico abaixo.

(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

Oratis

Responder

Posts

17/02/2004

Beppe

Aquela parte na exceção que diz ´read of address 00000000´, significa que nil está sendo lido, além do fato de que o webbrowser carrega as páginas assincronamente, o erro pode ser complicado de tratar.

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.


Responder

Gostei + 0

18/02/2004

Oratis

Caramba!!! vc realmente é bom neste negocio, meus parabéns não há duvida que é um excelente programado.

E OBRIGADO POR COMPARTILHAR CONOSCO ESTE CONHECIMENTO!!!!!
:lol:


Responder

Gostei + 0

18/02/2004

Beppe

Esse sim é um cara que reconhece o talento das pessoas... :lol:

Mas não fala assim que eu fico ´vegonhado´ rs... :oops:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar