Selenium Python é uma lib útil para automatizar ações na web, independente de quais delas você objetive. Por exemplo: busca e navegação, web scraping (mapeamento e seleção de conteúdo de sites) e automatização de compra de produtos.
Utilizando um exemplo bem mais simples para entender o funcionamento dessa lib, diremos que usar Selenium Python é equivalente a programar um robô para fazer as ações no navegador que você precise tornar mais rápidas, automáticas.
Nesse artigo, trabalharemos exemplos práticos de como usá-la ao seu favor. Confira o texto abaixo.
Artigos relacionados:
- Python ext:pdf – extensões PDF no Python
- Python Switch Case: aprenda tudo sobre condições Switch Case
- Python while: o guia completo para a execução repetitiva
- Python range: o guia completo da função range
- IDE Python: Comparando os melhores IDEs para Python
- Split python: o método mais poderoso para manipulação de strings
- Cursos de Python Gratuitos
- Colt python: Tutoriais e exemplos práticos para análises de dados
- If else Python: um guia completo para condicionais
- Pandas python: como analisar dados com pandas em Python
Conteúdo
Introdução ao Selenium Python
A automação de testes web é uma prática fundamental para garantir a qualidade de aplicações web, independente do tamanho que elas possuam.
Por isso, a importância do Selenium é alta e seu uso ainda maior. Ele é uma ferramenta de código aberto que permite automatizar interações com navegadores, isso justifica sua popularidade para esse propósito.
Uma informação importante, talvez curiosa, é que o Selenium Python também usa JavaScript lá no fundo. O objetivo é conseguir capturar os elementos de um documento HTML.
Como o Selenium funciona manipulando arquivos web via webdriver, ainda que cada navegador possua o seu próprio, a necessidade de “tratar” arquivos HTML é fundamental.
Aplicabilidade e recursos Selenium Python
- Automatização de testes funcionais: utilizado para automatizar testes funcionais de páginas da web, garantindo o bom funcionamento das funcionalidades do site;
- Web Scraping: útil para extrair informações de páginas sem API ou com formatos de dados não acessíveis por meio de solicitações HTTP tradicionais;
- Integração com testes unitários: pode ser integrado com estruturas de testes unitários, como PyTest e Unittest, para executar testes automatizados em diferentes navegadores e ambientes;
- Monitoramento de sites: permite monitorar sites e verificar sua disponibilidade, a presença de elementos específicos ou possíveis problemas na página;
- Automação de tarefas web: facilita a automação de tarefas repetitivas, como preenchimento de formulários e envio de relatórios.
Características úteis do Selenium em Python
- Controle do navegador: permite controlar navegadores populares, como Chrome, Firefox e Safari, assim, utilizando suas bibliotecas específicas;
- Localização de elementos: facilita a localização de elementos na página através de seletores CSS, XPath, ID, classe, etc;
- Manipulação de elementos: possibilita interações com elementos da página, como clicar em botões, preencher formulários e selecionar opções de lista suspensa;
- Esperas explícitas e implícitas: oferece esperas para aguardar até que um elemento esteja disponível ou que uma condição seja satisfeita antes de prosseguir com o código;
- Manipulação de janelas e frames: permite alternar entre janelas do navegador e frames incorporados em uma página;
- Captura de tela: possibilita tirar capturas de tela da página durante a execução do teste para análise e depuração.
Instalando Selenium Python
Antes de começarmos, é importante configurar o ambiente Python e instalar o Selenium WebDriver.
Para isso, veremos os passos necessários para garantir que tudo esteja funcionando corretamente. Certifique-se de ter o Python instalado em seu sistema e, em seguida, siga os comandos abaixo para instalar o Selenium:
pip install selenium
O comando pip install
, um gerenciador de pacotes do Python, é o comando padrão para baixar bibliotecas dentro do repositório da linguagem.
Após a instalação do Selenium, você precisará baixar os drivers adequados para os navegadores com os quais pretende realizar os testes, como Chrome, Firefox, ou Edge.
Usando Selenium para automatizar testes web
Com o ambiente devidamente configurado, vamos começar a criar nossos testes automatizados. Primeiro, importaremos as bibliotecas necessárias:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Esses imports são extremamente importantes para garantir que a biblioteca seja executada e as funções alcançadas. Assim, antes de programar as funções, é essencial importar as bibliotecas.
Agora, podemos navegar para uma URL e interagir com os elementos da página. Por exemplo, para preencher um campo de login e clicar no botão de login, podemos fazer o seguinte:
# Inicializa o driver do navegador (por exemplo, Chrome)
driver = webdriver.Chrome()
# Navega para a URL de login
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
# Navega para a URL de login
driver.get("https://www.facebook.com/?stype=lo&jlou=AfdGFevEqVoKZZFdyl8VJKC7zneQVqarRqXw91wSuLEDLdEgOeCMyjf3GxxAZGsvyk8zIVNq5HErtzSE1kThJnPhzlcvyl0IVtfKmksfrj7p1g&smuh=22627&lh=Ac9tsg5GNcOjUtBPvPw")
#Aqui usamos de exemplo a página de login do Facebook
campo_login = driver.find_element(By.ID, "email")
campo_senha = driver.find_element(By.ID, "pass")
botao_login = driver.find_element(By.NAME, "login")
campo_login.send_keys("usuario123")
campo_senha.send_keys("senha_secreta")
botao_login.click()
time.sleep(20)
driver.close()
A biblioteca time
e o seu método sleep
servem para forçar o navegador a fechar depois de 20 segundos. Esse tempo pode ser modificado facilmente.
Usando Python para criar scripts Selenium
Python é uma linguagem versátil e de fácil aprendizado. Combiná-la com o Selenium nos permite criar scripts de teste potentes e legíveis.
Abaixo, mostramos um exemplo de um script simples que abre o navegador, navega até uma página, e verifica se o título corresponde ao esperado:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
# Navega para a URL desejada
driver.get("https://www.amazon.com.br/ap/signin?openid.pape.max_auth_age=900&openid.return_to=https%3A%2F%2Fwww.amazon.com.br%2Fgp%2Fyourstore%2Fhome%3Fpath%3D%252Fgp%252Fyourstore%252Fhome%26useRedirectOnSuccess%3D1%26signIn%3D1%26action%3Dsign-out%26ref_%3Dnav_AccountFlyout_signout&openid.assoc_handle=brflex&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0")
# Usamos como exemplo a página de login da Amazon
# Verifica se o título da página corresponde ao esperado
titulo_esperado = "Acessar Amazon"
assert titulo_esperado in driver.title, f"Título incorreto. Esperado: {titulo_esperado}, Obtido: {driver.title}"
# Fecha o navegador após o teste
driver.quit()
Melhorando seus scripts Selenium Python
Para tornar nossos testes mais organizados e fáceis de manter, podemos usar o padrão Page Object.
Esse padrão sugere que criemos classes que representam páginas da web e encapsulam a lógica de interação com os elementos daquela página. Vejamos um exemplo (usando a página de login da Amazon):
class PaginaInicial:
def __init__(self, driver):
self.driver = driver
self.url = “https://www.amazon.com.br/ap/signin?openid.pape.max_auth_age=900&openid.return_to=https%3A%2F%2Fwww.amazon.com.br%2Fgp%2Fyourstore%2Fhome%3Fpath%3D%252Fgp%252Fyourstore%252Fhome%26useRedirectOnSuccess%3D1%26signIn%3D1%26action%3Dsign-out%26ref_%3Dnav_AccountFlyout_signout&openid.assoc_handle=brflex&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0"
def visitar(self):
self.driver.get(self.url)
def obter_titulo(self):
return self.driver.title
class PaginaLogin:
def __init__(self, driver):
self.driver = driver
self.url = "https://www.facebook.com/?stype=lo&jlou=AfdGFevEqVoKZZFdyl8VJKC7zneQVqarRqXw91wSuLEDLdEgOeCMyjf3GxxAZGsvyk8zIVNq5HErtzSE1kThJnPhzlcvyl0IVtfKmksfrj7p1g&smuh=22627&lh=Ac9tsg5GNcOjUtBPvPw"
def visitar(self):
self.driver.get(self.url)
def preencher_campo_login(self, usuario,senha):
campo_login = self.driver.find_element(By.ID, "email")
campo_senha = driver.find_element(By.ID, "pass")
botao_loginButton = driver.find_element(By.NAME, "login")
campo_login.send_keys(usuario)
campo_senha.send_keys(senha)
campo_loginButton.click()
# Métodos para interação com outros elementos da página de login
# ...
# Exemplo de uso dos Page Objects
driver = webdriver.Chrome()
pagina_inicial = PaginaInicial(driver)
pagina_inicial.visitar()
assert "Página de Exemplo" in pagina_inicial.obter_titulo()
#Assert é um método de comparação entre duas saídas, ou seja, é comumente usado em testes unitários
pagina_login = PaginaLogin(driver)
pagina_login.visitar()
pagina_login.preencher_campo_login("usuario123",”senha_secreta”)
Alternativa ao Selenium em Python: utilizando o `requests-html`
Se você precisa extrair informações estáticas de páginas web de forma mais simples e direta, uma alternativa ao Selenium em Python é o módulo `requests-html`
.
Enquanto o Selenium é amplamente usado para automatizar interações com navegadores e simular ações de um usuário real, o `requests-html`
oferece uma abordagem mais direta para solicitar páginas web e extrair informações estáticas sem a necessidade de um navegador.
Exemplo de uso do `requests-html`: Obtendo o título de uma página
Aqui está um exemplo de código em que utilizamos o `requests-html`
para obter o título de uma página:
from requests_html import HTMLSession
# Cria uma sessão HTML
session = HTMLSession()
# Faz a solicitação GET para a página
url = "https://www.exemplo.com"
response = session.get(url)
# Verifica se a solicitação foi bem-sucedida (código 200)
if response.status_code == 200:
# Extrai o título da página
titulo = response.html.find('title', first=True).text
# Imprime o título
print(f"O título da página {url} é: {titulo}")
else:
print(f"A solicitação para a página {url} falhou.")
Neste exemplo, criamos uma sessão HTML usando o `HTMLSession()`
e realizamos uma solicitação GET
para uma página específica.
Em seguida, verificamos se a solicitação foi bem-sucedida (código 200) e, se sim, extraímos o título da página usando o método `find()`
e imprimimos o resultado.
Lembre-se de que o `requests-html`
é adequado para tarefas de extração de informações estáticas, mas não oferece suporte a interações complexas com JavaScript e aplicativos web dinâmicos.
Se você precisa automatizar testes em uma aplicação web interativa, o Selenium ainda é a melhor opção.
Para a criação de aplicações com poucos recursos, considere o uso do Flask Python.
Comparativo entre Selenium e WebScraping
Selenium em Python
Embora o Selenium seja principalmente usado para automação de testes, ele também pode ser utilizado para tarefas de web scraping, especialmente quando a extração de dados requer interações complexas com a página, como páginas geradas dinamicamente por JavaScript.
No entanto, o Selenium pode ser mais lento para o web scraping em comparação com outras bibliotecas dedicadas exclusivamente a essa finalidade.
Web scraping em Python
O web scraping é uma técnica de coleta de dados em que você extrai informações de páginas web diretamente da sua estrutura HTML, sem a necessidade de simular interações em um navegador. Existem várias bibliotecas em Python que são especialmente projetadas para o web scraping, tornando o processo mais eficiente e direto.
Algumas das bibliotecas de web scraping populares em Python incluem:
- BeautifulSoup: é uma biblioteca que analisa o HTML e XML para extrair os dados necessários.
- Requests: biblioteca simples para fazer solicitações HTTP e obter o conteúdo HTML das páginas.
- Scrapy: framework de web scraping completo e poderoso que permite navegar, extrair e salvar dados de forma estruturada.
Essas bibliotecas são mais rápidas e eficientes para a coleta de dados, especialmente quando você precisa apenas extrair informações de páginas estáticas, onde não há muitas interações complexas.
Quando usar Selenium ou Web Scraping em Python?
A escolha entre o Selenium e o web scraping depende das necessidades do projeto. Use o Selenium quando:
- Você precisa interagir com elementos da página como faria manualmente;
- A página possui conteúdo dinâmico carregado por JavaScript, e você precisa esperar que os elementos sejam renderizados;
- Seu objetivo principal é a automação de testes.
Use o web scraping quando:
- As informações que você precisa estão disponíveis diretamente no HTML da página;
- Não há necessidade de interações complexas com a página;
- Você deseja coletar dados de várias páginas de forma mais rápida e direta.
Em resumo, o Selenium é mais adequado para casos em que a automação de testes e a interação com a página são necessárias, enquanto o web scraping é a melhor opção para coletar dados estáticos e mais simples de páginas web.
Como usar o Selenium para Web Scraping
Embora existam bibliotecas especializadas em web scraping em Python, o Selenium é uma opção útil quando o site utiliza JavaScript e possui elementos dinâmicos que outras bibliotecas podem não conseguir lidar adequadamente.
Exemplo de como realizar o Web Scraping com o Selenium
Vamos considerar um exemplo prático de como extrair informações de uma página usando o Selenium:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
# Configura as opções do Chrome para execução sem interface gráfica
chrome_options = Options()
chrome_options.add_argument("--headless")
# Inicializa o driver do navegador Chrome
driver = webdriver.Chrome(options=chrome_options)
# URL da página que será extraída
url = "https://www.exemplo.com/pagina-de-dados"
# Faz a solicitação GET para a página
driver.get(url)
# Localiza os elementos da página que contêm as informações que desejamos extrair
elementos_dados = driver.find_elements(By.CSS_SELECTOR, ".classe-dados")
# Itera sobre os elementos para obter os dados
for elemento in elementos_dados:
informacao = elemento.text
print(informacao)
# Fecha o navegador após a extração dos dados
driver.quit()
Neste exemplo, estamos utilizando o Chrome em modo “headless
” (sem interface gráfica) para executar o web scraping. Isso permite a execução em segundo plano, sem abrir uma janela visível do navegador.
Desafios da automação de testes web
Embora a automação de testes web traga inúmeros benefícios, também enfrenta desafios. Elementos dinâmicos e identificadores mutáveis podem causar instabilidade nos testes.
Além disso, a necessidade de lidar com autenticação e segurança adiciona complexidade. Testar a responsividade em dispositivos móveis é outro desafio significativo.
A otimização do desempenho dos testes também é uma preocupação, especialmente ao executá-los em larga escala.
Por isso, usar o Selenium e os métodos alternativos é necessário. Além de necessário, também justificado.
O futuro da automação de testes web
Tecnologias avançadas, como o Selenium em Python, estão aprimorando os testes web constantemente. Ainda mais com a integração da inteligência artificial e aprendizado de máquina (machine learning), o que possibilita testes mais inteligentes e adaptativos.
Profissionais de teste automatizado devem acompanhar essas mudanças para se manterem relevantes e aproveitarem as oportunidades do futuro que acompanha a automação de testes web.
O Selenium em Python, dessa forma, torna os testes mais eficientes e inteligentes, tornando-se, portanto, essencial para os profissionais da área.
Conclusão
O Selenium em Python, em suma, é uma lib bastante útil para reduzir trabalho desnecessário e pode ser muito versátil no uso.
Conforme visto nos códigos de exemplo, a sintaxe é clara e bastante objetiva, assim, reduz em muito as possibilidades de erro. Após essa leitura, é possível deduzir quais os melhores usos para esse método e também quais alternativas a ele estão disponíveis.
Dessa forma, recomendamos a leitura de outro artigo interessante, se você quiser se aprofundar nessa linguagem: O que é Python? Entenda tudo sobre esta linguagem.