A automação de tarefas é uma maneira simples de evitar trabalhos repetitivos, em especial, desejamos coletar dados de sites e por algum motivo, cada observação (ou grupo de observações) precisa ser "manualmente" solicitada.
Essa solicitação pode ser exigida por meio de captchas ou outro mecanismo, impedindo assim muitas consultas ao servidor alvo e garantindo estabilidade ao serviço.
Entretanto, algumas ferramentas auxiliam na construção de bots para a coleta dessas informações, processo esse conhecido como Web scraping. Dentre as ferramentas mais utilizadas, destaco o iMacro e rSelenium (baseado na solução Selenium).
Nesse post trabalharemos com o driver do navegador Chrome, para isso, o primeiro passo é obter esse driver:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #Limpa o workspace rm (list= ls ()) #Define o Working Directory setwd ( "C:/Users/RSelenium" ) #Instalação do RSelenium library (RSelenium) #Confere se o RSelenium está instalado checkForServer () #Baixa o driver: http://chromedriver.storage.googleapis.com/index.html bool<- FALSE bool<- file.exists ( "chromedriver.exe" ) if (!bool) { #Baixa o arquivo zip download.file (down, paste ( getwd (), "/chromedriver.zip" ,sep= "" )) #Extrai o arquivo unzip ( paste ( getwd (), "/chromedriver.zip" ,sep= "" )) #Deleta o arquivo file.remove (( paste ( getwd (), "/chromedriver.zip" ,sep= "" ))) } |
1 2 3 4 5 6 7 8 9 | #Inicia o servidor startServer (args = c ( paste ( "-Dwebdriver.chrome.driver=" , getwd (), "/chromedriver.exe -Dwebdriver.chrome.args='--disable-logging'" ,sep= "" )), log = FALSE , invisible = FALSE ) remDr <- remoteDriver (browserName = "chrome" ) #Abre o navegador remDr$ open () #Maximiza a janela remDr$ maxWindowSize () |
1 2 3 | #Vai para a pagina de interesse remDr$ navigate (site) |
1 2 3 4 | #Faz um printscreen do site library (base64enc) img<-remDr$ screenshot (display = FALSE , useViewer = TRUE , file = NULL ) writeBin ( base64Decode (img, "raw" ), 'site.png' ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #Exemplo de captcha solucionado txt<- "TOWIT" #Encontra o objeto da caixa de texto webElem <- remDr$ findElement (using = "name" , "codigo_captcha" ) #Manda o resultado do captcha webElem$ sendKeysToElement ( list (txt)) #Encontra o objeto do botão de submit webElem <- remDr$ findElement (using = "name" , "submit" ) #Clica no botão webElem$ clickElement () #Fecha as conexões remDr$ close () remDr$ closeServer () |