CodeGym /Curso Java /Python SELF PT /Automatização de trabalho com formulários e botões em pág...

Automatização de trabalho com formulários e botões em páginas web para coleta de dados

Python SELF PT
Nível 37 , Lição 3
Disponível

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:

Python

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.

Python

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().

Python

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().

Python

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.

Python

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.

Python

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.

Python

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.

Python

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).

Python

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:

Python

># 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.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION