Ir para conteúdo
  • Cadastre-se

dev botao

Componente Consulta CNPJ usando Google reCaptcha


Ver Solução Respondido por Augusto Knirsch,
  • Este tópico foi criado há 2018 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Coders,

Publiquei hoje componente para consultar CNPJ validando o Google reCaptcha que a RFB implantou no site de consulta.

Utilizei alguns códigos do ACBr e espero tê-lo feito citando de forma correta.

O código está em https://github.com/suicidecoder/ConsultaCNPJ/

Não incorporei o componente ao ACBr por acreditar que precise ser refatorado antes que isso ocorra.

Contributions are welcome!

[email protected]

PRINT_2.png

PRINT.png

 

Editado por SuicideCoder
  • Curtir 1
  • Obrigado 2
  • 1 mês depois ...
Postado

Boa tarde,

 

Muito obrigado por disponibilizar esse código, implementei ele no meu sistema e resolveu meus problemas com consulta cnpj. Só que no momento ele só está funcionando em versões do sistema 64 bits, saberia o que pode ser que no 32 não funciona? Fica apenas com erro do javascript, sendo que já atualizei o java, flash player, internet explorer e inseri os registros.

  • Obrigado 1
Postado

Obrigado pela contribuição amigo!

Porém, não consigo fazer o bloco do ReCaptcha aparecer na tela... Qual a explicação para estas chaves de registro, e qual o efeito das mesmas?

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"TesteConsultaCNPJ.exe"=dword:00002af8
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"TesteConsultaCNPJ.exe"=dword:00002af8

Obs: Troquei o 'TesteConsultaCNPJ.exe' pelo nome do aplicativo onde preciso desta funcionalidade.

Seria legal se conseguíssemos isolar este componente para não precisar trazer a página toda na tela... Mas por hora, se funcionar, vai quebrar um galhão.

 

Abraço.

  • Obrigado 1
Postado

@Gabriel Bonzanini:

  • Sobre as chaves: como o componente utiliza o Internet Explorer e precisa emular a versão 8 ou superior, precisamos "dizer" ao Internet Explorer que nossa aplicação quer emular a versão mais recente do IE. A ausência das chaves faz com que o Internet Explorer seja emulado na versão 6, independente da versão instalada. A versão 6 não consegue executar o reCaptcha.
  • Sobre isolar: eu tentei e desisti, a princípio. O motivo é que o reCaptcha tem uma interação complexa com o usuário, fazendo várias requisições aos servidores do Google e tratando inúmeras interações, como cliques nas imagens para no final obter o token captcha.

@Igor Lisboa e @Gabriel Bonzanini:

 

  • Curtir 1
Postado

Bom dia. Obrigado pela atenção.

12 horas atrás, SuicideCoder disse:
  • Sobre as chaves: como o componente utiliza o Internet Explorer e precisa emular a versão 8 ou superior, precisamos "dizer" ao Internet Explorer que nossa aplicação quer emular a versão mais recente do IE. A ausência das chaves faz com que o Internet Explorer seja emulado na versão 6, independente da versão instalada. A versão 6 não consegue executar o reCaptcha.

Eu utilizo Windows 7 SP1 64 bits com Internet Explorer 9 e estou compilando o exemplo em Delphi 2010:

image.png.fb21fe5950dfa863a7933b0586dc9ac8.png

Ao consultar, aparece a seguinte mensagem:

image.png.10f6e6ecf331c1e2cd463f3ec836cee0.png

Os esclarecimentos adicionais são os seguinte:

image.thumb.png.8b71cd0e21f444e193b8496fc356cffb.png

 

Estou com receio de que liberando isto para os clientes (que possuem os mais variados ambientes), em alguns poderá acontecer a mesma coisa...

 

Reparei pelas units inclusas na seção 'uses' que você utiliza uma versão mais recente do Delphi, provavelmente uma XEx. Poderia ser algum tratamento incluso em versões mais recentes do componente TWebBrowser e ausente no Delphi 2010?

 

Abraço.

Postado (editado)

Verifiquei que, acessando diretamente pelo Internet Explorer dá a mesma coisa... Tanto o IE9 32 bits quanto o IE9 64 bits.

 

Isso me leva à uma quest antiga, que talvez seja tema para outro tópico: como integrar outros navegadores dentro do Delphi... É osso estar vinculado diretamente à um navegador ruim desses e já descontinuado.

Editado por Gabriel Bonzanini
  • Moderadores
Postado
1 hora atrás, Gabriel Bonzanini disse:

Verifiquei que, acessando diretamente pelo Internet Explorer dá a mesma coisa... Tanto o IE9 32 bits quanto o IE9 64 bits.

Você precisa atualizar o IE no PC e inserir as chaves no registro para o TWebBrowser emular a versão mais nova.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
51 minutos atrás, BigWings disse:

Você precisa atualizar o IE no PC e inserir as chaves no registro para o TWebBrowser emular a versão mais nova.

Saberia me dizer onde encontro a versão mais recente? Baixei a versão em pt-br neste link:

https://support.microsoft.com/pt-br/help/18520/download-internet-explorer-11-offline-installer

E o navegador não abre mais, apresentando a seguinte mensagem:

image.png.b9ff6550f363c3bbf33761bd8be4d122.png

Postado (editado)
9 minutos atrás, BigWings disse:

Sempre fiz pelo Windows Update, nunca tentei a instalação off-line.

O pior é que alguns de nossos clientes nem mesmo têm licença do Windows... Vou ter que pensar em outra alternativa que não dependa diretamente do TWebBrowser/Internet Explorer, pois mesmo que funcionasse, iria dar muito transtorno fazer a atualização em todos eles. Mas obrigado de qualquer forma.

