Como importar arquivo que esta em um export buttom web

Pessoal, tudo bem?

Como eu posso criar uma rotina de importar determinado arquivo que esta alocado em um export button na web?

Veja o link:

https://servicos2.sjc.sp.gov.br/servicos/portal_da_transparencia/despesa_fornecedor.aspx

O botao de exportar o arquivo esta nesse link abaixo:

javascript:__doPostBack(‘ctl00$ctl00$ctl00$ctl00$ContentPlaceHolderDefault$modelo_master_meio$modelo_uma_coluna_meio$ctl02$Transp_DespesasFornecedores_v2_6$lnkExportarFornecedores’,’’)

Quero tornar esse processo automatizado de tal forma que todo dia 01, seja feita essa rotina e o resultado seja salvo em um dataframe.

Partial solution:

url <- "https://servicos2.sjc.sp.gov.br/servicos/portal_da_transparencia/despesa_fornecedor.aspx"
source <- readLines(url, encoding = "UTF-8")
parsed_doc <- htmlParse(source, encoding = "UTF-8")
export_buttom <- xpathSApply(parsed_doc, path = '//*[@id="ctl00_ctl00_ctl00_ctl00_ContentPlaceHolderDefault_modelo_master_meio_modelo_uma_coluna_meio_ctl02_Transp_DespesasFornecedores_v2_6_lnkExportarFornecedores"]', xmlValue)

Agradeco as dicas!

Abs,

Salerno

Oi, @andresalerno. Segue uma solução que encontrei na internet adaptada de uma resposta de outra dúvida que o @jtrecenti me ajudou aqui no fórum. Ela baixa o arquivo csv no seu diretório de trabalho.

Uma dúvida que fiquei, talvez o @jtrecenti ou @clente possam ajudar, é pq não consigo pegar o __EVENTTARGET automaticamente? Será que existe outro jeito de fazer que pegue esse parâmetro automaticamente?

# pacotes 
library(rvest)
library(httr)
library(xml2)

# acessa pagina inicial
r0 <- httr::GET("https://servicos2.sjc.sp.gov.br/servicos/portal_da_transparencia/despesa_fornecedor.aspx")

# pega parâmetros que dependem da sessão
vs <- r0 %>% 
  xml2::read_html() %>% 
  xml2::xml_find_first("//*[@id='__VIEWSTATE']") %>% 
  xml2::xml_attr("value")

vs_gen <- r0 %>% 
  xml2::read_html() %>% 
  xml2::xml_find_first("//*[@id='__VIEWSTATEGENERATOR']") %>% 
  xml2::xml_attr("value")

## Não funciona!!!! Pq será?
ev_targ <- r0 %>% 
  xml2::read_html() %>%  
  xml2::xml_find_first("//*[@id='__EVENTTARGET']") %>% 
  xml2::xml_attr("value")

# escreve os parâmetros (obtido automaticamente menos EVENTTARGET)
pg <- content(r0, as = "parsed")
for_post <- html_nodes(pg, "input[type='hidden']")

parametros <- as.list(
  c(
    setNames(
      html_attr(for_post, "value"),
      html_attr(for_post, "id")
    ),
    `__EVENTTARGET` = "ctl00$ctl00$ctl00$ctl00$ContentPlaceHolderDefault$modelo_master_meio$modelo_uma_coluna_meio$ctl02$Transp_DespesasFornecedores_v2_6$lnkExportarFornecedores"
  )
)


# escreve os parâmetros (obtive da aba "Network")
parametros_teste <- list(
  "__VIEWSTATE" = vs,
  "__VIEWSTATEGENERATOR" = vs_gen,
  "__VIEWSTATEENCRYPTED" = "",
  "__EVENTTARGET" = "ctl00$ctl00$ctl00$ctl00$ContentPlaceHolderDefault$modelo_master_meio$modelo_uma_coluna_meio$ctl02$Transp_DespesasFornecedores_v2_6$lnkExportarFornecedores"
)


# Salva csv.
res <- httr::POST("https://servicos2.sjc.sp.gov.br/servicos/portal_da_transparencia/despesa_fornecedor.aspx",
  body = parametros_teste,
  write_disk("fornecedores.csv", overwrite = TRUE),
  progress()
)

teste <- vroom::vroom(file = 'fornecedores.csv', locale = vroom::locale(encoding = "CP1252"))
1 curtida