Tutorial de Uso do R Selenium

32
Tutorial de uso do RSelenium Daniel Marcelino 07 de junho de 2015 Daniel Marcelino RSelenium 07 de junho de 2015 1 / 32

Transcript of Tutorial de Uso do R Selenium

Page 1: Tutorial de Uso do R Selenium

Tutorial de usodo RSelenium

Daniel Marcelino

07 de junho de 2015

Daniel Marcelino RSelenium 07 de junho de 2015 1 / 32

Page 2: Tutorial de Uso do R Selenium

Apresentacao

1 IntroducaoInstalacaoComandos Basicos

2 Estrutura Basicaidclasscss-selectornamexpathAtributos

3 Manipulacao da paginaPressionar TeclasIdentificar diversos elementosClicar em um elementoDownload PDF

4 Referencias

Daniel Marcelino RSelenium 07 de junho de 2015 2 / 32

Page 3: Tutorial de Uso do R Selenium

Introducao

O que e o RSelenium?

O RSelenium e um pacote no R que permite a manipulacao de browsersde internet (Chrome, Firefox, Explorer) por meio de um aplicativo externoem Java. O Selenium e um projeto utilizado em diversas linguagens deprogramacao.

Mais informacoes podem ser encontradas no manual.

http://cran.r-project.org/web/packages/RSelenium/RSelenium.pdf

Daniel Marcelino RSelenium 07 de junho de 2015 3 / 32

Page 4: Tutorial de Uso do R Selenium

Introducao

Para utilizar o RSelenium e necessario instalar o pacote ”RSelenium” eatualizar o aplicativo externo em Java que o pacote utiliza. Felizmenteisso pode ser realizado dentro do R:

## Programac~ao para instalac~ao e atualizac~ao do RSelenium

install.packages(’RSelenium’)

require(’RSelenium’)

RSelenium::checkForServer()

(O pacote so funciona para versoes do R acima da 3.1.0)

Daniel Marcelino RSelenium 07 de junho de 2015 4 / 32

Page 5: Tutorial de Uso do R Selenium

Selenium Server

Caso deseje abrir o browser na mesma maquina, e necessario utilizar umserver do Selenium.

## Programac~ao para abrir o servidor local do RSelenium

RSelenium::checkForServer()

RSelenium::startServer()

remDr <- remDr <- remoteDriver(remoteServerAddr = "localhost"

, port = 4444

, browserName = "firefox"

)

remDr$open()

A programacao iniciara um browser (Firefox por padrao) que podera sercontrolado por comandos em sua sessao do R.

Daniel Marcelino RSelenium 07 de junho de 2015 5 / 32

Page 6: Tutorial de Uso do R Selenium

Selenium Server

O aplicativo baixado pelo comando checkForServer() pode ser encontradoneste LINK, e instalado manualmente na sua pasta de pacotes do R.

E possıvel modificar o browser utilizado (para Chrome, etc...). Para isso enecessario a instalacao de extensoes disponıveis na internet, elas nao saoinstaladas por padrao.

No IPEA e necessario pedir para atualizarem manualmente o aplicativopois o downlaod automatico e bloqueado. Apos o iniciado o browser,algumas vezes e necessario acessar alguma pagina qualquer manualmentepara que os comandos via R comecem a funcionar (Nao sei o motivo).

Daniel Marcelino RSelenium 07 de junho de 2015 6 / 32

Page 7: Tutorial de Uso do R Selenium

Selenium Server

Apos iniciado server, para obter informacoes sobre o servidor e da conexao,basta utilizar a funcao:

## Func~ao retorna status da conex~ao

remDr$getStatus()

Daniel Marcelino RSelenium 07 de junho de 2015 7 / 32

Page 8: Tutorial de Uso do R Selenium

Comandos Basicos

Os comandos a seguir sao os comandos basicos para navegacao utilizandoo browser do RSelenium:

## Func~ao diz um endereco para o browser acessar

remDr$navigate("http://www.google.com")## Diz qual a pagina que o browser esta no momento

remDr$getCurrentUrl()## Retorna para a pagina anterior do browser

remDr$goBack()## Avanca para a ultima tela acessada pelo browser

remDr$goForward()## Carrega novamente a pagina atual

remDr$refresh()

Daniel Marcelino RSelenium 07 de junho de 2015 8 / 32

Page 9: Tutorial de Uso do R Selenium

Estrutura Basica

O Modelo de Objeto de Documento (do ingles Document Object Model -DOM) e uma convencao multiplataforma e independente de linguagempara representacao e interacao com objetos em documentos HTML,XHTML e XML.

Para realizar extracoes de paginas com esse formato, e necessario entendercomo ele e organizado.

Daniel Marcelino RSelenium 07 de junho de 2015 9 / 32

Page 10: Tutorial de Uso do R Selenium

Estrutura Basica

