Consulta Cpf na receita Federal

2,997 views
Skip to first unread message

Laerte Allan Oliveira Araújo

unread,
Feb 17, 2014, 2:28:47 PM2/17/14
to python...@googlegroups.com
boa Tarde,

Estou desenvolvendo um sistema que faz uma pesquisa no servidor da receita federal para verificar a veracidade do cpf.

Estou escrevendo um script que já consegue a image do captcha do site da receita. So não consegue fazer a pesquisa propriamente dita no site da receita.

Digito o cpf o caracteres da imagem não consigo ter o retorno desajavel do site. Segue em abaixo o meu código fonte...

Desde já agradeço a atenção


from BeautifulSoup import BeautifulSoup as bs
import requests
import Image, urllib2
from StringIO import StringIO

#url da consulta cpf na receita federal
#criando a sessao para pegar resposta do servidor
sessao = requests.session()
resposta = sessao.get(urlConsulra)

cookie = resposta.request._cookies
#resposta  do servidor para fazer a busca usando as tags
elementosResposta = bs(resposta.content)

#identificacao da imagem do captcha que esta no site
idImagem = ''
#procurando a imagem por todas as tages que tem id imgcaptcha
for i in elementosResposta.findAll(id='imgcaptcha'):
    indiceInicio = str(i).rfind('guid=')
    indiceTermino =str(i).rfind('/>')
    idImagem = str(i) 
      
    idImagem = idImagem[indiceInicio:indiceTermino].replace('guid=','').replace('"','')

#pegando a criptografia da imagem para utilizar no metodo post
viewState = ''
for i in elementosResposta.findAll(id='viewstate'):
    indiceInicio = str(i).rfind('value=')
    indiceTermino = str(i).rfind('>')
    viewState= str(i)
    viewState = viewState[indiceInicio:indiceTermino].replace('value=','').replace('"','').replace('/','')
    
#atribuindo o valor do criptografia a uma variavel global
view = viewState.strip()

#url para fazer o dowload da imagem que esta no servidor
#pegando a imagem propriamente dita
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(resposta.request._cookies))
urllib2.install_opener(opener)

#a imagem no buffer
url_imagem = urllib2.urlopen(image_url)

#salvando a imagem
i = Image.open(StringIO(url_imagem.read()))
i.save('c:\\teste.gif','GIF')

captcha = raw_input('Digite o captcha: ')
cpf = raw_input('Digite o CPF: ')

dic = {'txtCPF':cpf, 'captcha':captcha,'captchaAudio':'', 'Enviar':'Consultar','viewstate':view}

a = sessao.post(urlConsulra, data = dic)

print a.content

Vinicius Assef

unread,
Feb 18, 2014, 10:25:23 AM2/18/14
to python...@googlegroups.com
2014-02-17 16:28 GMT-03:00 Laerte Allan Oliveira Araújo
<laerte...@gmail.com>:
> Desde já agradeço a atenção

Estamos aqui pra isso, Laerte.

Mas você mandou a mensagem pra quê, mesmo?

Alexandre Souza

unread,
Feb 18, 2014, 10:27:17 AM2/18/14
to python...@googlegroups.com
Vinicius,

Eu acho que ele quer ajuda nesse ponto:

"[...]So não consegue fazer a pesquisa propriamente dita no site da receita.Digito o cpf o caracteres da imagem não consigo ter o retorno desajavel do site.[...]"

[ ]'s



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
    python-brasi...@googlegroups.com

---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Aprendiz Emergente
@alesouza_dev

Mauricio Lima

unread,
Feb 18, 2014, 11:10:58 AM2/18/14
to python...@googlegroups.com
Qual o resultado que você esperava e qual ele traz?

José Ricardo Borba

unread,
Feb 18, 2014, 11:13:54 AM2/18/14
to python...@googlegroups.com
Que tal o código no pastebin???
José Ricardo Borba

Fabio C. Barrionuevo da Luz

unread,
Feb 18, 2014, 11:48:17 AM2/18/14
to python...@googlegroups.com
Acho que a lista deveria parar de aconselhar utilizar o pastebin, e aconselhar usar o gist.github.com ou outro que não apague as mensagens apos algum tempo sem acesso.
Não tem coisa mais frustrante é você estar procurando ajuda sobre algo, encontrar uma possivel resposta e no final, ela foi disponibilizada no pastebin e o mesmo foi apagado por pouco acesso.
Fábio C. Barrionuevo da Luz
Acadêmico de Sistemas de Informação na Faculdade Católica do Tocantins - FACTO
Palmas - Tocantins - Brasil - América do Sul

José Ricardo Borba

unread,
Feb 18, 2014, 11:54:39 AM2/18/14
to python-brasil
Basta que alguém que queira ajudar possa ler e rodar o código. Se o pastebin apaga, então é só sugerir outro(s).

