SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Tutorial de uso
do RSelenium
Daniel Marcelino
07 de junho de 2015
Daniel Marcelino RSelenium 07 de junho de 2015 1 / 32
Apresenta¸c˜ao
1 Introdu¸c˜ao
Instala¸c˜ao
Comandos B´asicos
2 Estrutura B´asica
id
class
css-selector
name
xpath
Atributos
3 Manipula¸c˜ao da p´agina
Pressionar Teclas
Identificar diversos elementos
Clicar em um elemento
Download PDF
4 Referˆencias
Daniel Marcelino RSelenium 07 de junho de 2015 2 / 32
Introdu¸c˜ao
O que ´e o RSelenium?
O RSelenium ´e um pacote no R que permite a manipula¸c˜ao de browsers
de internet (Chrome, Firefox, Explorer) por meio de um aplicativo externo
em Java. O Selenium ´e um projeto utilizado em diversas linguagens de
programa¸c˜ao.
Mais informa¸c˜oes 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
Introdu¸c˜ao
Para utilizar o RSelenium ´e necess´ario instalar o pacote ”RSelenium” e
atualizar o aplicativo externo em Java que o pacote utiliza. Felizmente
isso pode ser realizado dentro do R:
## Programa¸c~ao para instala¸c~ao e atualiza¸c~ao do RSelenium
install.packages(’RSelenium’)
require(’RSelenium’)
RSelenium::checkForServer()
(O pacote s´o funciona para vers˜oes do R acima da 3.1.0)
Daniel Marcelino RSelenium 07 de junho de 2015 4 / 32
Selenium Server
Caso deseje abrir o browser na mesma m´aquina, ´e necess´ario utilizar um
server do Selenium.
## Programa¸c~ao para abrir o servidor local do RSelenium
RSelenium::checkForServer()
RSelenium::startServer()
remDr <- remDr <- remoteDriver(remoteServerAddr = "localhost"
, port = 4444
, browserName = "firefox"
)
remDr$open()
A programa¸c˜ao iniciar´a um browser (Firefox por padr˜ao) que poder´a ser
controlado por comandos em sua sess˜ao do R.
Daniel Marcelino RSelenium 07 de junho de 2015 5 / 32
Selenium Server
O aplicativo baixado pelo comando checkForServer() pode ser encontrado
neste LINK, e instalado manualmente na sua pasta de pacotes do R.
´E poss´ıvel modificar o browser utilizado (para Chrome, etc...). Para isso ´e
necess´ario a instala¸c˜ao de extens˜oes dispon´ıveis na internet, elas n˜ao s˜ao
instaladas por padr˜ao.
No IPEA ´e necess´ario pedir para atualizarem manualmente o aplicativo
pois o downlaod autom´atico ´e bloqueado. Ap´os o iniciado o browser,
algumas vezes ´e necess´ario acessar alguma p´agina qualquer manualmente
para que os comandos via R comecem a funcionar (N˜ao sei o motivo).
Daniel Marcelino RSelenium 07 de junho de 2015 6 / 32
Selenium Server
Ap´os iniciado server, para obter informa¸c˜oes sobre o servidor e da conex˜ao,
basta utilizar a fun¸c˜ao:
## Fun¸c~ao retorna status da conex~ao
remDr$getStatus()
Daniel Marcelino RSelenium 07 de junho de 2015 7 / 32
Comandos B´asicos
Os comandos a seguir s˜ao os comandos b´asicos para navega¸c˜ao utilizando
o browser do RSelenium:
## Fun¸c~ao diz um endere¸co para o browser acessar
remDr$navigate("http://www.google.com")
## Diz qual a p´agina que o browser est´a no momento
remDr$getCurrentUrl()
## Retorna para a p´agina anterior do browser
remDr$goBack()
## Avan¸ca para a ´ultima tela acessada pelo browser
remDr$goForward()
## Carrega novamente a p´agina atual
remDr$refresh()
Daniel Marcelino RSelenium 07 de junho de 2015 8 / 32
Estrutura B´asica
O Modelo de Objeto de Documento (do inglˆes Document Object Model -
DOM) ´e uma conven¸c˜ao multiplataforma e independente de linguagem
para representa¸c˜ao e intera¸c˜ao com objetos em documentos HTML,
XHTML e XML.
Para realizar extra¸c˜oes de p´aginas com esse formato, ´e necess´ario entender
como ele ´e organizado.
Daniel Marcelino RSelenium 07 de junho de 2015 9 / 32
Estrutura B´asica
Se vocˆe acessar a p´agina do Google, ver´a que o c´odigo da p´agina segue
esse modelo.
Inspecionando a barra de busca vocˆe ver´a o seguinte c´odigo:
Figura: C´odigo da barra de busca
Daniel Marcelino RSelenium 07 de junho de 2015 10 / 32
Estrutura B´asica
A forma mais comum de se procurar alguma informa¸c˜ao em um DOM ´e
utilizando alguma das seguintes estruturas:
id
class
css-selector
name
xpath
O comando no R para buscar um objeto com algum desses caminhos ´e:
## Fun¸c~ao para buscar um objeto na p´agina
webElem <- remDr$findElement()
Daniel Marcelino RSelenium 07 de junho de 2015 11 / 32
Estrutura B´asica - id
Id’s s˜ao ´unicos para cada elemento de uma p´agina, ent˜ao um id se refere
a apenas um objeto na p´agina. Vocˆe pode identificar o id de um objeto
inspecionando o mesmo e procurando em seu c´odigo.
Figura: C´odigo id
Daniel Marcelino RSelenium 07 de junho de 2015 12 / 32
Estrutura B´asica - id
O c´odigo para buscar o elemento na p´agina seria ent˜ao:
## Fun¸c~ao para buscar um objeto na p´agina
webElem <- remDr$findElement(using = "id", "lst-ib")
Daniel Marcelino RSelenium 07 de junho de 2015 13 / 32
Estrutura B´asica - class
Vocˆe tamb´em pode identificar um objeto por sua class. Um objeto pode
possuir m´ultiplas classes.
Figura: C´odigo class
Daniel Marcelino RSelenium 07 de junho de 2015 14 / 32
Estrutura B´asica - class
O c´odigo para buscar o elemento na p´agina seria ent˜ao:
## Fun¸c~ao para buscar um objeto na p´agina
webElem <- remDr$findElement(using = "class name", "gsfi")
Daniel Marcelino RSelenium 07 de junho de 2015 15 / 32
Estrutura B´asica - css-selector
Os css-selectors podem ser usados para identificar objetos com mesmos
parentes. “#” ´e utilizado para caminhos de id e “.” para caminhos de
class.
Figura: C´odigo css-selector
Daniel Marcelino RSelenium 07 de junho de 2015 16 / 32
Estrutura B´asica - css-selector
O c´odigo para buscar o elemento na p´agina seria ent˜ao:
## Fun¸c~ao para buscar um objeto na p´agina
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
Estrutura B´asica - name
N˜ao ´e muito comum a utiliza¸c˜ao de names na busca de um objeto, pois
v´arios objetos podem possuir o mesmo name, dificultando a identifica¸c˜ao.
Figura: C´odigo name
Daniel Marcelino RSelenium 07 de junho de 2015 18 / 32
Estrutura B´asica - name
O c´odigo para buscar o elemento na p´agina seria ent˜ao:
## Fun¸c~ao para buscar um objeto na p´agina
webElem <- remDr$findElement(using = "name", "q")
Daniel Marcelino RSelenium 07 de junho de 2015 19 / 32
Estrutura B´asica - xpath
O meio mais utilizado para busca de objetos ´e o xpath pois pode ser
facilmente obtido e indica diretamente o objeto que se deseja.
Figura: C´odigo xpath
Daniel Marcelino RSelenium 07 de junho de 2015 20 / 32
Estrutura B´asica - xpath
O c´odigo para buscar o elemento na p´agina seria ent˜ao:
## Fun¸c~ao para buscar um objeto na p´agina
webElem <- remDr$findElement(using = "xpath",
"//*[@id=’lst-ib’]")
Daniel Marcelino RSelenium 07 de junho de 2015 21 / 32
Estrutura B´asica - Atributos
Caso vocˆe identifique o objeto de interesse, ´e poss´ıvel verificar seus outros
atributos por meio do comando “webElem$getElementAttribute()”:
## Fun¸c~ao para obter os atributos de um objeto
webElem$getElementAttribute("class")
webElem$getElementAttribute("type")
webElem$getElementAttribute("name")
webElem$getElementAttribute("id")
Isso ´e ´util caso vocˆe identifique o objeto por um atributo mas deseje
utilizar outro.
Daniel Marcelino RSelenium 07 de junho de 2015 22 / 32
Manipula¸c˜ao da p´agina
Ap´os identificado um objeto de interesse, vocˆe pode querer interagir com
ele, seja enviando um texto ou selecionando uma op¸c˜ao. O RSelenium
torna poss´ıvel essa intera¸c˜ao.
O comando “webElem$sendKeysToElement” envia uma a¸c˜ao para seu
objeto selecionado:
## Fun¸c~ao enviar a¸c~ao
remDr$navigate("http://www.google.com/")
webElem <- remDr$findElement(using = "xpath",
"//*[@id=’lst-ib’]")
webElem$sendKeysToElement(list("IPEA"))
Esse comando escrever´a “IPEA” na barra de texto do Google.
Daniel Marcelino RSelenium 07 de junho de 2015 23 / 32
Manipula¸c˜ao da p´agina
Vocˆe pode desejar enviar a¸c˜oes que n˜ao sejam texto, por exemplo,
pressionar “Enter”. O quadro abaixo mostra a rela¸c˜ao de todos os c´odigos
relacionados a uma tecla.
Figura: Comandos
Daniel Marcelino RSelenium 07 de junho de 2015 24 / 32
Manipula¸c˜ao da p´agina
Ent˜ao para escrever “IPEA” e pressionar “Enter”, ´e necess´ario o seguinte
comando:
## Fun¸c~ao enviar a¸c~ao
remDr$navigate("http://www.google.com/")
webElem <- remDr$findElement(using = "xpath",
"//*[@id=’lst-ib’]")
webElem$sendKeysToElement(list("IPEA", "uE007"))
Pois “uE007” ´e o c´odigo associado a tecla “Enter”
Daniel Marcelino RSelenium 07 de junho de 2015 25 / 32
Identificando diversos elementos
Se quisermos agora verificar os nomes que aparecem no resultado da
busca, veja que teremos diversos “blocos”, onde cada bloco ´e um dos
resultados da pesquisa.
Figura: Nomes
Daniel Marcelino RSelenium 07 de junho de 2015 26 / 32
Identificando diversos elementos
Veja que cada bloco est´a aninhado em <li class = ”g”> e o texto em <h3
class = ”r”>, como o link se encontra no a ´e necess´ario acess´a-lo
tamb´em. Ent˜ao ´e necess´ario acessar cada um desses blocos para obter os
nomes que desejamos:
## Fun¸c~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 cada
bloco separado. Para obtermos o texto que est´a em cada bloco utilizamos
o comando “getElementText()” em cada elemento da lista com a fun¸c˜ao
lapply.
Daniel Marcelino RSelenium 07 de junho de 2015 27 / 32
Identificando diversos elementos
A programa¸c˜ao nos retorna o seguinte resultado:
Figura: Resultado da fun¸c˜ao
Daniel Marcelino RSelenium 07 de junho de 2015 28 / 32
Clicar em um elemento
Digamos que nosso interesse seja acessar a p´agina de chamadas p´ublicas
do IPEA, ent˜ao precisamos selecionar o elemento de chamadas p´ublicas e
clicar nele com a fun¸c˜ao “clickElement()”:
## Fun¸c~ao clicar
webElem <- webElems[[which(resHeaders == "Chamadas P´ublicas")]]
webElem$clickElement()
Daniel Marcelino RSelenium 07 de junho de 2015 29 / 32
Clicar em um elemento
Seguindo a mesma l´ogica, ´e simples acessar os links de chamadas p´ublicas
do 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
Clicar em um elemento
Para fazer download do PDF da chamada ´e necess´ario pegar o link e
utilizar 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’)
Vocˆe pode definir o nome que quiser e o local que deseja salvar o PDF.
Daniel Marcelino RSelenium 07 de junho de 2015 31 / 32
Clicar em um elemento
Este foi um tutorial ensinando o b´asico para utilizar o RSelenium, mais
informa¸c˜oes podem ser encontradas no help e neste site que utilizei como
base para este tutorial. Link
Qualquer d´uvida ou corre¸c˜ao me mandar um e-mail:
daniel.silva@ipea.gov.br
Daniel Marcelino RSelenium 07 de junho de 2015 32 / 32

