Automatizar consulta de CNPJ

Bom dia pessoal, estou precisando automatizar uma consulta de CNPJ.

A idéia inicial é que ao cadastrar um cnpj de um cliente, o usuário consiga consultar o cnpj na página da receita (no campo cnpj tem uma lupa para pesquisar, e ao clicar nela abre uma janela com o campo cnpj preenchido e outro para preencher o valor do captcha com um botão consultar ou pode abrir a página da receita mesmo).

O que preciso mesmo é criar um serviço externo para isto, ou servlet, e ao chamar este serviço, ele quem deve abrir a tela com os campos para consultar conforme mencionado acima ou abrir a página da receita mesmo, e ao clicar em consultar, este serviço me retorne um json ou xml dos dados do cnpj (estes dados serão pegos da página retornada pela receita após a consulta) consultado para que o sistema em questão possa ler estes dados para então preencher estes dados de forma automática.

Alguém tem alguma idéia de como eu poderia fazer está consulta?

Outras sugestões também são bem vinda.

Este é o link da página da receita o qual o serviço deverá acessar para consulta e retorna um json ou xml:

http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp

Ps.: A idéia é a mesma que esta aqui: http://www.guj.com.br/java/54900-automatizar-processo-de-consulta-de-cnpj
Só que tem que ser em JAVA mesmo.

Se alguém puder me ajudar ou ter alguma dica, será muito bem vinda :wink:

Obrigado, Daniel.

Boa tarde a todos.

Depois de muito pesquisar, fazer testes com API’s Apache HttpClient, HttpUnit (Descontinuado) e HtmlUnit, a um tempo atrás cheguei a uma solução com HtmlUnit.

O problema até então que tive com HttpClient foi com javascript o qual o mesmo não tem suporte.

Abaixo tem um exemplo de como utilizar o HtmlUnit:

http://blog.alexandresoli.com.br/?p=112

Siga este exemplo obtendo primeiramente uma instância do WebClient, com ela você acessa a url a qual contém o captcha (http://www.receita.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image) e em seguida a página de consulta do CNPJ (http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp) com o valor do captcha.

Esta API também ajuda bastante a filtrar o conteúdo html, com ela é possível obter trechos de uma página através de tags html, id, nome e etc. Ela foi desenvolvida com finalidade de teste em sistemas, porém foi uma solução util para mim dinamizar a consulta de CNPJ que também será util para de CPF.

Att,
Daniel.

Pessoal, Tentei fazer o proposto no título (acessar o site da receita e com os dados do captcha e o cnpj) mas não obtive sucesso… Alguma luz?

Olá Ricardo, acho que lhe respondi por e-mail também, como eu disse, de uma pesquisada no HtmlUnit que vai facilita. Ele é bem fácil de usar, pois é capaz de simular um browser e suporta javascript.

Att,
Daniel.

Daniel, Boa Tarde

Você tem um exemplo de como carregar o captcha com webclient no jlabel usando a mesma instância da página que o captcha aparece?

Opa, bom dia, pode colar o que você tentou até agora?

Att,
Daniel.

//definicao do browser
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);

// página da receita
HtmlPage url = webClient.getPage("http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp");


aqui eu tinha que pegar imagem do captcha da url acima e mostrar em um jlabel, mas não sei como. Se eu colocar a url do captcha ele vai me dar outra imagem, ou seja
um cptcha diferente da url acima.

// pega o form html
HtmlForm form = url.getForms().get(0);

form.getInputByName("cnpj").setValueAttribute("cnpj_empresa");
form.getInputByName("idLetra").setValueAttribute("letra captcha");

HtmlPage subm = form.getInputByName("submit1").click();

System.out.println(subm.asXml);

Boa tarde, ta no caminho, porém, você tem que primeiro acessar a URL do captcha para obter a imagem gerada e salvar no disco para que ela possa ser visualizada.

Para obter o captcha você faz da seguinte forma:

[code]String urlCaptcha = “http://www.receita.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image”;