Abraço,

Eric Hideki

unread,
Feb 18, 2014, 12:23:38 PM2/18/14
to python...@googlegroups.com
Dê uma olhada com Scrapy, talvez ele te ajude, senão assista a palestra do Fernando Macedo que está gravado no canal da Python Brasil no qual ele fala do raspador, que tem ideia semelhante para coletar dados.

Não sei se funcionará, mas talvez dê ideias.

Linux - Junior Polegato

unread,
Feb 18, 2014, 1:32:14 PM2/18/14
to python...@googlegroups.com
Em 17-02-2014 16:28, Laerte Allan Oliveira Araújo escreveu:
> boa Tarde,
> Estou desenvolvendo um sistema que faz uma pesquisa no servidor da
> receita federal para verificar a veracidade do cpf.
> Estou escrevendo um script que já consegue a image do captcha do site
> da receita. So não consegue fazer a pesquisa propriamente dita no site
> da receita.
> Digito o cpf o caracteres da imagem não consigo ter o retorno
> desajavel do site. Segue em abaixo o meu código fonte...
> Desde já agradeço a atenção

Olá!

Passei rápido no html da página e vi que a url inicial não é a
mesma do POST, e você está usando a mesma.

Para fazer a última consulta enviando os dados, utilize a url
em action do form, que é "ConsultaPublicaExibir.asp", ou seja,
"http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/ConsultaPublicaExibir.asp".

Tente com essa url e os dados de cpf e captch e veja se tem o
esperado.

--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:12:16 AM2/19/14
to python...@googlegroups.com
Bom dia Pessoal,

Desculpe por não ser claro no meu post. 

   É porque estou Desenvolvendo um sistema em python e Qt e queria verificar se o cpf é valido na receita e se é de fato da pessoa que está solicitando. Muito das vezes o pessoal vem comprar sem o cpf pois ja sabe o número. 

No código que postei eu faço a busca no site, trago a imagem do captcha, mas não consigo enviar o metodo post para que eles tragam o nome do cpf digitado. Queria saber onde está errado? abaixo o código no pastbin



Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:24:45 AM2/19/14
to python...@googlegroups.com
Ola junior,
 tentei pela essa nova url, não funcionou talvez prescisa mais de parâmetros. vc não acha?

E talvez passar o passa o cookie..

tenho outra alternativa?



Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:27:25 AM2/19/14
to python...@googlegroups.com

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:28:15 AM2/19/14
to python...@googlegroups.com
Bom dia,

Para verificar se o cpf é valido mesmo...

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:40:03 AM2/19/14
to python...@googlegroups.com


Em terça-feira, 18 de fevereiro de 2014 15h32min14s UTC-3, Junior Polegato - Linux escreveu:
Bom dia, 

Fiz uma baianagem... a primeira mesagem não tenha ido..

fiz o teste com essa url e não funciounou... Será se tenho que passar cokkie ou é falta de parâmetros?

código pastbin


att, 
Laerte allan 

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:40:59 AM2/19/14
to python...@googlegroups.com
bom dia,
O resultado que eu queria é a resposta com o nome da pessoa que foi digitado o cpf..

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 7:47:35 AM2/19/14
to python...@googlegroups.com

Linux - Junior Polegato

unread,
Feb 19, 2014, 1:45:40 PM2/19/14
to Laerte Allan Oliveira Araújo, python...@googlegroups.com
t
Em 19-02-2014 10:44, Laerte Allan Oliveira Araújo escreveu:
> Acho que ta faltando mais parametros... e eu não sei como identificar

Olá,

Fiz um teste rápido na pagina e olhei o que ia e vinha, fiz um
programinha rápido usando o Pole [1], baixe e compile no mesmo diretório
do programa abaixo com git [2], desenvolvido por mim e funcionou bem em
Linux.

Não rodei seu código por falta de tempo para entendê-lo, talvez
o conteúdo de view não esteja decodifcado com "quote" ou não esteja
passando os cokies.

[1] https://github.com/JuniorPolegato/pole.git
[2] git clone https://github.com/JuniorPolegato/pole.git pole.git && cd
pole.git && ./compilar_tudo && cd .. && ln -s pole.git/modulos pole

Veja o exemplo rápido:

import pole
import re
import urllib2
import os