Se voce acessar a pagina do Google, vera que o codigo da pagina segueesse modelo.Inspecionando a barra de busca voce vera o seguinte codigo:

Figura: Codigo da barra de busca

Daniel Marcelino RSelenium 07 de junho de 2015 10 / 32

Page 11: Tutorial de Uso do R Selenium

Estrutura Basica

A forma mais comum de se procurar alguma informacao em um DOM eutilizando alguma das seguintes estruturas:

id

class

css-selector

name

xpath

O comando no R para buscar um objeto com algum desses caminhos e:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement()

Daniel Marcelino RSelenium 07 de junho de 2015 11 / 32

Page 12: Tutorial de Uso do R Selenium

Estrutura Basica - id

Id’s sao unicos para cada elemento de uma pagina, entao um id se referea apenas um objeto na pagina. Voce pode identificar o id de um objetoinspecionando o mesmo e procurando em seu codigo.

Figura: Codigo id

Daniel Marcelino RSelenium 07 de junho de 2015 12 / 32

Page 13: Tutorial de Uso do R Selenium

Estrutura Basica - id

O codigo para buscar o elemento na pagina seria entao:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement(using = "id", "lst-ib")

Daniel Marcelino RSelenium 07 de junho de 2015 13 / 32

Page 14: Tutorial de Uso do R Selenium

Estrutura Basica - class

Voce tambem pode identificar um objeto por sua class. Um objeto podepossuir multiplas classes.

Figura: Codigo class

Daniel Marcelino RSelenium 07 de junho de 2015 14 / 32

Page 15: Tutorial de Uso do R Selenium

Estrutura Basica - class

O codigo para buscar o elemento na pagina seria entao:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement(using = "class name", "gsfi")

Daniel Marcelino RSelenium 07 de junho de 2015 15 / 32

Page 16: Tutorial de Uso do R Selenium

Estrutura Basica - css-selector

Os css-selectors podem ser usados para identificar objetos com mesmosparentes. “#” e utilizado para caminhos de id e “.” para caminhos declass.

Figura: Codigo css-selector

Daniel Marcelino RSelenium 07 de junho de 2015 16 / 32

Page 17: Tutorial de Uso do R Selenium

Estrutura Basica - css-selector

O codigo para buscar o elemento na pagina seria entao:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement(using = "css selector", "#lst-ib")

Mais dicas sobre css-selectors podem ser encontradas aqui.

Daniel Marcelino RSelenium 07 de junho de 2015 17 / 32

Page 18: Tutorial de Uso do R Selenium

Estrutura Basica - name

Nao e muito comum a utilizacao de names na busca de um objeto, poisvarios objetos podem possuir o mesmo name, dificultando a identificacao.

Figura: Codigo name

Daniel Marcelino RSelenium 07 de junho de 2015 18 / 32

Page 19: Tutorial de Uso do R Selenium

Estrutura Basica - name

O codigo para buscar o elemento na pagina seria entao:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement(using = "name", "q")

Daniel Marcelino RSelenium 07 de junho de 2015 19 / 32

Page 20: Tutorial de Uso do R Selenium

Estrutura Basica - xpath

O meio mais utilizado para busca de objetos e o xpath pois pode serfacilmente obtido e indica diretamente o objeto que se deseja.

Figura: Codigo xpath

Daniel Marcelino RSelenium 07 de junho de 2015 20 / 32

Page 21: Tutorial de Uso do R Selenium

Estrutura Basica - xpath

O codigo para buscar o elemento na pagina seria entao:

## Func~ao para buscar um objeto na pagina

webElem <- remDr$findElement(using = "xpath",

"//*[@id=’lst-ib’]")

Daniel Marcelino RSelenium 07 de junho de 2015 21 / 32

Page 22: Tutorial de Uso do R Selenium

Estrutura Basica - Atributos

Caso voce identifique o objeto de interesse, e possıvel verificar seus outrosatributos por meio do comando “webElem$getElementAttribute()”:

## Func~ao para obter os atributos de um objeto

webElem$getElementAttribute("class")webElem$getElementAttribute("type")webElem$getElementAttribute("name")webElem$getElementAttribute("id")

Isso e util caso voce identifique o objeto por um atributo mas desejeutilizar outro.

Daniel Marcelino RSelenium 07 de junho de 2015 22 / 32

Page 23: Tutorial de Uso do R Selenium

Manipulacao da pagina

Apos identificado um objeto de interesse, voce pode querer interagir comele, seja enviando um texto ou selecionando uma opcao. O RSeleniumtorna possıvel essa interacao.

O comando “webElem$sendKeysToElement” envia uma acao para seuobjeto selecionado:

## Func~ao enviar ac~ao

remDr$navigate("http://www.google.com/")webElem <- remDr$findElement(using = "xpath",

"//*[@id=’lst-ib’]")

webElem$sendKeysToElement(list("IPEA"))