WebClient cliente = new WebClient(BrowserVersion.getDefault());

    WebRequest reqCaptcha = new WebRequest(new URL(urlCaptcha));
    reqCaptcha.setHttpMethod(HttpMethod.GET);
    InputStream imgCaptcha = cliente.getPage(reqCaptcha).getWebResponse().getContentAsStream();[/code]

Acima você obtem o captcha via inputstream, basta apenas salvar no disco para que possa ser visualizada para informa os caracteres.

Agora é só fazer exatamente o que você fez no seu utilizando a mesma instância do webcliente (isso fará uma requisição na mesma sessão a qual você obteve a imagem do captcha) passando o cnpj e os caracteres do captcha.

Qualquer coisa, estamos ai.

Abraço,
Daniel.

Daniel,

Muito Obrigado por sua ajuda, não teria conseguido sem a sua ajuda.

Só mais um detalhe: No computador de casa funciona blz, no da Empresa não funciona. em casa eu uso o Chrome como navegador padrão
e no trablaho eu uso o mozila. Já instalei o Chrome no trabalho já mudei o BrowserVersion.getDefault() para BrowserVersion.FIREFOX_3_6
e nada. Você já se deparou com esse tipo de erro?

O erro é o seguinte:

Exception in thread “main” ======= EXCEPTION START ========
Exception class=[java.lang.RuntimeException]
com.gargoylesoftware.htmlunit.ScriptException: Exception invoking jsxSet_innerHTML
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:973)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:220)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
at Visao.teste.main(teste.java:79)
Caused by: java.lang.RuntimeException: Exception invoking jsxSet_innerHTML
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:198)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$GetterSlot.setValue(ScriptableObject.java:317)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putImpl(ScriptableObject.java:2569)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.put(ScriptableObject.java:470)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2251)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1647)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1637)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1407)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:854)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:267)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3183)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:490)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:589)
… 30 more
Caused by: java.lang.NoSuchMethodError: org.apache.xpath.compiler.FunctionTable.installFunction(Ljava/lang/String;Ljava/lang/Class;)I
at com.gargoylesoftware.htmlunit.html.xpath.XPathAdapter.initFunctionTable(XPathAdapter.java:54)
at com.gargoylesoftware.htmlunit.html.xpath.XPathAdapter.(XPathAdapter.java:69)
at com.gargoylesoftware.htmlunit.html.xpath.XPathUtils.evaluateXPath(XPathUtils.java:128)
at com.gargoylesoftware.htmlunit.html.xpath.XPathUtils.getByXPath(XPathUtils.java:72)
at com.gargoylesoftware.htmlunit.html.DomNode.getByXPath(DomNode.java:1365)
at com.gargoylesoftware.htmlunit.html.HtmlPage.setCheckedRadioButton(HtmlPage.java:1893)
at com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput.setChecked(HtmlRadioButtonInput.java:100)
at com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput.onAddedToPage(HtmlRadioButtonInput.java:187)
at com.gargoylesoftware.htmlunit.html.HtmlPage.notifyNodeAdded(HtmlPage.java:1712)
at com.gargoylesoftware.htmlunit.html.DomNode.fireAddition(DomNode.java:887)
at com.gargoylesoftware.htmlunit.html.DomNode.appendChild(DomNode.java:875)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.addNodeToRightParent(HTMLParser.java:546)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.startElement(HTMLParser.java:510)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:732)
at org.cyberneko.html.HTMLTagBalancer.emptyElement(HTMLTagBalancer.java:779)
at org.cyberneko.html.filters.DefaultFilter.emptyElement(DefaultFilter.java:144)
at org.cyberneko.html.filters.NamespaceBinder.emptyElement(NamespaceBinder.java:302)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2649)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2022)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseFragment(HTMLParser.java:161)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseFragment(HTMLParser.java:121)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.parseHtmlSnippet(HTMLElement.java:916)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.jsxSet_innerHTML(HTMLElement.java:840)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:172)
… 45 more
Enclosed exception:
java.lang.RuntimeException: Exception invoking jsxSet_innerHTML
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:198)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject$GetterSlot.setValue(ScriptableObject.java:317)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putImpl(ScriptableObject.java:2569)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.put(ScriptableObject.java:470)
at net.sourceforge.htmlunit.corejs.javascript.ScriptableObject.putProperty(ScriptableObject.java:2251)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1647)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectProp(ScriptRuntime.java:1637)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1407)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:854)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:267)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3183)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:490)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:589)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:973)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:220)
at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556)
at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142)
at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044)
at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
at Visao.teste.main(teste.java:79)
Caused by: java.lang.NoSuchMethodError: org.apache.xpath.compiler.FunctionTable.installFunction(Ljava/lang/String;Ljava/lang/Class;)I
at com.gargoylesoftware.htmlunit.html.xpath.XPathAdapter.initFunctionTable(XPathAdapter.java:54)
at com.gargoylesoftware.htmlunit.html.xpath.XPathAdapter.(XPathAdapter.java:69)
at com.gargoylesoftware.htmlunit.html.xpath.XPathUtils.evaluateXPath(XPathUtils.java:128)
at com.gargoylesoftware.htmlunit.html.xpath.XPathUtils.getByXPath(XPathUtils.java:72)
at com.gargoylesoftware.htmlunit.html.DomNode.getByXPath(DomNode.java:1365)
at com.gargoylesoftware.htmlunit.html.HtmlPage.setCheckedRadioButton(HtmlPage.java:1893)
at com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput.setChecked(HtmlRadioButtonInput.java:100)
at com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput.onAddedToPage(HtmlRadioButtonInput.java:187)
at com.gargoylesoftware.htmlunit.html.HtmlPage.notifyNodeAdded(HtmlPage.java:1712)
at com.gargoylesoftware.htmlunit.html.DomNode.fireAddition(DomNode.java:887)
at com.gargoylesoftware.htmlunit.html.DomNode.appendChild(DomNode.java:875)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.addNodeToRightParent(HTMLParser.java:546)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.startElement(HTMLParser.java:510)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:732)
at org.cyberneko.html.HTMLTagBalancer.emptyElement(HTMLTagBalancer.java:779)
at org.cyberneko.html.filters.DefaultFilter.emptyElement(DefaultFilter.java:144)
at org.cyberneko.html.filters.NamespaceBinder.emptyElement(NamespaceBinder.java:302)
at org.cyberneko.html.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2649)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2022)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseFragment(HTMLParser.java:161)
at com.gargoylesoftware.htmlunit.html.HTMLParser.parseFragment(HTMLParser.java:121)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.parseHtmlSnippet(HTMLElement.java:916)
at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.jsxSet_innerHTML(HTMLElement.java:840)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:172)
… 45 more
======= EXCEPTION END ========