conexao = pole.http.Conexao('www.receita.fazenda.gov.br')
dados = conexao.obter_dados('/aplicacoes/atcta/cpf/ConsultaPublica.asp')
html = dados['conteúdo']
view = urllib2.quote(re.sub(".*<input type=hidden id=viewstate"
" name=viewstate value='([^']+)'.*", r'\1',
html, flags=re.DOTALL), '')
img_src = re.sub(".*<img border='0' id='imgcaptcha'"
" alt='Imagem com os caracteres anti rob.'"
" src='([^']+)'.*", r'\1', html,
flags=re.DOTALL).replace('&amp;', '&')
dados = conexao.obter_dados(img_src)
open('/tmp/captcha.jpg', 'wb').write(dados['conteúdo'])
os.system('xdg-open /tmp/captcha.jpg')
captcha = raw_input('Captcha: ')
cpf = raw_input('CPF: ')
inputs = ("txtCPF=%s&captcha=%s&captchaAudio=&viewstate=%s&"
"Enviar=Consultar") % (cpf, captcha, view)
dados = conexao.obter_dados('/aplicacoes/atcta/cpf/'
'ConsultaPublicaExibir.asp', inputs)
html = dados['conteúdo']
nome = re.sub(".*Nome da Pessoa F.sica: ([^<]*).*", r'\1',
html, flags=re.DOTALL).strip()
situacao = re.sub(".*Situa..o Cadastral: ([^<]*).*", r'\1',
html, flags=re.DOTALL).strip()
print "Nome:", nome
print "Situação:", situacao



--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 3:17:58 PM2/19/14
to python...@googlegroups.com, Laerte Allan Oliveira Araújo
Esse programinha so funciona no linux?

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 3:24:36 PM2/19/14
to python...@googlegroups.com, Laerte Allan Oliveira Araújo
Se eu copiar as pastas e colocar na pasta do python não funcionaria? Claro com o caminho que vc especificar pois foi vc que Desenvolveu...

Linux - Junior Polegato

unread,
Feb 19, 2014, 4:11:58 PM2/19/14
to python...@googlegroups.com
Em 19-02-2014 17:24, Laerte Allan Oliveira Araújo escreveu:
> Se eu copiar as pastas e colocar na pasta do python não funcionaria?
> Claro com o caminho que vc especificar pois foi vc que Desenvolveu...

Funciona no Windows também, pode até copiar todo o código presente em
PoleHTTP.py para acima do código que te passei e usar a classe Conexao
diretamente.

--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 6:22:43 PM2/19/14
to python...@googlegroups.com
boa noite,

Junior quando executo esse programinha ele traz esse erro:

Traceback (most recent call last):

  File "D:\Documents\Proj Arduino\teste\teste\teste_request.py", line 120, in <module>
    html, flags=re.DOTALL), '') 
  File "C:\Python27\lib\re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
RuntimeError: internal error in regular expression engine

descobrir que era uma constante que tem haver com a String. Pois os caracteres estavão vindo bagunçado quando mandava print dados['conteúdo'].
mudei o re.DOTALL para re.UNICODE não ocorre o erro mas a imagem nao aprece corretamente e não funciona.

att
Laerte Allan

Laerte Allan Oliveira Araújo

unread,
Feb 19, 2014, 6:27:37 PM2/19/14
to python...@googlegroups.com
o encoding que estou utilizando no inicio do arquivo é esse. Não sei se tem haver mas ja é alguma coisa. :)
# -*- coding: UTF-8 -*-

Rafael Oda

unread,
Feb 19, 2014, 6:57:37 PM2/19/14
to python...@googlegroups.com
Só eu fiquei preocupado quanto a isso possivelmente estar abusando o termo de uso do site?
O simples fato de colocarem um captcha já indica que ele não foi feito pra esse tipo de uso. Não gostaria também que alguém fosse capaz de encontrar meu CPF facilmente.
O jeito de validar CPF correto é usando o algoritmo que determina os dois últimos digitos. [1]

Abs,



--

Laerte Allan Oliveira Araújo

unread,
Feb 20, 2014, 7:21:29 AM2/20/14
to python...@googlegroups.com
bom dia junior,

Desculpe te encomodar, mas usando seu codigo para pesquisa do cpf tentei fazer algumas alterações para que ele funciona-se. So que não conseguir
pois no final ocorre um assim "nome <h1>Bad Request (Invalid URL)</h1> Situação: <h1>Bad Request (Invalid URL)</h1>". O codigo utilizado é basicamente o que me passou
porem com algumas alterações que descrevir. Abaixo passei um codigo que talvez nao seja dificil vc enteder e analisar o meu erro. Pois foi o codigo que me passou.

att,
Obrigado
 





import re 
import urllib2 
from BeautifulSoup import BeautifulSoup as bs 
conexao = Conexao('www.receita.fazenda.gov.br') 
dados = conexao.obter_dados('/aplicacoes/atcta/cpf/ConsultaPublica.asp') 
html = dados['conteúdo']

elementosResposta = bs(html)

#===============================================================================
# Aqui teve uma alteracao mudando re.DOTALL para re.VERBOSE
#===============================================================================
view = urllib2.quote(re.sub(".*<input type=hidden id=viewstate" 
                            " name=viewstate value='([^']+)'.*", r'\1', 
                            html, flags=re.VERBOSE), '') 


