Fundamentos de PyAutoGUI para Automação com Python

0/20 aulas0%
projeto

Projeto Guiado: Interagindo com um Aplicativo Desktop (Ex: Bloco de Notas)

Aprenda sobre projeto guiado: interagindo com um aplicativo desktop (ex: bloco de notas)

50 min
Aula 2 de 4

Projeto Guiado: Interagindo com um Aplicativo Desktop (Ex: Bloco de Notas)

Bem-vindo ao nosso primeiro projeto prático do módulo! 🎉 Nesta aula, vamos colocar em prática os conhecimentos adquiridos sobre PyAutoGUI para automatizar uma tarefa comum em um aplicativo desktop: o Bloco de Notas.

Este projeto guiado tem como objetivo principal solidificar sua compreensão sobre como PyAutoGUI interage com a interface gráfica do usuário (GUI), simulando ações de teclado e mouse para realizar tarefas de forma autônoma.


🎯 Objetivos da Aula

Ao final desta aula, você será capaz de:

  • Abrir e fechar um aplicativo desktop usando Python.
  • Digitar texto em um aplicativo usando PyAutoGUI.
  • Simular atalhos de teclado para interações comuns (salvar, fechar, etc.).
  • Mover o mouse e clicar em posições específicas da tela.
  • Aplicar as melhores práticas de robustez em automações com PyAutoGUI.

🚀 1. Introdução: Automatizando o Bloco de Notas

O Bloco de Notas é um editor de texto simples presente em sistemas Windows (e equivalentes como gedit no Linux ou TextEdit no macOS). Sua simplicidade o torna um excelente candidato para nosso primeiro projeto de automação, pois nos permite focar nas interações básicas sem a complexidade de elementos de UI mais avançados.

Neste projeto, nosso script Python fará o seguinte:

  1. Abrir o Bloco de Notas.
  2. Digitar uma mensagem de texto.
  3. Salvar o arquivo com um nome específico.
  4. Fechar o Bloco de Notas.

Parece simples, certo? Mas cada um desses passos envolve o uso de funções cruciais do PyAutoGUI!


💻 2. Explicação Detalhada com Exemplos

Vamos detalhar cada etapa do nosso projeto.

2.1. Abrindo o Aplicativo 🚀

Para abrir um aplicativo desktop, não usamos diretamente o PyAutoGUI. Em vez disso, utilizamos o módulo subprocess do Python, que nos permite executar comandos do sistema operacional.

import subprocess
import time
import sys # Para verificar o sistema operacional
 
# Define o comando para abrir o Bloco de Notas dependendo do SO
if sys.platform == 'win32':
    app_command = 'notepad.exe'
elif sys.platform == 'darwin': # macOS
    app_command = 'open -a TextEdit'
else: # Linux (ex: Ubuntu com gedit)
    app_command = 'gedit'
 
# Abrir o Bloco de Notas
print(f"Abrindo {app_command}...")
process = subprocess.Popen(app_command, shell=True)
 
# É crucial dar um tempo para o aplicativo carregar completamente
time.sleep(2) # Ajuste este tempo conforme a velocidade do seu sistema
print("Aplicativo aberto.")
  • subprocess.Popen(app_command, shell=True): Executa o comando app_command no shell do sistema operacional. O shell=True é útil para que o sistema encontre o executável.
  • time.sleep(2): Pausa a execução do script por 2 segundos. Isso é extremamente importante em automação de UI, pois o PyAutoGUI começará a interagir imediatamente, e o aplicativo pode não estar pronto ainda. Ajuste este tempo se o seu aplicativo demorar mais para carregar.

2.2. Configurando PyAutoGUI para Robustez 🛡️

Antes de qualquer interação, é uma boa prática configurar algumas opções do PyAutoGUI para tornar seu script mais robusto e seguro.

import pyautogui
 
# --- Configurações de Segurança e Robustez ---
# Ativa o failsafe: mova o mouse para o canto superior esquerdo da tela para abortar o script
pyautogui.FAILSAFE = True
# Pausa de 0.5 segundos entre cada comando do PyAutoGUI
pyautogui.PAUSE = 0.5
 