Opa, não se preocupe com browsers a instala, o htmlunit é independente deles.

Qual versão do htmlunit você está usando em casa e na empresa?

Se for a mesma, certifique-se de que todas as dependências do htmlunit que você está usando na empresa são as mesmas a qual você está usando em casa.

Att,
Daniel.

Pessoal,

Existe um site que disponibiliza uma api ( biblioteca, .dll) para consultar os dados da receita federal, sintegra e outros sites:

http://knu.com.br

Contratei aqui pra minha empresa e funciona muito bem. Usamos para confirmar dados cadastrais de clientes a partir de um CPF ou CNPJ (nome completo, razão social, situação cadastral, endereço, etc). É bom também para confirmar se a empresa existe e não apenas validar se o CNPJ ou CPF são válidos. Recomendo.

[quote] Daniel,

Estou com um problema no htmlUnit ao acessar o site da NFE nacional, tem como você me ajudar? segue o erro:

1º Erro:

SEVERE: Error loading JavaScript from [http://10.200.140.64:8001/estatistica/grupos/www.nfe.fazenda.gov.br.js].
org.apache.http.conn.HttpHostConnectException: Connection to http://10.200.140.64:8001 refused
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:158)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
        at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1008)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:950)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
        at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:220)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:642)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$400(JavaScriptEngine.java:79)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:590)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:973)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
        at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:220)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240)
        at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
        at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556)
        at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142)
        at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044)
        at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
        at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
        at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018)
        at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005)
        at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908)
        at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
        at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789)
        at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225)
        at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179)
        at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221)
        at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
        at Csv.java.main(java.java:93)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:519)
        at com.gargoylesoftware.htmlunit.SocksSocketFactory.connectSocket(SocksSocketFactory.java:89)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
        ... 46 more