#==============================================================================
# Aqui tevev outra alteção para busca da imagem pois não conseguia pegar o captcha
# dava o erro que tinha solicitado anteriormente. aqui pego a identificador da imagem e diante disso consigo pegar a imagem
#Depois dessas alterações sistem executa mas na hora do retorno da um erro assim <h1>Bad Request (Invalid URL)</h1> Situação: <h1>Bad Request (Invalid URL)</h1>

#==============================================================================
idImagem = ''
#procurando a imagem por todas as tages que tem id imgcaptcha
for i in elementosResposta.findAll(id='imgcaptcha'):
    indiceInicio = str(i).rfind('guid=')
    indiceTermino =str(i).rfind('/>')
    idImagem = str(i) 
      
idImagem = idImagem[indiceInicio:indiceTermino].replace('guid=','').replace('"','')
img_src =  '/scripts/captcha/Telerik.Web.UI.WebResource.axd?type=rca&guid='+idImagem
              

dados = conexao.obter_dados(img_src) 

open('c:\\captcha.jpg', 'wb').write(dados['conteúdo']) 
# os.system('xdg-open /tmp/captcha.jpg') 

captcha = raw_input('Captcha: ') 
cpf = raw_input('CPF: ') 

inputs = ("txtCPF=%s&captcha=%s&captchaAudio=&viewstate=%s&" 
           "Enviar=Consultar") % (cpf, captcha, view) 
dados = conexao.obter_dados('/aplicacoes/atcta/cpf/ConsultaPublicaExibir.asp', inputs)

Linux - Junior Polegato

unread,
Feb 20, 2014, 8:25:12 AM2/20/14
to python...@googlegroups.com
Em 19-02-2014 20:57, Rafael Oda escreveu:
> Só eu fiquei preocupado quanto a isso possivelmente estar abusando o
> termo de uso do site?
> O simples fato de colocarem um captcha já indica que ele não foi feito
> pra esse tipo de uso. Não gostaria também que alguém fosse capaz de
> encontrar meu CPF facilmente.
> O jeito de validar CPF correto é usando o algoritmo que determina os
> dois últimos digitos. [1]

Olá!

Na verdade somente está criando um "navegador mais inteligente"
para consulta de CPF, pois o processo não se dá de forma
automática/robótica, isto é, existe a intervenção humana.


--

[]'s

Junior Polegato

Linux - Junior Polegato

unread,
Feb 20, 2014, 8:57:14 AM2/20/14
to python...@googlegroups.com
Em 20-02-2014 09:21, Laerte Allan Oliveira Araújo escreveu:
> # Aqui teve uma alteracao mudando re.DOTALL para re.VERBOSE

Olá!

Não pode fazer isso, o re.DOTALL é que vai fazer com que seja
extraído somente a parte que interessa, ignorando linhas acima e abaixo.
Sem ele vai trazer todas as linhas que não tem a string procurada,
portando não vai dar certo.

Dê um print nas variáveis e veja o que está de errado com o
conteúdo delas, pois esse erro que está tendo é devido ao conteúdo delas
não estar conforme esperado.

Peguei seu código, voltando em view para re.DOTALL, e funcionou!

--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 20, 2014, 9:35:52 AM2/20/14
to python...@googlegroups.com
oi,
No codigo quando adiciono o  re.DOTALL ocorre o erro 

File "D:\Documents\Proj Arduino\teste\teste\teste_request.py", line 120, in <module>
    html, flags=re.DOTALL), '') 
  File "C:\Python27\lib\re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
RuntimeError: internal error in regular expression engine...

O que deve ser? Uma perguntinha vc ta utilizando o linux?

Linux - Junior Polegato

unread,
Feb 20, 2014, 12:13:35 PM2/20/14
to python...@googlegroups.com
Em 20-02-2014 11:35, Laerte Allan Oliveira Araújo escreveu:
oi,
No codigo quando adiciono o  re.DOTALL ocorre o erro 

File "D:\Documents\Proj Arduino\teste\teste\teste_request.py", line 120, in <module>
    html, flags=re.DOTALL), '') 
  File "C:\Python27\lib\re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
RuntimeError: internal error in regular expression engine...

O que deve ser? Uma perguntinha vc ta utilizando o linux?

Sim, somente utilizo Linux, Windows só para testar algumas situações em que é impossível realmente utilizar Linux.

--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 20, 2014, 12:25:37 PM2/20/14
to python...@googlegroups.com
você poderia me dizer o que realmente essa função  traz. Talvez posso substituila por outra função e ser feliz... kkkkkk. Poderia dar um print no que vc testa e me passar
para que posso fazer uma comparação?

re.sub(".*<input type=hidden id=viewstate" 
                            " name=viewstate value='([^']+)'.*", r'\1', 
                            html, flags=re.DOTALL)

Linux - Junior Polegato