print("Configurações do PyAutoGUI aplicadas.")
  • pyautogui.FAILSAFE = True: Se você mover o mouse para o canto superior esquerdo da tela (0,0), o PyAutoGUI levantará uma exceção pyautogui.FailSafeException e o script será encerrado. Isso é um salva-vidas se o seu script começar a se comportar de forma inesperada.
  • pyautogui.PAUSE = 0.5: Adiciona um atraso de 0.5 segundos entre cada chamada de função do PyAutoGUI. Isso ajuda a garantir que o sistema tenha tempo para registrar as ações e evita que o script execute comandos muito rapidamente, o que pode causar falhas.

2.3. Digitanto Texto ✍️

Agora que o Bloco de Notas está aberto e pronto, vamos digitar nosso texto.

# Digitar uma mensagem
mensagem = "Olá, mundo da automação com PyAutoGUI!\n\n" \
           "Este é um texto digitado automaticamente no Bloco de Notas.\n" \
           "Espero que você esteja gostando deste projeto guiado!"
 
print(f"Digitando texto: '{mensagem[:50]}...'")
pyautogui.write(mensagem, interval=0.1) # 'interval' para simular digitação humana
print("Texto digitado.")
  • pyautogui.write(mensagem, interval=0.1): Simula a digitação de cada caractere da mensagem. O parâmetro interval adiciona um pequeno atraso entre cada tecla, tornando a digitação mais "humana" e dando tempo ao aplicativo para processar as entradas.

2.4. Salvando o Arquivo 💾

Para salvar o arquivo, usaremos um atalho de teclado e, em seguida, digitaremos o nome do arquivo na caixa de diálogo "Salvar como".

# Simular Ctrl+S para abrir a caixa de diálogo "Salvar como"
print("Pressionando Ctrl+S para salvar...")
pyautogui.hotkey('ctrl', 's')
time.sleep(1) # Esperar a caixa de diálogo "Salvar como" aparecer
print("Caixa de diálogo 'Salvar como' aberta.")
 
# Digitar o nome do arquivo
nome_arquivo = "meu_primeiro_arquivo_automatizado.txt"
print(f"Digitando nome do arquivo: '{nome_arquivo}'")
pyautogui.write(nome_arquivo, interval=0.1)
time.sleep(0.5)
 
# Pressionar Enter para confirmar o salvamento
print("Pressionando Enter para confirmar o salvamento...")
pyautogui.press('enter')
time.sleep(1) # Esperar o arquivo ser salvo
print("Arquivo salvo.")
  • pyautogui.hotkey('ctrl', 's'): Pressiona e solta múltiplas teclas simultaneamente. Neste caso, Ctrl + S.
  • pyautogui.press('enter'): Pressiona e solta uma única tecla.

2.5. Fechando o Aplicativo 🚪

Finalmente, vamos fechar o Bloco de Notas. Podemos usar o atalho Alt + F4 (no Windows) ou clicar no botão de fechar. Para manter a compatibilidade entre sistemas, Alt + F4 é uma boa opção para Windows, mas para macOS/Linux, talvez seja melhor usar o subprocess.Popen.terminate() ou clicar no botão de fechar. Para este projeto, vamos focar no Alt+F4 como um exemplo de atalho para fechar, e depois falaremos sobre o process.terminate().

# Fechar o Bloco de Notas usando Alt+F4 (comum no Windows)
# Para macOS/Linux, você pode precisar de uma abordagem diferente,
# como pyautogui.click() nas coordenadas do botão de fechar ou
# process.terminate()
print("Pressionando Alt+F4 para fechar o aplicativo...")
pyautogui.hotkey('alt', 'f4')
time.sleep(1)
print("Aplicativo fechado (ou tentativa de fechamento).")
 
# Uma alternativa mais robusta para fechar o processo seria:
# if process.poll() is None: # Verifica se o processo ainda está rodando
#     print("Encerrando o processo via subprocess...")
#     process.terminate() # Envia um sinal de encerramento
#     time.sleep(1)
#     if process.poll() is None:
#         process.kill() # Se não terminar, força o encerramento
#     print("Processo encerrado.")
  • pyautogui.hotkey('alt', 'f4'): Simula o atalho de teclado para fechar a janela ativa.
  • process.terminate() / process.kill(): Estas são maneiras mais diretas de encerrar o processo que você iniciou via subprocess, sendo geralmente mais confiáveis do que depender de atalhos de UI para fechar o aplicativo.