Mais conteúdo relacionado

Mais procurados

Data types in python lecture (2)
Data types in python lecture (2)Data types in python lecture (2)
Data types in python lecture (2)Ali ٍSattar
 
Python-02| Input, Output & Import
Python-02| Input, Output & ImportPython-02| Input, Output & Import
Python-02| Input, Output & ImportMohd Sajjad
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
Introduction to Python GUI development with Delphi for Python - Part 1:   Del...Introduction to Python GUI development with Delphi for Python - Part 1:   Del...
Introduction to Python GUI development with Delphi for Python - Part 1: Del...Embarcadero Technologies
 
Data Structures in Python
Data Structures in PythonData Structures in Python
Data Structures in PythonDevashish Kumar
 
3.2 insertion sort
3.2 insertion sort3.2 insertion sort
3.2 insertion sortKrish_ver2
 
Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1SURBHI SAROHA
 
Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Muhammad Hammad Waseem
 
Dictionaries and Sets in Python
Dictionaries and Sets in PythonDictionaries and Sets in Python
Dictionaries and Sets in PythonRaajendra M
 
Top 100 Python Interview Questions And Answers
Top 100 Python Interview Questions And AnswersTop 100 Python Interview Questions And Answers
Top 100 Python Interview Questions And AnswersProBytes
 