unread,
Feb 20, 2014, 1:13:23 PM2/20/14
to python...@googlegroups.com
Em 20-02-2014 14:25, Laerte Allan Oliveira Araújo escreveu:
> você poderia me dizer o que realmente essa função traz. Talvez posso
> substituila por outra função e ser feliz... kkkkkk. Poderia dar um
> print no que vc testa e me passar
> para que posso fazer uma comparação?
> re.sub(".*<input type=hidden id=viewstate"
> " name=viewstate value='([^']+)'.*", r'\1',
> html, flags=re.DOTALL)

Cara, fiquei encafifado com esse problema que você está tendo, então
peguei uma máquina com Windows 7, instalei o Python 2.7, acertei o PATH,
instalei o BeautfulSoap, e rodei o código com re.DOTALL e funcionou!
Deve ser algum problema específico com sua máquina ou ambiente de
desenvolvimento, tente com outra máquina.

Quanto à substituir essa função, pode fazer tal como fez com o src da
imagem, ela é para pegar o value de viewstate.

--

[]'s

Junior Polegato

Fernando Vieira

unread,
Feb 20, 2014, 1:28:47 PM2/20/14
to python...@googlegroups.com
Junior como faço para instalar o pole?
uso linux e python 2.7


Em segunda-feira, 17 de fevereiro de 2014 16h28min47s UTC-3, Laerte Allan Oliveira Araújo escreveu:
boa Tarde,

Estou desenvolvendo um sistema que faz uma pesquisa no servidor da receita federal para verificar a veracidade do cpf.

Estou escrevendo um script que já consegue a image do captcha do site da receita. So não consegue fazer a pesquisa propriamente dita no site da receita.

Digito o cpf o caracteres da imagem não consigo ter o retorno desajavel do site. Segue em abaixo o meu código fonte...

Desde já agradeço a atenção


from BeautifulSoup import BeautifulSoup as bs
import requests
import Image, urllib2
from StringIO import StringIO

#url da consulta cpf na receita federal
#criando a sessao para pegar resposta do servidor
sessao = requests.session()
resposta = sessao.get(urlConsulra)

cookie = resposta.request._cookies
#resposta  do servidor para fazer a busca usando as tags
elementosResposta = bs(resposta.content)

#identificacao da imagem do captcha que esta no site
idImagem = ''
#procurando a imagem por todas as tages que tem id imgcaptcha
for i in elementosResposta.findAll(id='imgcaptcha'):
    indiceInicio = str(i).rfind('guid=')
    indiceTermino =str(i).rfind('/>')
    idImagem = str(i) 
      
    idImagem = idImagem[indiceInicio:indiceTermino].replace('guid=','').replace('"','')

Fernando Vieira

unread,
Feb 20, 2014, 1:45:15 PM2/20/14
to python...@googlegroups.com
Estou tendo erro na hora de rodar ./compilatudo como o PoleXmlSec

"fontes/pole/PoleRelatorio.pyc" -> "modulos/PoleRelatorio.pyc"
"fontes/pole/PolePDF.pyc" -> "modulos/PolePDF.pyc"
"fontes/pole/PoleHTTP.pyc" -> "modulos/PoleHTTP.pyc"
"fontes/pole/PoleXML.pyc" -> "modulos/PoleXML.pyc"
"fontes/pole/PolePrinter.pyc" -> "modulos/PolePrinter.pyc"
"fontes/pole/teste_cairo_pdf.pyc" -> "modulos/teste_cairo_pdf.pyc"
"fontes/pole/PoleDANFe.pyc" -> "modulos/PoleDANFe.pyc"
"fontes/pole/PoleNFe.pyc" -> "modulos/PoleNFe.pyc"
"fontes/pole/PoleSetting.pyc" -> "modulos/PoleSetting.pyc"
"fontes/pole/PoleGTK.pyc" -> "modulos/PoleGTK.pyc"
"fontes/pole/PoleUtil.pyc" -> "modulos/PoleUtil.pyc"
"fontes/pole/PoleLog.pyc" -> "modulos/PoleLog.pyc"
"fontes/pole/__init__.pyc" -> "modulos/__init__.pyc"
fontes/pole/PoleXmlSec.c:38:26: fatal error: libxslt/xslt.h: Arquivo ou diretório não encontrado
compilação terminada.

Linux - Junior Polegato

unread,
Feb 20, 2014, 2:04:46 PM2/20/14
to python...@googlegroups.com
Em 20-02-2014 15:45, Fernando Vieira escreveu:
> Estou tendo erro na hora de rodar ./compilatudo como o PoleXmlSec
> "fontes/pole/PoleRelatorio.pyc" -> "modulos/PoleRelatorio.pyc"
> [...]
> fontes/pole/PoleXmlSec.c:38:26: fatal error: libxslt/xslt.h: Arquivo
> ou diretório não encontrado
> compilação terminada.

