Ajuda para encontra o Parâmetro Partic

Olá Pessoal boa noite,

Estou tentando fazer um scrapper para o site abaixo.

(https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/ResultBuscaParticFdo.aspx?CNPJNome=15.862.867/0001-23&TpPartic=0&Adm=false&SemFrame=)

Quando você acessa esse link e clica sobre o CNPJ você é redirecionado para uma outra pagina, como estou trabalhando com requets estou fazendo o get, porem quando tento simular para acessar o link, ele gera um link e nesse link tem o parâmetro PK_PARTIC.

E não consigo encontra de forma nenhuma onde que gera esse valor para que eu possa dar sequência.

Se alguém poder me ajudar ficarei muito agradecido.

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.

Lucas retificando,

Consegui entender a ideia, mas como acesso o location?

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)

Os headers foram impressos? O location retornou dessa forma q tu fez?

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.

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.

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)

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.

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,

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.

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

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.

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.

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.

1 curtida