Editado por Gabriel Bonzanini
Postado
Em 16/05/2018 at 20:21, SuicideCoder disse:

@Gabriel Bonzanini:

  • Sobre as chaves: como o componente utiliza o Internet Explorer e precisa emular a versão 8 ou superior, precisamos "dizer" ao Internet Explorer que nossa aplicação quer emular a versão mais recente do IE. A ausência das chaves faz com que o Internet Explorer seja emulado na versão 6, independente da versão instalada. A versão 6 não consegue executar o reCaptcha.
  • Sobre isolar: eu tentei e desisti, a princípio. O motivo é que o reCaptcha tem uma interação complexa com o usuário, fazendo várias requisições aos servidores do Google e tratando inúmeras interações, como cliques nas imagens para no final obter o token captcha.

@Igor Lisboa e @Gabriel Bonzanini:

 

Tentei está dando erro:

[DCC Error] Invalid command line switch for "dcc". Illegal quote passed to the command line switch named "-I". The value was [""].

E que pode ser?

  • 2 meses depois ...
Postado
Em 18/03/2018 at 14:12, SuicideCoder disse:

Coders,

Publiquei hoje componente para consultar CNPJ validando o Google reCaptcha que a RFB implantou no site de consulta.

Utilizei alguns códigos do ACBr e espero tê-lo feito citando de forma correta.

O código está em https://github.com/suicidecoder/ConsultaCNPJ/

Não incorporei o componente ao ACBr por acreditar que precise ser refatorado antes que isso ocorra.

Contributions are welcome!

[email protected]

PRINT_2.png

PRINT.png

 

Consegue me orientar de como transformar isso em código para unigui???

 

Pois não tenho o webBrowser para unigui... não consegui usar a classe IDispatch...

 

Obrigado!!!

  • 2 semanas depois ...
Postado (editado)
Em 09/08/2018 at 11:58, Gustavo Déo da Silva disse:

Consegue me orientar de como transformar isso em código para unigui???

 

Pois não tenho o webBrowser para unigui... não consegui usar a classe IDispatch...

 

Obrigado!!!

Boa tarde!
Fiz a instalação e configuração : tudo funcionou por 2 dias e agora não está mais aparecendo o resultado da pesquisa. Ele fica com a tela da RECEITA aberta e não vai para a tela de resultados.

Alguém sabe o motivo?

 

err cp.PNG

Editado por Professor
faltou o arquivo
  • Solution
Postado
21 horas atrás, Professor disse:

Boa tarde!
Fiz a instalação e configuração : tudo funcionou por 2 dias e agora não está mais aparecendo o resultado da pesquisa. Ele fica com a tela da RECEITA aberta e não vai para a tela de resultados.

Alguém sabe o motivo?

 

err cp.PNG

Sim, aparentemente a receita alterou a estrutura da página. Não existe mais o elemento principal.

Solução:

No Evento WebBrowserDocumentComplete você utilizava o seguinte código, ou algo similar:

Elem := GetElementByid(WebBrowser.Document, 'principal') as IHTMLElement;

Terá que substituir por:

Elem := GetElementByClassName(WebBrowser.Document, 'conteudo') as IHTMLElement;

E declarar a classe GetElementByClassName:

function GetElementByClassName(const Doc: IDispatch;
  const ClassName: string): IDispatch;
var
  Document: IHTMLDocument2;
  Body: IHTMLElement2;
  Tags: IHTMLElementCollection;
  Tag: IHTMLElement;
  I: Integer;
begin
  Result := nil;
  if not Supports(Doc, IHTMLDocument2, Document) then
    raise Exception.Create('Documento HTML inválido');
  if not Supports(Document.body, IHTMLElement2, Body) then
    raise Exception.Create('BODY não encontrado');
  Tags := Body.getElementsByTagName('*');
  for I := 0 to Pred(Tags.length) do
  begin
    Tag := Tags.item(I, EmptyParam) as IHTMLElement;
    if (Tag._className <> '') then
    begin
      if AnsiSameText(Tag._className, ClassName) then
      begin
        Result := Tag;
        Break;
      end;
    end;
  end;
end;

 Talvez precise de adaptações para o seu código.

 

 

 

 

Postado
1 hora atrás, AugustoKnitsch disse:

Sim, aparentemente a receita alterou a estrutura da página. Não existe mais o elemento principal.

Solução:

No Evento WebBrowserDocumentComplete você utilizava o seguinte código, ou algo similar:


Elem := GetElementByid(WebBrowser.Document, 'principal') as IHTMLElement;

Terá que substituir por:


Elem := GetElementByClassName(WebBrowser.Document, 'conteudo') as IHTMLElement;

E declarar a classe GetElementByClassName:


function GetElementByClassName(const Doc: IDispatch;
  const ClassName: string): IDispatch;
var
  Document: IHTMLDocument2;
  Body: IHTMLElement2;
  Tags: IHTMLElementCollection;
  Tag: IHTMLElement;
  I: Integer;
begin
  Result := nil;
  if not Supports(Doc, IHTMLDocument2, Document) then
    raise Exception.Create('Documento HTML inválido');
  if not Supports(Document.body, IHTMLElement2, Body) then
    raise Exception.Create('BODY não encontrado');
  Tags := Body.getElementsByTagName('*');
  for I := 0 to Pred(Tags.length) do
  begin
    Tag := Tags.item(I, EmptyParam) as IHTMLElement;
    if (Tag._className <> '') then
    begin
      if AnsiSameText(Tag._className, ClassName) then
      begin
        Result := Tag;
        Break;
      end;
    end;
  end;
end;

 Talvez precise de adaptações para o seu código.

 

 

 

 

Deu certo!

 

Valeu!

 

  • 5 meses depois ...
  • 3 meses depois ...
  • Este tópico foi criado há 2018 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.