Este erro ocorre por causa de um módulo em CPython que é para assinar
arquivos XML.

Se não for assinar arquivo XML, voltado ao uso de NFe, apague/comente
essa linha com "gcc" do arquivo "compilartudo".

Se for assinar, precisa ter instalados os pacotes libpython2.7-dev,
libxml2-dev, libxmlsec1-dev, libxslt1-dev e suas dependências, se for
Debian ou Ubuntu use "apt-get install libpython2.7-dev libxml2-dev
libxmlsec1-dev libxslt1-dev".

Não tem o setup para instalar, como ainda trabalho no desenvolvimento do
mesmo, costumo ter ele num diretório a parte que trabalho com git e no
diretório onde vou rodar um programa faço "ln -s
/home/usuario/desenvolvimento/pole/modulos pole", assim cria um link
simbólico com nome de pole para esta pasta do pole compilado e posso
fazer um "import pole" sem problemas.

--

[]'s

Junior Polegato

Laerte Allan Oliveira Araújo

unread,
Feb 20, 2014, 2:06:08 PM2/20/14
to python...@googlegroups.com
Junior,

Muito obrigado pela força seu código funcionou perfeitamente o problema eh o meu python que está com algum problema... Desculpa por te atrapalhar... Valeu também pelo seu código...

att.

Laerte Allan Oliveira Araújo

unread,
Feb 20, 2014, 2:11:15 PM2/20/14
to python...@googlegroups.com
O código que vai funcionar a busca pelo cpf na receita federal é o do junior... aki abaixo:


import pole 
import re 
import urllib2 
import os 

conexao = pole.http.Conexao('www.receita.fazenda.gov.br') 

dados = conexao.obter_dados('/aplicacoes/atcta/cpf/ConsultaPublica.asp') 
html = dados['conteúdo'] 
view = urllib2.quote(re.sub(".*<input type=hidden id=viewstate" 

                            " name=viewstate value='([^']+)'.*", r'\1', 
                            html, flags=re.DOTALL), '') 
img_src = re.sub(".*<img border='0' id='imgcaptcha'" 
                  " alt='Imagem com os caracteres anti rob.'" 
                  " src='([^']+)'.*", r'\1', html, 

                  flags=re.DOTALL).replace('&amp;', '&') 
dados = conexao.obter_dados(img_src) 
open('/tmp/captcha.jpg', 'wb').write(dados['conteúdo']) 

os.system('xdg-open /tmp/captcha.jpg') 
captcha = raw_input('Captcha: ') 
cpf = raw_input('CPF: ') 
inputs = ("txtCPF=%s&captcha=%s&captchaAudio=&viewstate=%s&" 
           "Enviar=Consultar") % (cpf, captcha, view) 
dados = conexao.obter_dados('/aplicacoes/atcta/cpf/' 
                             'ConsultaPublicaExibir.asp', inputs) 

Laerte Allan Oliveira Araújo

unread,
Feb 21, 2014, 11:07:13 AM2/21/14
to python...@googlegroups.com
Boa Tarde Pessoal, 

esse erro "RuntimeError: internal error in regular expression engine" era um bug que estava na versão do python 2.7.5 instalei a versão 2.7.6 e está funcionando perfeito... Mais uma vez agradeço a força do Junior Polegato pela ajuda.. 

Junior uma pergunta,
 sites que são executados com java script tem o tratamento diferente? Pois o de consulta CNPJ da receita basicamente é a mesma coisa do CPF a, porém a diferença que o método post executado da pagina está usando um java script. Pode ter algo diferente?


att,
Laerte allan

Linux - Junior Polegato

unread,
Feb 21, 2014, 12:52:11 PM2/21/14
to python...@googlegroups.com
Cara, pega um navegador, como Chrome ou Firefox, entra na parte de
desenvolvimento web e monitore o que chega e o que vai entre seu
navegado e os servidores do outro lado, filtra o que é relevante e tente
fazer isso de uma forma mais inteligente para atender sua necessidade.
Aí vai independer de como os dados foram obtidos, tratos e enviados.

--

[]'s

Junior Polegato

Danilo J. S. Bellini

unread,
Feb 21, 2014, 3:49:28 PM2/21/14
to python-brasil
"Só eu fiquei preocupado quanto a isso possivelmente estar abusando o termo de uso do site?"
Isso não me parece abusar em instante algum mesmo na mais rígida avaliação. É apenas uma utilização comum do sistema. Aliás, fora casos óbvios em que o serviço se torne dificultado, modificado ou inacessível para outros usuários, me parece confuso dizer o que é "abusar", afinal é um sistema público e os dados nele presentes estão publicamente disponíveis. Não há quebra de CAPTCHA, e o http://www.receita.fazenda.gov.br/robots.txt possui
Sem allow ou disallow algum...fiquei até na dúvida se isso realmente significa algo. De qualquer forma, baixar um único conteúdo para localmente re-formatá-lo ou adaptá-lo a uma interface alternativa não me parece ser classificável como um robô. Isso está mais para uma macro, ou algo greasemonkey-like.