Data Structure and Algorithms Heaps and Trees
Data Structure and Algorithms Heaps and TreesData Structure and Algorithms Heaps and Trees
Data Structure and Algorithms Heaps and TreesManishPrajapati78
 

Mais procurados (20)

Quick_sort1.pptx
Quick_sort1.pptxQuick_sort1.pptx
Quick_sort1.pptx
 
Data types in python lecture (2)
Data types in python lecture (2)Data types in python lecture (2)
Data types in python lecture (2)
 
Stack a Data Structure
Stack a Data StructureStack a Data Structure
Stack a Data Structure
 
Python-02| Input, Output & Import
Python-02| Input, Output & ImportPython-02| Input, Output & Import
Python-02| Input, Output & Import
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
Introduction to Python GUI development with Delphi for Python - Part 1:   Del...Introduction to Python GUI development with Delphi for Python - Part 1:   Del...
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
 
Queue
QueueQueue
Queue
 
Data Structures in Python
Data Structures in PythonData Structures in Python
Data Structures in Python
 
Sorting
SortingSorting
Sorting
 
Shell sort
Shell sortShell sort
Shell sort
 
Smart pointers
Smart pointersSmart pointers
Smart pointers
 
3.2 insertion sort
3.2 insertion sort3.2 insertion sort
3.2 insertion sort
 
