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:
Parte 2
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 =)
"Selenium - O que você deveria saber - Parte 1" de "Lucas Magnum" está licenciado com uma Licença Creative Commons - Atribuição-NãoComercial-SemDerivações 4.0 Internacional.