"O simples fato de colocarem um captcha já indica que ele não foi feito pra esse tipo de uso."
Discordo. O CAPTCHA é usado para '''''assegurar''''' que há um humano fazendo a requisição e/ou para evitar muitos acessos por parte de uma única origem. A prática discutida nessa thread não entra em conflito com nenhum desses usos, e me parece mais provável que o CAPTCHA esteja lá pelo segundo uso do que pelo primeiro, embora esses não sejam motivos excludentes. O site indica "Essa informação ajuda a Receita Federal do Brasil a evitar consultas por programas automáticos, que dificultam a utilização do aplicativo pelos demais contribuintes", que pelo que entendi se refere a evitar DoS por crawlers.


"Não gostaria também que alguém fosse capaz de encontrar meu CPF facilmente."
Para fazer isso seria necessário o processo inverso ao disponível: do nome chegar ao CPF. Esse recurso não existe no site da receita, e para fazer isso seria necessário construir um banco de dados local a partir de muitas requisições. Embora isso aparentemente seja o que você chamou de "abuso", nada impede uma pessoa de ficar sistematicamente fazendo requisições, contratar workers usando o Mechanical Turk ou mesmo de fazer um software para quebrar aquele CAPTCHA (que parece ter alguns invariantes perigosos, e.g. é preto e branco e usa sempre 6 caracteres). Se os documentos de identificação realmente precisassem ser tratados como privados/sigilosos, provavelmente tal sistema sequer devesse existir, ou devesse possuir um validador de pares nome-número fornecidos (ou minimamente exigir o primeiro nome), ao invés de devolver o nome a partir do número (que não é difícil enumerar / "varrer"). Mas aparentemente alguém já fez uma "coleta" desses dados (procurei por "banco de dados cpf" no duckduckgo, não baixei nada mas ao que tudo indica...) e me parece tarde demais para fazer algo...


"O jeito de validar CPF correto é usando o algoritmo que determina os dois últimos digitos. [1]"
Isso não valida o par (nome, número CPF), apenas valida a consistência interna dos números fornecidos. Isso não impede alguém de usar ou mesmo criar um gerador de CPFs, além de facilitar aquele com intenção de fazer uma "coleta massiva" dos dados: com menos graus de liberdade, há menos requisições a serem feitas...



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
   http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:


--- Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Danilo J. S. Bellini
---------------
"It is not our business to set up prohibitions, but to arrive at conventions." (R. Carnap)

Carlos Henrique

unread,
Feb 23, 2014, 6:40:52 PM2/23/14
to python...@googlegroups.com
como instalar essa biblioteca pole ou módulo, desconheço.



 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.

Rafael Oda

unread,
Feb 23, 2014, 6:54:03 PM2/23/14
to python...@googlegroups.com
Entendo o seu ponto, não sei se concordo 100% com isso. Realmente ele não estava quebrando nenhum termo de uso, mas fiquei incomodado com o fato de que qualquer um pode montar um mapeamento dos CPF's para nome.
Óbvio que um sistema com CAPTCHA não é nada difícil de quebrar, mas enfim, me incomoda o fato desse tipo de dado estar aberto publicamente.

Abs,


2014-02-21 17:49 GMT-03:00 Danilo J. S. Bellini <danilo....@gmail.com>:

 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.

Fabio C. Barrionuevo da Luz

unread,
Feb 23, 2014, 7:09:45 PM2/23/14
to python...@googlegroups.com
Pessoal, acho que a privacidade esta meio complicada nos dias de hoje.
Basicamente um monte de crawlers, datawarehouse e muita mineração...
Veja essa reportagem que saiu em 2009:
http://www.youtube.com/watch?v=XucO2FRbXIA
--
Fábio C. Barrionuevo da Luz
Acadêmico de Sistemas de Informação na Faculdade Católica do Tocantins - FACTO
Palmas - Tocantins - Brasil - América do Sul

Maxwell Oliveira

unread,
Feb 24, 2014, 10:27:18 AM2/24/14
to python...@googlegroups.com
#Oda,
     O Pior é que a Receita VENDE estas informações a qualquer pessoa e não é somente o Nome, tem um monte de outras informações tais como : Endereço, Filiação ...

Rodrigo Camargo

unread,
Aug 12, 2014, 1:03:35 PM8/12/14
to python...@googlegroups.com, laerte...@gmail.com
Junior, tudo bem? Sou (bem) novo em Python e estou tentando executar seu código para a Receita, e após usar o compilar_tudo no Ubuntu e tentar executar o script da receita, estou com esse erro:

