Lucas Magnum
Publicado em:

qui 08 maio 2014

←Home

Selenium - O que você deveria saber - Parte 1

Esse é o primeiro post da série sobre Selenium, pretendo cobrir desde o básico até algumas coisas mais legais :)

Introdução

Selenium é um ótimo framework para realizar diversos tipos de tarefas com o browser.

Nesta série, vou tentar compartilhar com vocês o que acredito ser necessário para o bom uso da ferramenta.

Veja como está organizada a série:

Instalação

Para instalar o Selenium não existe nenhum segredo, basta executar:

pip install selenium

Abrindo uma página

from selenium import webdriver

firefox = webdriver.Firefox()
firefox.get('http://google.com.br')

Vamos entender o que está acontecendo aqui.

Primeiro eu importo o webdriver que é o módulo que provê implementações para diferentes browsers.

from selenium import webdriver

Nesse caso utilizaremos o "Mozila Firefox", pois não precisa de nenhuma configuração adicional, basta que ele esteja instalado.

Então criamos uma instância chamada firefox e depois invocamos o metódo get passando como parâmetro a URL da página que desejamos abrir.

firefox = webdriver.Firefox()
firefox.get('http://google.com.br/')

Outros exemplos:

# Abrir o site da Python Brasil
firefox.get('http://python.org.br/')

# Abrir o site da Python MG
firefox.get('http://pythonmg.com.br/')

Manipulando elementos

Sempre existe a necessidade de manipularmos algum elemento da página, para isso você precisa saber como encontrá-lo.

Conhecimento em HTML é necessário para facilitar a manipulação da página

Se precisarmos encontrar um elemento pelo id, invocamos o metódo find_element_by_id:

# Se o elemento não for encontrado uma exception é gerada
find_element_by_id('<id>')

Se precisarmos encontrar todos os elementos que possuem uma classe específica, invocamos o metódo find_elements_by_class_name.

# Retornam vários elementos ou uma lista vazia
find_elements_by_class_name('<class_name>')

Existem diversos metódos disponíveis, abaixo estão os que mais utilizo:

# Encontrar elemento pelo ID
find_element_by_id('<id>')

# Encontrar elemento pelo atributo name
find_element_by_name('<name>')

# Encontrar elemento pelo texto do link
find_element_by_link_text('<text>')

# Encontrar elemento pelo seu seletor css
find_element_by_css_selector('<css_selector>')

# Encontrar elementos pelo nome da tag
find_elements_by_tag_name('<tag_name>')

# Encontrar elementos pela classe
find_elements_by_class_name('<class_name>')

Para visualizar todos os metódos, veja a documentação.

Exemplo para estudo

Let's code

Premissas

No Python Club os posts estão localizados dentro de uma div.

<div class="posts">
  <section class="post">[...]</section>
  <section class="post">[...]</section>
  <section class="post">[...]</section>
</div>

E cada post está dentro de uma section que possui a class="post" .

<section class="post">
  <header class="post-header">
    [...]
    <h3>
      <a class="post-title" href="<post_url>"><post_title></a>
    </h3>
    [...]
  </header>
</section>

Objetivo

Queremos que seja mostrado o título de cada post e seu link.

Execute o código abaixo e veja o resultado.

from selenium import webdriver

# Criar instância do navegador
firefox = webdriver.Firefox()

# Abrir a página do Python Club
firefox.get('http://pythonclub.com.br/')

# Seleciono todos os elementos que possuem a class post
posts = firefox.find_elements_by_class_name('post')

# Para cada post printar as informações
for post in posts:

    # O elemento `a` com a class `post-title`
    # contém todas as informações que queremos mostrar
    post_title = post.find_element_by_class_name('post-title')

    # `get_attribute` serve para extrair qualquer atributo do elemento
    post_link = post_title.get_attribute('href')

    # printar informações
    print u"Títutlo: {titulo}, \nLink: {link}".format(
      titulo=post_title.text,
      link=post_link
  )

# Fechar navegador
firefox.quit()

Código-fonte do exemplo: pythonclub.py.

Desafios

Desafio 1

Modificar o exemplo para mostrar o nome do autor do post.

Desafio 2

Modificar o exemplo 01 para salvar os dados(titulo, link, autor) em um arquivo json.

Gostou? Leia a segunda parte.

Qualquer dúvida pode enviar um e-mail contato@lucasmagnum.com.br ficarei feliz em ajudar =)

Topo
comments powered by Disqus