2º Erro:

[code] com.gargoylesoftware.htmlunit.ScriptException: Sys.ArgumentOutOfRangeException: Sys.ArgumentOutOfRangeException: Value must be an integer.
Parameter name: x
Actual value was Infinity. (http://www.nfe.fazenda.gov.br/PORTAL/ScriptResource.axd?d=T-l-YtOmK8s3W0iyiAKvgoDF0r1kFNQPezHXZu1_tj_SiF5czsApyksqym1FhbZs12Mdr9b4W_Sghsr-Y3uHAsMvRjz_hzBN7nG33iIV93RCZBlqfIi0x2Dp50_eVUgVmhAiIed4qTM2OzwEOwgjTUH_O-r6PqgaZG0aoCsMgYfuirYO0&t=ffffffff940d030f#3908)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:545)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:520)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:896)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:162)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:221)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:725)
at com.gargoylesoftware.htmlunit.html.HtmlElement$2.run(HtmlElement.java:866)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:871)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1240)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1195)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1158)
at Csv.java.main(java.java:109)
Caused by: net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: Sys.ArgumentOutOfRangeException: Sys.ArgumentOutOfRangeException: Value must be an integer.
Parameter name: x
Actual value was Infinity. (http://www.nfe.fazenda.gov.br/PORTAL/ScriptResource.axd?d=T-l-YtOmK8s3W0iyiAKvgoDF0r1kFNQPezHXZu1_tj_SiF5czsApyksqym1FhbZs12Mdr9b4W_Sghsr-Y3uHAsMvRjz_hzBN7nG33iIV93RCZBlqfIi0x2Dp50_eVUgVmhAiIed4qTM2OzwEOwgjTUH_O-r6PqgaZG0aoCsMgYfuirYO0&t=ffffffff940d030f#3908)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1057)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:854)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:267)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3183)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:589)
… 16 more
JavaScriptException value = Sys.ArgumentOutOfRangeException: Sys.ArgumentOutOfRangeException: Value must be an integer.
Parameter name: x
Actual value was Infinity.
== CALLING JAVASCRIPT ==

function () {
var e = {};
try {
e = Sys.UI.DomElement._getWindow(element).event;
}
catch (ex) {
}
return handler.call(element, new Sys.UI.DomEvent(e));
}

======= EXCEPTION END ========
[/code]

Se puder me ajudar, agradeço d+.

[/quote]

Bom dia ricardomnlima.

O primeiro erro pode ser a causa de uma url inacessível, se no browser você consegue acessar normalmente tente definir setTimeout(0) em sua instância webclient que a principio também já é uma configuração padrão.
Se caso ainda não resolver sendo que no browser funciona normalmente, é possível que você tenha que definir o proxy em sua instância webclient, para isto use o método setProxyConfig(ProxyConfig);

O segundo erro é uma exceção javascript, alguma string foi passada no lugar de um inteiro, mas exceções javascript na maioria das vezes são lançadas pelo htmlunit e grande parte não afetará o decorrer de sua aplicação.

Se caso mesmo assim o problema não tenha sido resolvido, poste o seu código para que eu faça testes aqui.

Att,
Daniel.

Boa Noite Daniel ,

Tentei e não consegui… não tenho a minima noção onde possa ta o erro.
Segue o Código:

public static void main(String args[])  {

       //definicao do browser
WebClient webClient = new WebClient(BrowserVersion.getDefault());



String urlCaptcha = "http://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image";

//WebClient cliente = new WebClient(BrowserVersion.getDefault());

        WebRequest reqCaptcha = null;
        try {
            reqCaptcha = new WebRequest(new URL(urlCaptcha));
        } catch (MalformedURLException ex) {
            Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
        }
        reqCaptcha.setHttpMethod(HttpMethod.GET);
        InputStream imgCaptcha = null;

        try {

             imgCaptcha = webClient.getPage(reqCaptcha).getWebResponse().getContentAsStream();



        } catch (IOException ex) {
            Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FailingHttpStatusCodeException ex) {
            Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
        }

        Image image = null;
        try {
            image = ImageIO.read(imgCaptcha);
        } catch (IOException ex) {
            Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Exibir o captcha
        JFrame frame = new JFrame();
        JLabel label = new JLabel(new ImageIcon(image));
        frame.getContentPane().add(label, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        //entrada do texto do captcha
        String idLetras = JOptionPane.showInputDialog("Digite o captcha");


// página da receita
HtmlPage url = null;

        System.out.println("Passei");
        try {
            url = webClient.getPage("http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=");
        } catch (IOException ex) {
            Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex.getMessage());
        }




// pega o form html



HtmlForm form = url.getForms().get(0);

form.getInputByName("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta").setValueAttribute("52111202782071000461550010004544861625249045");
form.getInputByName("ctl00$ContentPlaceHolder1$txtCaptcha").setValueAttribute(idLetras.trim());

HtmlPage subm = null;
        try {
            subm = form.getInputByName("ctl00$ContentPlaceHolder1$btnConsultar").click();
        } catch (IOException ex) {
            Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
        }

System.out.println(subm.asXml());
    }

to precisando dessa parada ai tambem alguem poderia postar o codigo ai pra gente entender??

Boa tarde ricardomnlima.

Tente com a seguinte url que deverá funcionar:
http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa

ao invés de:
http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=

jschilling, o código do ricardomnlima está correto, porém, alterando a url deverá funcionar como mencionei acima.

Att,
Daniel.

Boa Tarde Daniel,

Muito obrigado pela Atenção. A URL funcionou perfeitamente, matou o primeiro erro, só que o segundo erro ainda persiste,
você tem alguma ideia de como eu posso arrumar esse erro?

[quote=Bugs99]Pessoal,

Existe um site que disponibiliza uma api ( biblioteca, .dll) para consultar os dados da receita federal, sintegra e outros sites:

http://knu.com.br

Contratei aqui pra minha empresa e funciona muito bem. Usamos para confirmar dados cadastrais de clientes a partir de um CPF ou CNPJ (nome completo, razão social, situação cadastral, endereço, etc). É bom também para confirmar se a empresa existe e não apenas validar se o CNPJ ou CPF são válidos. Recomendo.[/quote]

Fiquei com medo disto:

Uma simples biblioteca precisar de 1MB de stack size não me cheira bem. Não sei se é porque

Fiquei com medo de mais isto aqui:

A classe já foge do padrão por estar em letras minúsculas e já me entra com métodos estáticos. Colocar isso pra testar vai exigir no mínimo um componente pra encapsular as chamadas já que usar em ambiente de teste vai custar caro porque a biblioteca cobra por consulta e não por uso. Olhando a documentação da parte Java dá pra ver que não tem nada lá que siga ao menos as convenções de código (uma porrada de underscore em vez de camel, por exemplo).

[quote=ricardomnlima] Boa Tarde Daniel,

Muito obrigado pela Atenção. A URL funcionou perfeitamente, matou o primeiro erro, só que o segundo erro ainda persiste,
você tem alguma ideia de como eu posso arrumar esse erro?

[/quote]

Bom dia Ricardo,

Tente fazer a consulta especificando um BrowserVersion em sua instância WebClient como você vinha fazendo a princípio como segue abaixo:

new WebClient(BrowserVersion.FIREFOX_3_6);

ao invés de:

new WebClient(BrowserVersion.getDefault())

O getDefault retorna o IE7, pode ser que tenha algo na página que não tenha sido processado com o padrão IE7.

Att,
Daniel.

Boa tarde Daniel,

Funcionou perfeitamente com a alteração, só que o link que você me passou ele sempre redireciona para página principal, testei
no navegador e faz a mesma coisa.

URL Nova: http://www.nfe.fazenda.gov.br/PORTAL/consulta.aspx?tipoConsulta=completa
URL ANTIGA: http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=

A url antiga eu usava e dava certo antes, agora não sei porque não funciona mais.

Você tem alguma ideia de como funciona essas url’s e qual seria a certa para funcionar a pesquisa?