Esse comando escrevera “IPEA” na barra de texto do Google.

Daniel Marcelino RSelenium 07 de junho de 2015 23 / 32

Page 24: Tutorial de Uso do R Selenium

Manipulacao da pagina

Voce pode desejar enviar acoes que nao sejam texto, por exemplo,pressionar “Enter”. O quadro abaixo mostra a relacao de todos os codigosrelacionados a uma tecla.

Figura: Comandos

Daniel Marcelino RSelenium 07 de junho de 2015 24 / 32

Page 25: Tutorial de Uso do R Selenium

Manipulacao da pagina

Entao para escrever “IPEA” e pressionar “Enter”, e necessario o seguintecomando:

## Func~ao enviar ac~ao

remDr$navigate("http://www.google.com/")webElem <- remDr$findElement(using = "xpath",

"//*[@id=’lst-ib’]")

webElem$sendKeysToElement(list("IPEA", "\uE007"))

Pois “uE007” e o codigo associado a tecla “Enter”

Daniel Marcelino RSelenium 07 de junho de 2015 25 / 32

Page 26: Tutorial de Uso do R Selenium

Identificando diversos elementos

Se quisermos agora verificar os nomes que aparecem no resultado dabusca, veja que teremos diversos “blocos”, onde cada bloco e um dosresultados da pesquisa.

Figura: Nomes

Daniel Marcelino RSelenium 07 de junho de 2015 26 / 32

Page 27: Tutorial de Uso do R Selenium

Identificando diversos elementos

Veja que cada bloco esta aninhado em <li class = ”g”> e o texto em <h3class = ”r”>, como o link se encontra no a e necessario acessa-lotambem. Entao e necessario acessar cada um desses blocos para obter osnomes que desejamos:

## Func~ao identificar textos

webElems <- remDr$findElements(using = ’css selector’, "li.g

h3.r a")

resHeaders <- unlist(lapply(webElems,

function(x){x$getElementText()}))resHeaders

Veja que como o objeto “webElems” agora e uma lista, pois possui cadabloco separado. Para obtermos o texto que esta em cada bloco utilizamoso comando “getElementText()” em cada elemento da lista com a funcaolapply.

Daniel Marcelino RSelenium 07 de junho de 2015 27 / 32

Page 28: Tutorial de Uso do R Selenium

Identificando diversos elementos

A programacao nos retorna o seguinte resultado:

Figura: Resultado da funcao

Daniel Marcelino RSelenium 07 de junho de 2015 28 / 32

Page 29: Tutorial de Uso do R Selenium

Clicar em um elemento

Digamos que nosso interesse seja acessar a pagina de chamadas publicasdo IPEA, entao precisamos selecionar o elemento de chamadas publicas eclicar nele com a funcao “clickElement()”:

## Func~ao clicar

webElem <- webElems[[which(resHeaders == "Chamadas Publicas")]]

webElem$clickElement()

Daniel Marcelino RSelenium 07 de junho de 2015 29 / 32

Page 30: Tutorial de Uso do R Selenium

Clicar em um elemento

Seguindo a mesma logica, e simples acessar os links de chamadas publicasdo IPEA:

#Identificar os nomes da busca no site do IPEA

webElems <- remDr$findElements(using = ’css selector’,

"div#conteudo p a")

resHeaders <- unlist(lapply(webElems,

function(x){x$getElementText()}))#Clicar nas chamadas mais recentes

webElem <- webElems[[1]]

webElem$clickElement()#Selecionar uma chamada

webElems <- remDr$findElements(using = ’css selector’,

"div#conteudo li a")

resHeaders <- unlist(lapply(webElems,

function(x){x$getElementText()}))webElem <- webElems[[1]]

webElem$clickElement()

Daniel Marcelino RSelenium 07 de junho de 2015 30 / 32

Page 31: Tutorial de Uso do R Selenium

Clicar em um elemento

Para fazer download do PDF da chamada e necessario pegar o link eutilizar o comando interno do R “download.file()”:

#Identificar PDF

webElems <- remDr$findElements(using = ’css selector’,

"div#conteudo p a")

resHeaders <- unlist(lapply(webElems,

function(x){x$getElementAttribute(’href’)}))#Download do PDF

download.file(resHeaders[1],’Chamada.pdf’,mode=’wb’)

Voce pode definir o nome que quiser e o local que deseja salvar o PDF.

Daniel Marcelino RSelenium 07 de junho de 2015 31 / 32

Page 32: Tutorial de Uso do R Selenium

Clicar em um elemento

Este foi um tutorial ensinando o basico para utilizar o RSelenium, maisinformacoes podem ser encontradas no help e neste site que utilizei comobase para este tutorial. Link

Qualquer duvida ou correcao me mandar um e-mail:[email protected]

Daniel Marcelino RSelenium 07 de junho de 2015 32 / 32