Lecture 18 - Pointers
Lecture 18 - PointersLecture 18 - Pointers
Lecture 18 - Pointers
 
Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]Data Structures - Lecture 7 [Linked List]
Data Structures - Lecture 7 [Linked List]
 
Dictionaries and Sets in Python
Dictionaries and Sets in PythonDictionaries and Sets in Python
Dictionaries and Sets in Python
 
C# classes objects
C#  classes objectsC#  classes objects
C# classes objects
 
Top 100 Python Interview Questions And Answers
Top 100 Python Interview Questions And AnswersTop 100 Python Interview Questions And Answers
Top 100 Python Interview Questions And Answers
 
Data Structure and Algorithms Heaps and Trees
Data Structure and Algorithms Heaps and TreesData Structure and Algorithms Heaps and Trees
Data Structure and Algorithms Heaps and Trees
 

Destaque

Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...
Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...
Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...RAMIROPALACIOS21
 
Attendance powerpoint new we170317
Attendance powerpoint new we170317Attendance powerpoint new we170317
Attendance powerpoint new we170317laytonschool
 
Fuentes de alimentacion lineales
Fuentes de alimentacion linealesFuentes de alimentacion lineales
Fuentes de alimentacion linealesACI MASER
 
Lamparas fluorescentes y compactas
Lamparas fluorescentes y compactasLamparas fluorescentes y compactas
Lamparas fluorescentes y compactasACI MASER
 
