Lucas_Camara 12 de fev. de 2022
O click no link do CNPJ acaba executando essa URL:
https : //cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame=
A diferença é que essa URL realiza um redirect e, se vc reparar no header Location do response, verá a URL para qual o rediracionamento é feito, e lá tem o ID do parâmetro PK_PARTIC .
OliverG 12 de fev. de 2022
Lucas retificando,
Consegui entender a ideia, mas como acesso o location?
OliverG 12 de fev. de 2022
Segue o código que estou utilizando para tentar fazer a captura.
import requests
Header = {
'__EVENTTARGET' : 'ddlFundos$_ctl0$Linkbutton2' ,
'__EVENTARGUMENT' : '' ,
'__VIEWSTATE' : '/wEPDwUKLTYyMzAzNTAxMA8WBB4DQWRtBQVmYWxzZR4FVG9kb3NnFgICAQ9kFgQCBw88KwAJAGQCCQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AgFkFgJmD2QWAgIBD2QWAmYPZBYGZg9kFgJmDw8WBB4LQ29tbWFuZE5hbWUFAjk1Hg9Db21tYW5kQXJndW1lbnQFBTUxNTk4ZBYCZg8VARIwNC41MTEuMjg2LzAwMDEtMjBkAgEPZBYCZg8PFgQfBAUCOTUfBQUFNTE1OThkFgJmDxUBM0lDQVRVIFNFRyBEVVJBVElPTiBGVU5ETyBERSBJTlZFU1RJTUVOVE8gUkVOREEgRklYQWQCAg9kFgJmDxUBAkZJZGStQ0gqRbCj/NzGDsp05Pdmcuql5Ff1434cdvORvoHKIA==' ,
'__VIEWSTATEGENERATOR' : 'C1E61A59' ,
'__EVENTVALIDATION' : '/wEdAAOA6SWLVeK0wOxT92LVAmwMMg2H5XKsza2QwUUYDO3mJqoHrwEVH8tMxFxzyspxY/C9s296NH5UyJ9xJ4VsNPQheatxES2cF4SToJPT0fz9uQ=='
}
paginaInicial = requests . get ( 'https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=04.511.286/0001-20&TpPartic=0&Adm=false&SemFrame=' , headers = Header )
print ( paginaInicial . headers )
Lucas_Camara 12 de fev. de 2022
Os headers foram impressos? O location retornou dessa forma q tu fez?
OliverG 12 de fev. de 2022
Eles retornou todos menos o location,
Creio que estou fazendo a requisição errada.
Pois o código de resposta é 200, e eu preciso que seja 302.
Lucas_Camara 12 de fev. de 2022
Essa foi difícil. Para conseguir acessar a página do redirecionamento vc deve fazer assim:
URL (deve ser um POST ):
POST https : //cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame=
Deve ter esse body (form-data):
__VIEWSTATE : / wEPDwUKLTYyMzAzNTAxMA8WBB4DQWRtBQVmYWxzZR4FVG9kb3NnFgICAQ9kFgQCBw88KwAJAGQCCQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AgFkFgJmD2QWAgIBD2QWAmYPZBYGZg9kFgJmDw8WBB4LQ29tbWFuZE5hbWUFAjk1Hg9Db21tYW5kQXJndW1lbnQFBjEyOTIyMWQWAmYPFQESMTUuODYyLjg2Ny8wMDAxLTIzZAIBD2QWAmYPDxYEHwQFAjk1HwUFBjEyOTIyMWQWAmYPFQFNSUNBVFUgS0FESU1BIEZJRSBQUkVWSUTDik5DSUEgRkkgRU0gQ09UQVMgREUgRkkgTVVMVElNRVJDQURPIENSw4lESVRPIFBSSVZBRE9kAgIPZBYCZg8VAQJGSWRkI / irGxDBMroyYAki2pFnwoMly1l2 + cBq + ONjTHcerv4 =
__VIEWSTATEGENERATOR : C1E61A59
__EVENTVALIDATION : / wEdAAPqgm + GxVgEzMBMePAbhYfIMg2H5XKsza2QwUUYDO3mJqoHrwEVH8tMxFxzyspxY / D1K9FeRSMcx1Gh0goDhgR9PDDroWGMzZYdX + Zy5NSasA ==
__EVENTTARGET : ddlFundos$_ctl0$Linkbutton2
__EVENTARGUMENT :
Esses valores são obtidos dos campos hidden do form. O __EVENTTARGET é o parâmetro da função javascript acionada no link do CNPJ.
Testei no postam e retornou a página correta.
OliverG 12 de fev. de 2022
Lucas tem a possibilidade de compartilhar o código que fez os teste?
Pois configurei para o modelo que passou e não me retorna o código 302, mais e 200.
Segue o código que tenho até agora (Modificado com os parâmetros que passou)
import requests
URL = 'https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame='
Header = {
'__VIEWSTATE' : '/wEPDwUKLTYyMzAzNTAxMA8WBB4DQWRtBQVmYWxzZR4FVG9kb3NnFgICAQ9kFgQCBw88KwAJAGQCCQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AgFkFgJmD2QWAgIBD2QWAmYPZBYGZg9kFgJmDw8WBB4LQ29tbWFuZE5hbWUFAjk1Hg9Db21tYW5kQXJndW1lbnQFBjEyOTIyMWQWAmYPFQESMTUuODYyLjg2Ny8wMDAxLTIzZAIBD2QWAmYPDxYEHwQFAjk1HwUFBjEyOTIyMWQWAmYPFQFNSUNBVFUgS0FESU1BIEZJRSBQUkVWSUTDik5DSUEgRkkgRU0gQ09UQVMgREUgRkkgTVVMVElNRVJDQURPIENSw4lESVRPIFBSSVZBRE9kAgIPZBYCZg8VAQJGSWRkI/irGxDBMroyYAki2pFnwoMly1l2+cBq+ONjTHcerv4=' ,
'__VIEWSTATEGENERATOR' : 'C1E61A59' ,
'__EVENTVALIDATION' : '/wEdAAPqgm+GxVgEzMBMePAbhYfIMg2H5XKsza2QwUUYDO3mJqoHrwEVH8tMxFxzyspxY/D1K9FeRSMcx1Gh0goDhgR9PDDroWGMzZYdX+Zy5NSasA==' ,
'__EVENTTARGET' : 'ddlFundos$_ctl0$Linkbutton2' ,
'__EVENTARGUMENT' : '' ,
}
paginaInicial = requests . get ( URL , headers = Header )
print ( paginaInicial . status_code )
Lucas_Camara 13 de fev. de 2022
Eu fiz a requisição no postman, mas vou tentar fazer um código aqui e posto se funcionar.
De qualquer forma, esses parâmetros não devem ir no header, mas sim no corpo da requisição POST .
OliverG 13 de fev. de 2022
O header é os cabeçalhos, é a mesma coisa se tivessem na URL.
Se você conseguir compartilhar um código que me ajude nessa jornada, ficarei muito grato.
Um bom fim de semana,
Lucas_Camara 13 de fev. de 2022
Mas é o que estou dizendo, vc não deve passar no header esses valores: __VIEWSTATE , __VIEWSTATEGENERATOR , __EVENTVALIDATION , __EVENTTARGET , __EVENTARGUMENT . Eles devem ir no body da requisição POST , e não GET .
Lucas_Camara 13 de fev. de 2022
Consegui montar um exemplo executando no nodejs:
index.js
const axios = require ( 'axios' );
const viewState = encodeURIComponent ( '/wEPDwUKLTYyMzAzNTAxMA8WBB4DQWRtBQVmYWxzZR4FVG9kb3NnFgICAQ9kFgQCBw88KwAJAGQCCQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AgFkFgJmD2QWAgIBD2QWAmYPZBYGZg9kFgJmDw8WBB4LQ29tbWFuZE5hbWUFAjk1Hg9Db21tYW5kQXJndW1lbnQFBjEyOTIyMWQWAmYPFQESMTUuODYyLjg2Ny8wMDAxLTIzZAIBD2QWAmYPDxYEHwQFAjk1HwUFBjEyOTIyMWQWAmYPFQFNSUNBVFUgS0FESU1BIEZJRSBQUkVWSUTDik5DSUEgRkkgRU0gQ09UQVMgREUgRkkgTVVMVElNRVJDQURPIENSw4lESVRPIFBSSVZBRE9kAgIPZBYCZg8VAQJGSWRkI/irGxDBMroyYAki2pFnwoMly1l2+cBq+ONjTHcerv4=' );
const viewEventValidation = encodeURIComponent ( '/wEdAAPqgm+GxVgEzMBMePAbhYfIMg2H5XKsza2QwUUYDO3mJqoHrwEVH8tMxFxzyspxY/D1K9FeRSMcx1Gh0goDhgR9PDDroWGMzZYdX+Zy5NSasA==' );
const eventTarget = encodeURIComponent ( 'ddlFundos$_ctl0$Linkbutton2' );
let body = ` __VIEWSTATE =$ { viewState } & __VIEWSTATEGENERATOR = C1E61A59 & __EVENTVALIDATION =$ { viewEventValidation } & __EVENTTARGET =$ { eventTarget } & __EVENTARGUMENT = ` ;
axios ({
method : "POST" ,
url : "https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame=" ,
data : body ,
}) . then ( function ( response ) {
console . log ( response . data );
}) . catch ( function ( response ) {
console . error ( response );
});
package.json
{
"name" : "teste" ,
"version" : "1.0.0" ,
"description" : "" ,
"main" : "index.js" ,
"keywords" : [] ,
"author" : "" ,
"license" : "ISC" ,
"dependencies" : {
"axios" : "^0.25.0"
}
}
Jogue esses dois arquivos numa pasta e execute no terminal:
npm install
e depois
node index.js
Vai imprimir no terminal a página que é redirecionada pelo click no link do CNPJ.
O body da requisição é usando o content-type application/x-www-form-urlencoded, que é a forma padrão de como os forms são submetidos numa página web.
Veja mais: POST - HTTP | MDN
OliverG 13 de fev. de 2022
Lucas muito obrigado pela ajuda e atenção,
Precisava replicar isso em python, porem para mim não está funcionando.
Agradeço seu comprometimento em me ajudar, mas creio que não será possível finalizar, pois meu conhecimento ainda é pouco para realizar tal feito.
Solucao aceita
Lucas_Camara 13 de fev. de 2022
O bom de ajudar é que a gente acaba aprendendo uma coisa nova. Nunca tinha usado python (nunca me interessei na verdade), até aparecer essa sua dúvida. Então, já agradeço sua ajuda, vlw!
Consegui montar o código em python:
import requests
body = {
'__VIEWSTATE' : '/wEPDwUKLTYyMzAzNTAxMA8WBB4DQWRtBQVmYWxzZR4FVG9kb3NnFgICAQ9kFgQCBw88KwAJAGQCCQ88KwAJAQAPFgQeCERhdGFLZXlzFgAeC18hSXRlbUNvdW50AgFkFgJmD2QWAgIBD2QWAmYPZBYGZg9kFgJmDw8WBB4LQ29tbWFuZE5hbWUFAjk1Hg9Db21tYW5kQXJndW1lbnQFBjEyOTIyMWQWAmYPFQESMTUuODYyLjg2Ny8wMDAxLTIzZAIBD2QWAmYPDxYEHwQFAjk1HwUFBjEyOTIyMWQWAmYPFQFNSUNBVFUgS0FESU1BIEZJRSBQUkVWSUTDik5DSUEgRkkgRU0gQ09UQVMgREUgRkkgTVVMVElNRVJDQURPIENSw4lESVRPIFBSSVZBRE9kAgIPZBYCZg8VAQJGSWRkI/irGxDBMroyYAki2pFnwoMly1l2+cBq+ONjTHcerv4=' ,
'__VIEWSTATEGENERATOR' : 'C1E61A59' ,
'__EVENTVALIDATION' : '/wEdAAPqgm+GxVgEzMBMePAbhYfIMg2H5XKsza2QwUUYDO3mJqoHrwEVH8tMxFxzyspxY/D1K9FeRSMcx1Gh0goDhgR9PDDroWGMzZYdX+Zy5NSasA==' ,
'__EVENTTARGET' : 'ddlFundos$_ctl0$Linkbutton2' ,
'__EVENTARGUMENT' : ''
}
response = requests . post (
f 'https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame=' ,
data = body
)
print ( response . text )
Imagino que o código esteja bem tosco, mas fiz só para funcionar mesmo. Veja se tá ok. Abraços.
Pelo que fui lendo, o python é bem massa msm. O código ficou bem menor inclusive.
OliverG 14 de fev. de 2022 1 like
Olá Lucas, muito obrigado pelo seu retorno,
Testei aqui e funcionou perfeitamente,
Eu estava tentando pegar o status code 302, mas não precisava, pois ele retorna a Url correta.