Consegui fazer o sistema de recuperação de xml funcionar.
Utilizei o código gerado pelo botão "Preparar documento para impressão".
Com esta opção é gerado a nota fiscal eletrônica com os campos em formato texto.
Modifiquei o evento WebBrowser1DocumentComplete para:
if WebBrowser1.LocationURL = 'http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=' then
begin
for k := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do
begin
Source := WebBrowser1.OleObject.Document.Images.Item(k).Src;
if (Source = 'http://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image') then
begin
dest := ExtractFilePath(ParamStr(0)) + 'captcha.gif';
DownloadFile(Source, dest);
end;
end;
Image1.Picture.LoadFromFile(dest);
btnPegarHTML.Enabled := True;
end
else if WebBrowser1.LocationURL = 'https://www.nfe.fazenda.gov.br/portal/visualizacaoNFe/completa/Default.aspx' then
begin
WebBrowser1.Navigate('https://www.nfe.fazenda.gov.br/PORTAL/visualizacaoNFe/completa/impressao.aspx');
end
else if WebBrowser1.LocationURL = 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8=' then
begin
Memo2.Lines.Clear;
//
WebBrowser1.Navigate('http://www.nfe.fazenda.gov.br/portal/consultaImpressao.aspx?tipoConsulta=completa');
end
else if WebBrowser1.LocationURL = 'http://www.nfe.fazenda.gov.br/portal/consultaImpressao.aspx?tipoConsulta=completa' then
begin
textoNFe := WebBrowser1.Document as IHTMLDocument2;
repeat
Application.ProcessMessages;
until Assigned(textoNFe.body);
Memo2.Lines.Text := StripHTML(textoNFe.body.innerHTML);
Memo2.Lines.Text := StringReplace(Memo2.Lines.Text,' ','',[rfReplaceAll, rfIgnoreCase]);
i := 0;
while i < memo2.Lines.Count-1 do
begin
if trim(Memo2.Lines) = '' then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('function',Memo2.lines)>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('document',Memo2.lines)>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('{',Memo2.lines)>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('}',Memo2.lines)>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
i := i + 1;
end;
Image1.Picture := nil;
btnGerarXML.Enabled := True;
GeraXml;
end
else if WebBrowser1.LocationURL = 'https://www.nfe.fazenda.gov.br/portal/inexistente_completa.aspx' then
begin
MessageDlg('NF-e INEXISTENTE na base nacional, favor consultar esta NF-e no site da SEFAZ de origem.',mtError,[mbok],0);
Image1.Picture := nil;
btnGerarXML.Enabled := True;
btnNovaConsulta.Enabled := True;
end
else
begin
MessageDlg('Erro carregando URL: '+WebBrowser1.LocationURL,mtError,[mbok],0);
Image1.Picture := nil;
btnGerarXML.Enabled := True;
btnNovaConsulta.Enabled := True;
end;
//////////////////////////////
Depois é preciso alterar o código para buscar os campos corretos do emitente.