consegui com o codigo abaixo
tem que ter o certificado da empresa
vai abrir a janela do IE
digite o captch
confirme o certificado
mande salvar o xml
o IE salva na pasta do usuario.
procedure TForm1.Button7Click(Sender: TObject);
Var
mUsuario,sArquivo:string;
Size1 : DWord;
pCompName : array [0..MAX_COMPUTERNAME_LENGTH] of char;
var
FormItem: Variant;
FieldA,Field: Variant;
F,FieldName: String;
X,A,T,I,J: Integer;
bEsperandoDown:Boolean;
sChaveNfe,sUsuario:String;
begin
Try
Size1 := SizeOf(pCompName);
GetComputerName(pCompName, Size1);
///cOMPUTADOR := pCompName;
GetUserName(pCompName,Size1);
sUsuario := pCompName;
sChaveNfe := '35111202078313000198550010000087361405008687';
sArquivo := 'C:\Users\'+sUsuario+'\Downloads\'+sChaveNfe+'.xml';
IEApp := CreateOLEObject('InternetExplorer.Application');
IEApp.visible := true;
IEApp.Top := 0;
IEApp.Left := 0;
// IEApp.Width := Screen.Width;
IEApp.Height := Screen.Height;
IEApp.Navigate('http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=');
repeat
Application.ProcessMessages;
until (IEApp.ReadyState >= READYSTATE_COMPLETE);
repeat
Application.ProcessMessages;
until (IEApp.ReadyState >= READYSTATE_COMPLETE);
if FileExists(sArquivo) then
DeleteFile(sarquivo);
T:=0;
while True do
BEGIN
Memo1.Lines.Clear;
T:= T+1;
if T>300 then
BREAK;
if FileExists(sArquivo) then
BREAK;
Try
FormItem := IEApp.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
if FileExists(sArquivo) then
BREAK;
//Identifica o campo e seu nome no formulário
Field := FormItem.Item(j);
FieldName := Field.Name;
Memo1.Lines.Add(FieldName);
if FieldName = 'ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta' then // nome do input para o campo CNPJ
bEGIN
Field.Value := sChaveNfe;
end
else
Begin
if FieldName = 'ctl00$ContentPlaceHolder1$btnDownload' then // nome do input para o campo CNPJ
begin
repeat
Application.ProcessMessages;
until (IEApp.ReadyState >= READYSTATE_COMPLETE);
IEApp.Document.all.Item('ctl00$ContentPlaceHolder1$btnDownload', 0).click;
repeat
Application.ProcessMessages;
until (IEApp.ReadyState >= READYSTATE_COMPLETE);
while (X<30) do
begin
Sleep(100);
bEsperandoDown:=false;
for a := 0 to FormItem.Length - 1 do
begin
Fielda := FormItem.Item(j);
F := Fielda.Name;
if F = 'ctl00$ContentPlaceHolder1$btnDownload' then // nome do input para o campo CNPJ
Begin
bEsperandoDown:=true;
End;
end;
if not bEsperandoDown then
break ;
X := X+1;
Application.ProcessMessages;
if FileExists(sArquivo) then
begin
BREAK;
end;
end;
end
else
Begin
if FieldName = 'ctl00$ContentPlaceHolder1$btnNovaConsulta' then // nome do input para o campo CNPJ
begin
IEApp.Document.all.Item('ctl00$ContentPlaceHolder1$btnNovaConsulta', 0).click;
end;
End;
end;
end;
except
try
IEApp.Document.all.Item('ctl00$ContentPlaceHolder1$btnNovaConsulta', 0).click;
except
ShowMessage('erro');
IEApp.Navigate('http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=');
end;
End;
repeat
Application.ProcessMessages;
if FileExists(sarquivo) then
break;
until (IEApp.ReadyState >= READYSTATE_COMPLETE);
Sleep(100);
END;
Finally
End;
IEApp.Quit;
Memo1.Lines.LoadFromFile(sarquivo);
end;