🧪 3. Código de Exemplo Oficial (Completo)

Aqui está o script completo que integra todas as etapas que discutimos. Este código segue as melhores práticas para automação com PyAutoGUI, incluindo configurações de segurança e pausas adequadas.

Crie um arquivo chamado automacao_bloco_notas.py e cole o código abaixo.

# automacao_bloco_notas.py
 
import subprocess
import time
import sys
import pyautogui
 
# --- 1. Configurações de Segurança e Robustez do PyAutoGUI ---
# Ativa o failsafe: mova o mouse para o canto superior esquerdo da tela para abortar o script
pyautogui.FAILSAFE = True
# Pausa de 0.5 segundos entre cada comando do PyAutoGUI
pyautogui.PAUSE = 0.5
print("✅ Configurações do PyAutoGUI aplicadas: FAILSAFE ativado, PAUSE de 0.5s.")
 
# --- 2. Definir o comando para abrir o aplicativo ---
if sys.platform == 'win32':
    app_command = 'notepad.exe'
    close_hotkey = ('alt', 'f4')
elif sys.platform == 'darwin': # macOS
    app_command = 'open -a TextEdit'
    # No macOS, Cmd+W fecha a janela, Cmd+Q fecha o app
    close_hotkey = ('command', 'q') # Ou ('command', 'w') se for só a janela
else: # Linux (ex: Ubuntu com gedit)
    app_command = 'gedit'
    close_hotkey = ('ctrl', 'q') # Ou ('alt', 'f4') dependendo do gerenciador de janelas
 
process = None # Inicializa a variável process
 
try:
    # --- 3. Abrir o Bloco de Notas (ou equivalente) ---
    print(f"🚀 Abrindo '{app_command}'...")
    process = subprocess.Popen(app_command, shell=True)
    time.sleep(3) # Dê um tempo generoso para o aplicativo carregar
    print("✨ Aplicativo aberto com sucesso!")
 
    # --- 4. Digitar uma mensagem ---
    mensagem = "Olá, mundo da automação com PyAutoGUI!\n\n" \
               "Este é um texto digitado automaticamente no Bloco de Notas.\n" \
               "Espero que você esteja gostando deste projeto guiado!\n\n" \
               "Data da automação: " + time.strftime("%Y-%m-%d %H:%M:%S")
 
    print(f"📝 Digitanto texto: '{mensagem[:70]}...'")
    pyautogui.write(mensagem, interval=0.05) # Intervalo menor para digitação mais rápida
    print("✅ Texto digitado.")
 
    # --- 5. Salvar o arquivo ---
    print("💾 Pressionando atalho para salvar (Ctrl+S)...")
    pyautogui.hotkey('ctrl', 's')
    time.sleep(1.5) # Esperar a caixa de diálogo "Salvar como" aparecer
    print("✨ Caixa de diálogo 'Salvar como' aberta.")
 
    nome_arquivo = "meu_primeiro_arquivo_automatizado.txt"
    print(f"✍️ Digitanto nome do arquivo: '{nome_arquivo}'")
    pyautogui.write(nome_arquivo, interval=0.05)
    time.sleep(0.5)
 
    print("↩️ Pressionando Enter para confirmar o salvamento...")
    pyautogui.press('enter')
    time.sleep(2) # Esperar o arquivo ser salvo e a caixa de diálogo fechar
    print("✅ Arquivo salvo com sucesso!")
 
    # --- 6. Fechar o Bloco de Notas ---
    print(f"🚪 Pressionando atalho {close_hotkey} para fechar o aplicativo...")
    pyautogui.hotkey(*close_hotkey) # O * desempacota a tupla close_hotkey
    time.sleep(1.5)
    print("✅ Aplicativo fechado (ou tentativa de fechamento).")
 
except pyautogui.FailSafeException:
    print("\n⚠️ FAILSAFE ativado! O script foi abortado pelo usuário.")
except Exception as e:
    print(f"\n❌ Ocorreu um erro: {e}")
finally:
    # Garante que o processo seja encerrado, caso ainda esteja rodando
    if process and process.poll() is None:
        print("🧹 Encerrando o processo via subprocess (limpeza final)...")
        process.terminate()
        time.sleep(0.5)
        if process.poll() is None:
            process.kill()
        print("✅ Processo encerrado.")
    print("\n--- Automação Concluída ---")
 