Instituto oficial patria
Instituto oficial patriaInstituto oficial patria
Instituto oficial patriaBessybarahona
 
Face histórica dos direitos humanos
Face histórica dos direitos humanosFace histórica dos direitos humanos
Face histórica dos direitos humanosLua Miziara
 

Destaque (9)

S4 tarea4 hecig
S4 tarea4 hecigS4 tarea4 hecig
S4 tarea4 hecig
 
Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...
Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...
Habilidades c3 m5_ramiro_palacios_actividad-diagnostico-personal-y-organizaci...
 
รายงานผลการประชุมประชาคม
รายงานผลการประชุมประชาคมรายงานผลการประชุมประชาคม
รายงานผลการประชุมประชาคม
 
Attendance powerpoint new we170317
Attendance powerpoint new we170317Attendance powerpoint new we170317
Attendance powerpoint new we170317
 
Delitos informaticos
Delitos informaticosDelitos informaticos
Delitos informaticos
 
Fuentes de alimentacion lineales
Fuentes de alimentacion linealesFuentes de alimentacion lineales
Fuentes de alimentacion lineales
 
Lamparas fluorescentes y compactas
Lamparas fluorescentes y compactasLamparas fluorescentes y compactas
Lamparas fluorescentes y compactas
 
Instituto oficial patria
Instituto oficial patriaInstituto oficial patria
Instituto oficial patria
 
Face histórica dos direitos humanos
Face histórica dos direitos humanosFace histórica dos direitos humanos
Face histórica dos direitos humanos
 

Semelhante a Tutorial de Uso do R Selenium

98796699 selenium-framework
98796699 selenium-framework98796699 selenium-framework
98796699 selenium-frameworkAndré Caldas
 
Apostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfvApostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfverickrodrigo23
 
Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - SeleniumTestRock!
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
Trabalho de Auditoria e Segurança - Gloogle Hacking
Trabalho de Auditoria e Segurança - Gloogle HackingTrabalho de Auditoria e Segurança - Gloogle Hacking
Trabalho de Auditoria e Segurança - Gloogle HackingAndré Valbert de Jesus Alves
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Pythonantonio sérgio nogueira
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 
Um passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresUm passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresComunidade NetPonto
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasWordCamp Floripa
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalhoCaio Lima
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniterRaniere de Lima
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLIVanessa Me Tonini
 

Semelhante a Tutorial de Uso do R Selenium (20)

98796699 selenium-framework
98796699 selenium-framework98796699 selenium-framework
98796699 selenium-framework
 
Apostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfvApostila_JavaScript_pela_axademia_ardkgfv
Apostila_JavaScript_pela_axademia_ardkgfv
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - Selenium
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Palestra
PalestraPalestra
Palestra
 
Trabalho de Auditoria e Segurança - Gloogle Hacking
Trabalho de Auditoria e Segurança - Gloogle HackingTrabalho de Auditoria e Segurança - Gloogle Hacking
Trabalho de Auditoria e Segurança - Gloogle Hacking
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Python
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
Um passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresUm passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry Pires
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalho
 
Vb
VbVb
Vb
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
ExtJS Jumpstart Parte 2
ExtJS Jumpstart Parte 2ExtJS Jumpstart Parte 2
ExtJS Jumpstart Parte 2
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniter
 
Spring Data Neo4j
Spring Data Neo4jSpring Data Neo4j
Spring Data Neo4j
 
Sap
SapSap
Sap
 
Dominando o customizer
Dominando o customizerDominando o customizer
Dominando o customizer
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLI
 

