1. Fundamentos técnicos
Preenchimento e envio de formulários
Trabalhar com formulários é frequentemente necessário para automatizar registros de usuários, preenchimento de questionários, coleta de dados e muito mais. Quando você precisa preencher centenas de formulários, fazer isso manualmente é como tentar comer uma melancia por um canudo. Mas com os nossos superpoderes do Selenium, faremos isso em segundos.
Vamos começar entendendo como podemos preencher campos de texto e enviar formulários. Usando o exemplo de um típico formulário de login em um site, aprenderemos os passos básicos:
from selenium import webdriver
# Configuração do driver (por exemplo, ChromeDriver)
driver = webdriver.Chrome()
try:
# Abrindo a página web
driver.get("https://example.com/login")
# Procurando o campo de entrada para o nome de usuário e inserindo texto
username_input = driver.find_element_by_name("username")
username_input.send_keys("meu_login")
# Procurando o campo de entrada para a senha e inserindo texto
password_input = driver.find_element_by_name("password")
password_input.send_keys("minha_senha")
# Procurando o botão de envio do formulário e clicando nele
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# Fechando o driver
driver.quit()
Validação e tratamento de erros
Nada arruína mais o dia de um programador do que erros surgindo no momento errado. Então lidamos com eles antecipadamente. Usamos try/except
para capturar erros e registramos logs para entender o que deu errado.
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("meu_login")
except Exception as e:
print(f"Erro ao preencher o nome de usuário: {e}")
logging.error("Erro ao preencher o nome de usuário", exc_info=True)
2. Caixas de seleção (Checkboxes)
Agora que já aprendemos a clicar em botões, vamos tentar selecionar várias opções de uma lista. Para marcar ou desmarcar uma caixa de seleção, também podemos usar o método click()
. Se precisar verificar se a caixa está marcada, utilizamos o atributo is_selected()
.
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Botões de rádio (Radio Buttons)
Botões de rádio permitem escolher apenas uma opção entre várias. Trabalhar com eles é como trabalhar com caixas de seleção: escolhemos uma opção usando o método click()
e verificamos o estado usando is_selected()
.
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Listas suspensas (Dropdowns)
Listas suspensas contêm várias opções para escolher. No Selenium há a classe Select
, que fornece métodos para trabalhar com essas listas.
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
Também é possível selecionar opções usando select_by_index()
ou select_by_value()
.
5. Áreas de texto (Text Areas)
Áreas de texto são como campos de texto, mas geralmente usadas para inserir grandes quantidades de texto. Trabalhar com elas é idêntico a trabalhar com campos de texto.
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("Este é um texto de exemplo para a área de texto.")
6. Calendário (Date Picker)
Campos de calendário permitem que usuários escolham datas. Se for um campo de texto simples que suporta o formato de data, podemos usar send_keys()
para inserir o valor no formato necessário.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # O formato da data pode variar dependendo do site
No entanto, alguns campos de calendário exigem ações adicionais, como abrir o calendário pop-up e selecionar a data.
7. Campos de arquivo (File Upload)
Esses campos permitem carregar arquivos no servidor. A interação com eles também pode ser feita com o método send_keys()
, fornecendo o caminho do arquivo no computador local.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Campos ocultos (Hidden Fields)
Campos ocultos não são exibidos na página, mas podem ser usados para armazenar informações necessárias para o envio do formulário. Podemos interagir com eles apenas se tivermos acesso aos seus valores (por exemplo, para verificar ou alterar o valor).
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Hidden field value:", value)
9. Verificação de sucesso das ações
Obter dados sobre a execução das ações é o seu termômetro de sucesso. Após enviar o formulário, você definitivamente quer garantir que a solicitação foi aceita com sucesso, certo? Aqui está como fazer isso:
># Verificando login bem-sucedido no site
if "Bem-vindo" in driver.page_source:
print("Login bem-sucedido!")
else:
print("Ocorreu um erro no login.")
10. Problemas e soluções
Problemas
- Instabilidade de execução: As páginas web mudam frequentemente. Mudanças na estrutura da página podem causar falhas nos scripts, então verificar o código regularmente é necessário.
- Dependência da velocidade da rede: Os tempos de carregamento de páginas e elementos podem variar. Use esperas explícitas (explicit waits) para lidar com atrasos.
Soluções
- Registro de logs: Mantenha um log de todas as ações para entender melhor os problemas. Usar a biblioteca
logging
facilita muito a geração de logs. - Modularidade do código: Divida ações complexas em funções e módulos para facilitar alterações e testes.
GO TO FULL VERSION