root@ubuntu:/home/rodrigo/receita# python receita.py 
  File "receita.py", line 3
    import pole?
               ^
SyntaxError: invalid syntax


Você poderia me ajudar dando uma dica de como importo isso?

Obrigado e um abraço,


Em quarta-feira, 19 de fevereiro de 2014 15h45min40s UTC-3, Junior Polegato - Linux escreveu:
t
Em 19-02-2014 10:44, Laerte Allan Oliveira Araújo escreveu:
> Acho que ta faltando mais parametros... e eu não sei como identificar

Olá,

         Fiz um teste rápido na pagina e olhei o que ia e vinha, fiz um
programinha rápido usando o Pole [1], baixe e compile no mesmo diretório
do programa abaixo com git [2], desenvolvido por mim e funcionou bem em
Linux.

         Não rodei seu código por falta de tempo para entendê-lo, talvez
o conteúdo de view não esteja decodifcado com "quote" ou não esteja
passando os cokies.

[1] https://github.com/JuniorPolegato/pole.git
[2] git clone https://github.com/JuniorPolegato/pole.git pole.git && cd
pole.git && ./compilar_tudo && cd .. && ln -s pole.git/modulos pole

         Veja o exemplo rápido:

--

[]'s

Junior Polegato

Linux - Junior Polegato

unread,
Aug 12, 2014, 3:02:07 PM8/12/14
to python...@googlegroups.com
Olá!

        Tem um ponto de interrogação grudado com "pole", isso está causando "invalid syntax".

--

[]'s

Junior Polegato

Linux - Junior Polegato

unread,
Aug 12, 2014, 3:17:12 PM8/12/14
to python...@googlegroups.com
Em 12-08-2014 14:03, Rodrigo Camargo escreveu:
> Junior, tudo bem? Sou (bem) novo em Python e estou tentando executar
> seu código para a Receita, e após usar o compilar_tudo no Ubuntu e
> tentar executar o script da receita, estou com esse erro:
>
> root@ubuntu:/home/rodrigo/receita# python receita.py
> File "receita.py", line 3
> import pole?
> ^
> SyntaxError: invalid syntax

Rodrigo, acabei de testar e está tudo ok.

Num mesmo diretório, como este "/home/rodrigo/receita" que passou, faça:
cd pole.git
./compilar_tudo
cd ..
ln -s pole.git/modulos pole
git clone https://gist.github.com/b802d80df0d5e039a007.git
mv -v b802d80df0d5e039a007/consulta_cpf_receita.py .
python consulta_cpf_receita.py


--

[]'s

Junior Polegato

Anderson Unsonst

unread,
Aug 12, 2014, 3:29:20 PM8/12/14
to python...@googlegroups.com
 módulo 11 não resolve esse problema de forma mais fácil não 





--

[]'s

Junior Polegato

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
   http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
--- Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.

Linux - Junior Polegato

unread,
Aug 12, 2014, 3:31:12 PM8/12/14
to python...@googlegroups.com
Em 12-08-2014 16:29, Anderson Unsonst escreveu:
> módulo 11 não resolve esse problema de forma mais fácil não

Não, pois além de saber se o CPF é válido, também retorna o nome da
pessoa e se a situação é regular ou outra para com a receita.

--

[]'s

Junior Polegato

Renan Vicente

unread,
Aug 12, 2014, 8:04:39 PM8/12/14
to python...@googlegroups.com
Olá Laerte,

Vi que já resolveu o seu problema, mas como só vi o post agora.

Um amigo meu já fez um script para fazer exatamente o que está fazendo, talvez seja util.

Renan Vicente

unread,
Aug 12, 2014, 8:09:33 PM8/12/14
to python...@googlegroups.com
No post ele aponta para uma conta no bitbucket mas ele migrou para o github.

Ivanelson Nunes

unread,
Aug 12, 2014, 10:23:25 PM8/12/14
to python...@googlegroups.com
Muito legal Renan.

@ivanelson
[]s


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
Você recebeu essa mensagem porque está inscrito no grupo quot;Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Ivanelson Nunes

unread,
Aug 12, 2014, 10:38:58 PM8/12/14
to python...@googlegroups.com
Uma curiosidade o captcha somente pode ser retornado através de imagem!? Não pode ser texto, string de caracteres, etc...?

@ivanelson
[]s




--

[]'s

Junior Polegato

rha...@gmail.com

unread,
May 19, 2022, 1:13:43 PM5/19/22
to Python Brasil
Pessoal, atualmente estou precisando fazer essa inteligência automatizada de consultar uma lista contendo 100 cpf's e datas de nascimento e obter do site da receita federal o nome completo.   Podem me ajudar?  Já existe algum código pronto que faça isso ou um vídeo explicando a construção da inteligência passo a passo ?
Reply all
Reply to author
Forward
0 new messages