Tutorial de Uso do R Selenium

  • 1. Tutorial de uso do RSelenium Daniel Marcelino 07 de junho de 2015 Daniel Marcelino RSelenium 07 de junho de 2015 1 / 32
  • 2. Apresenta¸c˜ao 1 Introdu¸c˜ao Instala¸c˜ao Comandos B´asicos 2 Estrutura B´asica id class css-selector name xpath Atributos 3 Manipula¸c˜ao da p´agina Pressionar Teclas Identificar diversos elementos Clicar em um elemento Download PDF 4 Referˆencias Daniel Marcelino RSelenium 07 de junho de 2015 2 / 32
  • 3. Introdu¸c˜ao O que ´e o RSelenium? O RSelenium ´e um pacote no R que permite a manipula¸c˜ao de browsers de internet (Chrome, Firefox, Explorer) por meio de um aplicativo externo em Java. O Selenium ´e um projeto utilizado em diversas linguagens de programa¸c˜ao. Mais informa¸c˜oes 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
  • 4. Introdu¸c˜ao Para utilizar o RSelenium ´e necess´ario instalar o pacote ”RSelenium” e atualizar o aplicativo externo em Java que o pacote utiliza. Felizmente isso pode ser realizado dentro do R: ## Programa¸c~ao para instala¸c~ao e atualiza¸c~ao do RSelenium install.packages(’RSelenium’) require(’RSelenium’) RSelenium::checkForServer() (O pacote s´o funciona para vers˜oes do R acima da 3.1.0) Daniel Marcelino RSelenium 07 de junho de 2015 4 / 32
  • 5. Selenium Server Caso deseje abrir o browser na mesma m´aquina, ´e necess´ario utilizar um server do Selenium. ## Programa¸c~ao para abrir o servidor local do RSelenium RSelenium::checkForServer() RSelenium::startServer() remDr <- remDr <- remoteDriver(remoteServerAddr = "localhost" , port = 4444 , browserName = "firefox" ) remDr$open() A programa¸c˜ao iniciar´a um browser (Firefox por padr˜ao) que poder´a ser controlado por comandos em sua sess˜ao do R. Daniel Marcelino RSelenium 07 de junho de 2015 5 / 32
  • 6. Selenium Server O aplicativo baixado pelo comando checkForServer() pode ser encontrado neste LINK, e instalado manualmente na sua pasta de pacotes do R. ´E poss´ıvel modificar o browser utilizado (para Chrome, etc...). Para isso ´e necess´ario a instala¸c˜ao de extens˜oes dispon´ıveis na internet, elas n˜ao s˜ao instaladas por padr˜ao. No IPEA ´e necess´ario pedir para atualizarem manualmente o aplicativo pois o downlaod autom´atico ´e bloqueado. Ap´os o iniciado o browser, algumas vezes ´e necess´ario acessar alguma p´agina qualquer manualmente para que os comandos via R comecem a funcionar (N˜ao sei o motivo). Daniel Marcelino RSelenium 07 de junho de 2015 6 / 32
  • 7. Selenium Server Ap´os iniciado server, para obter informa¸c˜oes sobre o servidor e da conex˜ao, basta utilizar a fun¸c˜ao: ## Fun¸c~ao retorna status da conex~ao remDr$getStatus() Daniel Marcelino RSelenium 07 de junho de 2015 7 / 32
  • 8. Comandos B´asicos Os comandos a seguir s˜ao os comandos b´asicos para navega¸c˜ao utilizando o browser do RSelenium: ## Fun¸c~ao diz um endere¸co para o browser acessar remDr$navigate("http://www.google.com") ## Diz qual a p´agina que o browser est´a no momento remDr$getCurrentUrl() ## Retorna para a p´agina anterior do browser remDr$goBack() ## Avan¸ca para a ´ultima tela acessada pelo browser remDr$goForward() ## Carrega novamente a p´agina atual remDr$refresh() Daniel Marcelino RSelenium 07 de junho de 2015 8 / 32
  • 9. Estrutura B´asica O Modelo de Objeto de Documento (do inglˆes Document Object Model - DOM) ´e uma conven¸c˜ao multiplataforma e independente de linguagem para representa¸c˜ao e intera¸c˜ao com objetos em documentos HTML, XHTML e XML. Para realizar extra¸c˜oes de p´aginas com esse formato, ´e necess´ario entender como ele ´e organizado. Daniel Marcelino RSelenium 07 de junho de 2015 9 / 32
  • 10. Estrutura B´asica Se vocˆe acessar a p´agina do Google, ver´a que o c´odigo da p´agina segue esse modelo. Inspecionando a barra de busca vocˆe ver´a o seguinte c´odigo: Figura: C´odigo da barra de busca Daniel Marcelino RSelenium 07 de junho de 2015 10 / 32
  • 11. Estrutura B´asica A forma mais comum de se procurar alguma informa¸c˜ao em um DOM ´e utilizando alguma das seguintes estruturas: id class css-selector name xpath O comando no R para buscar um objeto com algum desses caminhos ´e: ## Fun¸c~ao para buscar um objeto na p´agina webElem <- remDr$findElement() Daniel Marcelino RSelenium 07 de junho de 2015 11 / 32
  • 12. Estrutura B´asica - id Id’s s˜ao ´unicos para cada elemento de uma p´agina, ent˜ao um id se refere a apenas um objeto na p´agina. Vocˆe pode identificar o id de um objeto inspecionando o mesmo e procurando em seu c´odigo. Figura: C´odigo id Daniel Marcelino RSelenium 07 de junho de 2015 12 / 32
  • 13. Estrutura B´asica - id O c´odigo para buscar o elemento na p´agina seria ent˜ao: ## Fun¸c~ao para buscar um objeto na p´agina webElem <- remDr$findElement(using = "id", "lst-ib") Daniel Marcelino RSelenium 07 de junho de 2015 13 / 32
  • 14. Estrutura B´asica - class Vocˆe tamb´em pode identificar um objeto por sua class. Um objeto pode possuir m´ultiplas classes. Figura: C´odigo class Daniel Marcelino RSelenium 07 de junho de 2015 14 / 32
  • 15. Estrutura B´asica - class O c´odigo para buscar o elemento na p´agina seria ent˜ao: ## Fun¸c~ao para buscar um objeto na p´agina webElem <- remDr$findElement(using = "class name", "gsfi") Daniel Marcelino RSelenium 07 de junho de 2015 15 / 32
  • 16. Estrutura B´asica - css-selector Os css-selectors podem ser usados para identificar objetos com mesmos parentes. “#” ´e utilizado para caminhos de id e “.” para caminhos de class. Figura: C´odigo css-selector Daniel Marcelino RSelenium 07 de junho de 2015 16 / 32
  • 17. Estrutura B´asica - css-selector O c´odigo para buscar o elemento na p´agina seria ent˜ao: ## Fun¸c~ao para buscar um objeto na p´agina 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
  • 18. Estrutura B´asica - name N˜ao ´e muito comum a utiliza¸c˜ao de names na busca de um objeto, pois v´arios objetos podem possuir o mesmo name, dificultando a identifica¸c˜ao. Figura: C´odigo name Daniel Marcelino RSelenium 07 de junho de 2015 18 / 32
  • 19. Estrutura B´asica - name O c´odigo para buscar o elemento na p´agina seria ent˜ao: ## Fun¸c~ao para buscar um objeto na p´agina webElem <- remDr$findElement(using = "name", "q") Daniel Marcelino RSelenium 07 de junho de 2015 19 / 32
  • 20. Estrutura B´asica - xpath O meio mais utilizado para busca de objetos ´e o xpath pois pode ser facilmente obtido e indica diretamente o objeto que se deseja. Figura: C´odigo xpath Daniel Marcelino RSelenium 07 de junho de 2015 20 / 32
  • 21. Estrutura B´asica - xpath O c´odigo para buscar o elemento na p´agina seria ent˜ao: ## Fun¸c~ao para buscar um objeto na p´agina webElem <- remDr$findElement(using = "xpath", "//*[@id=’lst-ib’]") Daniel Marcelino RSelenium 07 de junho de 2015 21 / 32
  • 22. Estrutura B´asica - Atributos Caso vocˆe identifique o objeto de interesse, ´e poss´ıvel verificar seus outros atributos por meio do comando “webElem$getElementAttribute()”: ## Fun¸c~ao para obter os atributos de um objeto webElem$getElementAttribute("class") webElem$getElementAttribute("type") webElem$getElementAttribute("name") webElem$getElementAttribute("id") Isso ´e ´util caso vocˆe identifique o objeto por um atributo mas deseje utilizar outro. Daniel Marcelino RSelenium 07 de junho de 2015 22 / 32
  • 23. Manipula¸c˜ao da p´agina Ap´os identificado um objeto de interesse, vocˆe pode querer interagir com ele, seja enviando um texto ou selecionando uma op¸c˜ao. O RSelenium torna poss´ıvel essa intera¸c˜ao. O comando “webElem$sendKeysToElement” envia uma a¸c˜ao para seu objeto selecionado: ## Fun¸c~ao enviar a¸c~ao remDr$navigate("http://www.google.com/") webElem <- remDr$findElement(using = "xpath", "//*[@id=’lst-ib’]") webElem$sendKeysToElement(list("IPEA")) Esse comando escrever´a “IPEA” na barra de texto do Google. Daniel Marcelino RSelenium 07 de junho de 2015 23 / 32
  • 24. Manipula¸c˜ao da p´agina Vocˆe pode desejar enviar a¸c˜oes que n˜ao sejam texto, por exemplo, pressionar “Enter”. O quadro abaixo mostra a rela¸c˜ao de todos os c´odigos relacionados a uma tecla. Figura: Comandos Daniel Marcelino RSelenium 07 de junho de 2015 24 / 32
  • 25. Manipula¸c˜ao da p´agina Ent˜ao para escrever “IPEA” e pressionar “Enter”, ´e necess´ario o seguinte comando: ## Fun¸c~ao enviar a¸c~ao remDr$navigate("http://www.google.com/") webElem <- remDr$findElement(using = "xpath", "//*[@id=’lst-ib’]") webElem$sendKeysToElement(list("IPEA", "uE007")) Pois “uE007” ´e o c´odigo associado a tecla “Enter” Daniel Marcelino RSelenium 07 de junho de 2015 25 / 32
  • 26. Identificando diversos elementos Se quisermos agora verificar os nomes que aparecem no resultado da busca, veja que teremos diversos “blocos”, onde cada bloco ´e um dos resultados da pesquisa. Figura: Nomes Daniel Marcelino RSelenium 07 de junho de 2015 26 / 32
  • 27. Identificando diversos elementos Veja que cada bloco est´a aninhado em <li class = ”g”> e o texto em <h3 class = ”r”>, como o link se encontra no a ´e necess´ario acess´a-lo tamb´em. Ent˜ao ´e necess´ario acessar cada um desses blocos para obter os nomes que desejamos: ## Fun¸c~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 cada bloco separado. Para obtermos o texto que est´a em cada bloco utilizamos o comando “getElementText()” em cada elemento da lista com a fun¸c˜ao lapply. Daniel Marcelino RSelenium 07 de junho de 2015 27 / 32
  • 28. Identificando diversos elementos A programa¸c˜ao nos retorna o seguinte resultado: Figura: Resultado da fun¸c˜ao Daniel Marcelino RSelenium 07 de junho de 2015 28 / 32
  • 29. Clicar em um elemento Digamos que nosso interesse seja acessar a p´agina de chamadas p´ublicas do IPEA, ent˜ao precisamos selecionar o elemento de chamadas p´ublicas e clicar nele com a fun¸c˜ao “clickElement()”: ## Fun¸c~ao clicar webElem <- webElems[[which(resHeaders == "Chamadas P´ublicas")]] webElem$clickElement() Daniel Marcelino RSelenium 07 de junho de 2015 29 / 32
  • 30. Clicar em um elemento Seguindo a mesma l´ogica, ´e simples acessar os links de chamadas p´ublicas do 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
  • 31. Clicar em um elemento Para fazer download do PDF da chamada ´e necess´ario pegar o link e utilizar 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’) Vocˆe pode definir o nome que quiser e o local que deseja salvar o PDF. Daniel Marcelino RSelenium 07 de junho de 2015 31 / 32
  • 32. Clicar em um elemento Este foi um tutorial ensinando o b´asico para utilizar o RSelenium, mais informa¸c˜oes podem ser encontradas no help e neste site que utilizei como base para este tutorial. Link Qualquer d´uvida ou corre¸c˜ao me mandar um e-mail: daniel.silva@ipea.gov.br Daniel Marcelino RSelenium 07 de junho de 2015 32 / 32