Para executar este código:

  1. Salve o código em um arquivo .py (ex: automacao_bloco_notas.py).
  2. Abra seu terminal ou prompt de comando.
  3. Navegue até o diretório onde você salvou o arquivo.
  4. Execute-o com python automacao_bloco_notas.py.

Observações:

  • Velocidade: Se o script estiver muito rápido para o seu sistema, aumente os valores de time.sleep() e pyautogui.PAUSE.
  • Coordenadas: Não usamos pyautogui.moveTo() ou pyautogui.click() neste projeto para manter a compatibilidade entre diferentes resoluções de tela e sistemas operacionais. Usar atalhos de teclado é geralmente mais robusto para tarefas como salvar e fechar.
  • Tratamento de Erros: O bloco try...except...finally é fundamental para garantir que seu script lide com falhas de forma graciosa e limpe os recursos (como fechar o processo) mesmo que algo dê errado.

🏋️ 4. Exercícios e Desafios

Agora é a sua vez de praticar e expandir este projeto!

Tarefas Obrigatórias (para fixação)

  • Modificar o Texto: Altere a mensagem que é digitada no Bloco de Notas para algo de sua autoria.
  • Mudar o Nome do Arquivo: Salve o arquivo com um nome diferente, por exemplo, incluindo a data atual no nome do arquivo (dica: use time.strftime).
  • Testar o FAILSAFE: Durante a execução do script, mova rapidamente o mouse para o canto superior esquerdo da tela para ver o FAILSAFE em ação.

Desafios Opcionais (para aprofundamento)

  • Abrir e Digitar em Múltiplos Arquivos: Modifique o script para abrir o Bloco de Notas, digitar um texto, salvar, fechar, e então repetir o processo para um segundo arquivo com outro texto e nome.
  • Copiar e Colar: Em vez de digitar todo o texto, faça o script copiar um texto de uma variável Python para a área de transferência (pyperclip.copy()) e depois colar no Bloco de Notas (pyautogui.hotkey('ctrl', 'v')). (Você precisará instalar pyperclip com pip install pyperclip).
  • Usar locateOnScreen() (Avançado): Em vez de usar Ctrl+S para salvar, tente usar pyautogui.locateOnScreen() para encontrar a imagem do botão "Arquivo" ou "Salvar" na barra de menus e depois clicar nela. Este é um desafio mais avançado que exige que você capture screenshots dos botões.
    • Dica: Crie imagens (PNG) dos botões "Arquivo" e "Salvar" do seu Bloco de Notas.
    • Lembre-se: locateOnScreen() pode ser sensível a pequenas variações visuais.
  • Tratamento de Diálogo de Sobrescrita: Se você tentar salvar um arquivo com o mesmo nome, o Bloco de Notas perguntará se deseja substituí-lo. Modifique o script para detectar este diálogo (usando locateOnScreen() ou simplesmente pressionando Enter para "Sim") e lidar com ele.

📚 5. Resumo e Próximos Passos

Parabéns! Você concluiu seu primeiro projeto guiado de automação com PyAutoGUI. 🎉

Nesta aula, você aprendeu a:

  • Abrir e gerenciar processos de aplicativos desktop com subprocess.
  • Configurar PyAutoGUI para maior robustez com FAILSAFE e PAUSE.
  • Simular digitação de texto com pyautogui.write().
  • Executar atalhos de teclado complexos com pyautogui.hotkey() para interações como salvar e fechar.
  • Estruturar seu código com try-except-finally para um tratamento de erros eficaz.

Próximos Passos

Este projeto foi uma excelente base. No próximo módulo, exploraremos como interagir com elementos visuais usando reconhecimento de imagem, o que abrirá um leque ainda maior de possibilidades para sua automação.

Continue praticando os desafios e não hesite em experimentar com outros aplicativos simples em seu sistema! A melhor forma de aprender é fazendo.


© 2025 Escola All Dev. Todos os direitos reservados.

Projeto Guiado: Interagindo com um Aplicativo Desktop (Ex: Bloco de Notas) - Fundamentos de PyAutoGUI para Automação com Python | escola.all.dev.br