Capítulo 7 — Projeto integrador e introdução ao PyAutoGUI
Chegou o momento especial: o final do percurso. Se você acompanhou desde o Capítulo 1, já é um programador de verdade. Sabe declarar variáveis, trabalhar com for e while, criar funções, manipular listas e strings, comparar dados com if. Tem ferramentas suficientes para resolver problemas reais.
Neste capítulo, vamos ver como você se comporta de verdade — desenvolvendo um projeto próprio, pensado e planejado por você. Mas antes, aprenderemos uma biblioteca poderosa chamada PyAutoGUI, que abre um mundo novo de possibilidades: a automação. Com ela, seus programas podem controlar o mouse, digitar no teclado, tirar screenshots e interagir com qualquer aplicativo da sua máquina. É como dar asas ao Python.
Vamos lá?
1. Instalando bibliotecas com pip
Até agora, usamos apenas o que vem "de fábrica" no Python — funções como print(), input(), len() e bibliotecas padrão como turtle e random. Mas existe um universo inteiro de código pronto para usar, criado por outros programadores e compartilhado publicamente. Como você usa esses códigos? Baixando-os e instalando em seu computador com uma ferramenta chamada pip.
1.1. O que é pip e PyPI
pip é a abreviação de "Pip Installs Packages" (Pip Instala Pacotes). É um programa que vem junto com o Python e funciona assim: você diz "quero a biblioteca X", e ele procura num gigantesco repositório público chamado PyPI (Python Package Index), faz o download e instala no seu computador.
O PyPI é um banco de dados com centenas de milhares de bibliotecas públicas que qualquer programador pode compartilhar. Tem desde coisas simples até gigantescas — processamento de imagens, inteligência artificial, análise de dados, jogos, quase tudo que você imaginar.
1.2. Instalando PyAutoGUI
Para instalar uma biblioteca com pip, você abre o terminal (ou "Prompt de Comando" no Windows) e digita um comando bem simples:
pip install pyautogui
Deixe o professor demonstrar isso na sua frente, executando no computador dele. O que você verá será algo assim:
Collecting pyautogui
Downloading pyautogui-0.9.53-py3-none-any.whl (57 kB)
Installing collected packages: pyautogui
Successfully installed pyautogui-0.9.53
Pronto! A biblioteca está instalada e você pode usá-la. No Python, é só fazer:
import pyautogui
E todos os comandos da biblioteca estão disponíveis.
1.3. Resolvendo erros de instalação
Às vezes, algo dá errado. Os erros mais comuns são:
Erro: "pip não é reconhecido como comando"
Isso significa que o pip não está no caminho do sistema. Solução: use python -m pip em vez de pip:
python -m pip install pyautogui
Erro: "Permission denied" (Acesso negado)
Isso significa que você não tem permissão para instalar. Solução: adicione --user:
pip install --user pyautogui
Erro: "No such file or directory"
Você está tentando instalar do lugar errado. Solução: abra o terminal e tente novamente de qualquer pasta.
Se ainda assim não conseguir, chame o professor — às vezes depende da configuração específica do seu computador.
2. Introdução ao PyAutoGUI
Agora que PyAutoGUI está instalado, vamos entender o que ele faz e por que é tão legal.
2.1. O que é automação e por que importa
Automação é quando você faz um programa fazer coisas que normalmente fariam você (ou um ser humano) ficar digitando e clicando repetidamente. Exemplos:
- Abrir vários arquivos, extrair dados e copiá-los para uma planilha
- Tirar screenshots de um site em vários horários diferentes e salvar
- Preencher formulários com dados de um arquivo CSV
- Abrir um programa, esperar carregar, clicar num botão, esperar resultado
- Digitar a mesma mensagem em vários chats
Sem automação, você gasta horas. Com automação, o programa faz tudo em minutos. Empresa grande ganha dinheiro com isso. Programadores que sabem automação são muito procurados.
PyAutoGUI oferece três superpoderes:
- Controlar o mouse — mover para um lugar, clicar, clicar duplo, clicar direito
- Controlar o teclado — digitar texto, pressionar teclas especiais (Enter, Ctrl, etc)
- Interagir com a tela — tirar screenshots, procurar imagens na tela
2.2. Segurança: o failsafe
Aqui vem uma coisa importantíssima: quando você dá controle do mouse e teclado para um programa, corre o risco dele ficar maluco e fazer coisas incontroláveis. Pode fechar programas importantes, digitar coisas estranhas... Por isso, PyAutoGUI tem um mecanismo de segurança chamado failsafe.
Failsafe = se o programa ficar descontrolado, você consegue parar rapidinho.
Como funciona: se você mover o mouse para o canto superior esquerdo da tela (coordenadas 0,0), o PyAutoGUI levanta uma exceção e interrompe o programa. É como um "botão de pânico" que fica sempre disponível.
Você pode também adicionar pausas no seu programa com pyautogui.PAUSE, que é o tempo (em segundos) que o PyAutoGUI aguarda entre cada ação. Aumentar essa pausa é útil para:
- Dar tempo para o programa que você está controlando responder
- Deixar o programa mais lento para você enxergar o que está acontecendo
- Evitar erros por "pressa"
import pyautogui
# Pausar 1 segundo entre cada comando
pyautogui.PAUSE = 1.0
# Agora cada comando esperará 1 segundo antes de executar o próximo
pyautogui.moveTo(100, 100) # ← 1s de pausa
pyautogui.click() # ← 1s de pausa
pyautogui.write("Oi!") # ← 1s de pausa
2.3. Descobrindo as coordenadas da tela
Antes de mover o mouse para clicar em algo, você precisa saber as coordenadas (x, y) desse algo. A origem (0,0) fica no canto superior esquerdo da tela.
import pyautogui
# Saber o tamanho total da tela
tamanho = pyautogui.size()
print(f"Sua tela tem {tamanho.width} x {tamanho.height} pixels")
# Saber a posição atual do mouse
posicao = pyautogui.position()
print(f"Mouse está em x={posicao.x}, y={posicao.y}")
Execute esse código enquanto move o mouse para diferentes lugares — verá as coordenadas mudando. Você usa isso para descobrir "para onde mover quando quiser clicar no botão X".
Uma dica útil: adicione import time e use time.sleep() para pausar, dando tempo de ver a posição enquanto o programa roda:
import pyautogui
import time
print("Em 3 segundos vou começar a mostrar a posição do mouse a cada segundo")
time.sleep(3)
for i in range(10): # 10 vezes
pos = pyautogui.position()
print(f"Posição: x={pos.x}, y={pos.y}")
time.sleep(1)
3. Controlando o mouse
Com PyAutoGUI, você move, clica e faz tudo que faria com um mouse real.
3.1. Movendo o mouse: moveTo() e moveRel()
moveTo(x, y) move o mouse para uma coordenada absoluta (um lugar específico):
import pyautogui
import time
# Move o mouse para o ponto (500, 300)
pyautogui.moveTo(500, 300)
time.sleep(2)
# Move para outro lugar
pyautogui.moveTo(100, 100)
time.sleep(2)
Se você quiser mover relativamente (isto é, X pixels para a direita, Y pixels para baixo, partindo de onde está agora), use moveRel(x, y):
import pyautogui
import time
# Move 100 pixels para a direita
pyautogui.moveRel(100, 0)
time.sleep(1)
# Move 50 pixels para baixo
pyautogui.moveRel(0, 50)
time.sleep(1)
# Move 30 pixels para a esquerda e 20 para cima
pyautogui.moveRel(-30, -20)
3.2. Clicando: click(), doubleClick(), rightClick()
click() faz um clique simples no ponto onde o mouse está agora:
import pyautogui
pyautogui.moveTo(500, 300) # Move para um lugar
pyautogui.click() # Clica lá
Você também pode passar coordenadas diretamente no click():
import pyautogui
# Clica no ponto (500, 300) sem precisar de moveTo antes
pyautogui.click(500, 300)
doubleClick() é um clique duplo (apertar rápido duas vezes):
import pyautogui
pyautogui.doubleClick(500, 300) # Clique duplo no ponto (500, 300)
rightClick() é o clique direito (abre menu de contexto):
import pyautogui
pyautogui.rightClick(500, 300) # Clique direito
4. Controlando o teclado
Digitar e pressionar teclas é tão importante quanto clicar.
4.1. Digitando texto: write()
write() digita um texto, caractere por caractere:
import pyautogui
import time
pyautogui.PAUSE = 0.1 # Pausa de 100ms entre caracteres (você vê melhor)
# Digita "Olá, mundo!"
pyautogui.write("Ola, mundo!")
time.sleep(2)
Importante: write() não digitará caracteres especiais como acentos, pontuação cheia, etc. Por isso, no exemplo acima, escrevemos "Ola" em vez de "Olá" — o acento não funciona no write(). Se você precisa digitar acentos, tem que usar outra abordagem ou digitar sem acentos.
4.2. Pressionando teclas: press() e hotkey()
press() pressiona uma tecla uma vez:
import pyautogui
pyautogui.press('return') # Pressiona Enter
pyautogui.press('backspace') # Pressiona Backspace
pyautogui.press('tab') # Pressiona Tab
pyautogui.press('shift') # Pressiona Shift
Os nomes das teclas são em inglês. Alguns dos mais comuns:
'return'ou'enter'— Enter'backspace'— Backspace'delete'— Delete'tab'— Tab'space'— Espaço'shift','ctrl','alt'— Modificadores'f1','f2', etc. — Teclas F'up','down','left','right'— Setas
hotkey() pressiona várias teclas simultaneamente (útil para atalhos):
import pyautogui
pyautogui.hotkey('ctrl', 'c') # Ctrl+C (copiar)
pyautogui.hotkey('ctrl', 'v') # Ctrl+V (colar)
pyautogui.hotkey('ctrl', 's') # Ctrl+S (salvar)
pyautogui.hotkey('alt', 'f4') # Alt+F4 (fechar)
5. Exemplo guiado: Abrindo Bloco de Notas e digitando
Vamos juntar tudo o que aprendemos num exemplo bem realista: abrir o Bloco de Notas (programa padrão do Windows) e digitar automaticamente um texto.
Nota para o professor: Este exemplo assume Windows. No Mac, seria
open /Applications/TextEdit.app. No Linux, seriageditounano. Adapte conforme o sistema operacional disponível na sala.
Primeiro, você abre o terminal e sabe qual é o caminho do Bloco de Notas:
C:\Windows\System32\notepad.exe
Agora o programa:
import pyautogui
import subprocess
import time
# Abre o Bloco de Notas
subprocess.Popen(r"C:\Windows\System32\notepad.exe")
# Aguarda o programa abrir (alguns segundos)
time.sleep(3)
# Digita um texto
pyautogui.write("Lista de compras:")
pyautogui.press('return') # Nova linha
pyautogui.write("1. Leite")
pyautogui.press('return')
pyautogui.write("2. Pao")
pyautogui.press('return')
pyautogui.write("3. Queijo")
pyautogui.press('return')
pyautogui.write("4. Manteiga")
print("Pronto! Verifique o Bloco de Notas.")
O que acontece aqui, passo a passo:
subprocess.Popen(r"C:\...")— Abre um programa externo. Orantes das aspas significa "raw string" (string bruta), ignorando barras invertidas especiais do Windows.time.sleep(3)— Aguarda 3 segundos, porque o Bloco de Notas não abre instantaneamente. Se não esperar, o código tenta digitar antes do programa estar pronto e a digitação não funciona.pyautogui.write()— Digita o texto. Repare que evitamos acentos.pyautogui.press('return')— Pressiona Enter para ir para a próxima linha.
A importância de time.sleep()
Aqui está uma verdade fundamental: seu programa roda muito mais rápido que os programas visuais. Se você pedir para abrir um programa e começar a digitar logo depois, o programa pode não ter tido tempo de abrir ainda. Por isso, você sempre usa time.sleep() para dar tempo ao outro programa responder.
Regra prática: quanto maior a "coisa" que você está esperando, maior o tempo de sleep:
- Abrir um programa =
sleep(2)asleep(3) - Carregar uma página web =
sleep(3)asleep(5) - Um simples clique responder =
sleep(0.5)asleep(1) - Apenas digitar =
sleep(0.1)asleep(0.2)
6. Captura de tela (breve visão geral)
PyAutoGUI também consegue tirar screenshots e procurar imagens na tela. Isso é avançado, mas é legal saber que existe.
import pyautogui
# Tira uma screenshot
imagem = pyautogui.screenshot()
# Salva como arquivo
imagem.save('minha_tela.png')
# Se quiser, procura uma imagem conhecida na tela
# (útil para saber se um botão apareceu, por exemplo)
posicao = pyautogui.locateOnScreen('botao.png')
if posicao:
print(f"Botão encontrado em {posicao}")
else:
print("Botão não está visível agora")
Procurar imagens na tela é muito útil para automação robusta, mas requer um pouco de prática. Deixe para explorar depois se quiser.
7. Prática com PyAutoGUI
Agora você vai ver o professor demonstrar um exemplo de automação começando a ser mais real. Acompanhe no seu computador — realmente rode o código, não é só para olhar. Entenda o que cada linha faz.
O professor vai demonstrar num exemplo bem simples primeiro:
import pyautogui
import time
# Segurança
pyautogui.PAUSE = 0.5
print("Começando em 5 segundos. Se quiser parar, mova o mouse para o canto superior esquerdo!")
time.sleep(5)
# Move o mouse e desenha um retângulo (lentamente)
pontos = [
(200, 200), # canto superior esquerdo
(600, 200), # canto superior direito
(600, 400), # canto inferior direito
(200, 400), # canto inferior esquerdo
(200, 200), # volta ao início
]
for x, y in pontos:
pyautogui.moveTo(x, y)
time.sleep(0.5)
print("Retângulo concluído!")
Execute isso e você verá o mouse desenhar um retângulo na tela lentamente. Viu? Seus programas agora controlam a máquina!
8. Exercícios
Aqui estão 10 exercícios para você praticar. Todos os exercícios com PyAutoGUI devem incluir time.sleep() em lugares estratégicos — lembre-se que os programas visuais precisam de tempo para responder.
Dica importante: muitos desses exercícios vão manipular o computador, então sempre deixe o failsafe ativo (mover mouse para o canto para parar). Se algo der errado, você consegue parar rápido.
a) Instale PyAutoGUI (se ainda não fez) e crie um programa que exiba o tamanho da sua tela usando pyautogui.size() e a posição atual do mouse usando pyautogui.position(). Rode o código algumas vezes enquanto move o mouse para diferentes lugares.
b) Crie um programa que move o mouse lentamente percorrendo um retângulo. Use uma lista com as 4 coordenadas dos cantos e um loop for para visitá-las. Deixe visualmente lento (com time.sleep() entre os pontos) para você enxergar o que está acontecendo.
c) Abra o Bloco de Notas automaticamente (no Windows, use subprocess.Popen(r"C:\Windows\System32\notepad.exe")) e digite automaticamente uma lista de compras com pelo menos 5 itens. Use time.sleep() para aguardar a abertura e entre cada operação.
d) Crie um programa que pede um texto ao usuário com input(), aguarda 5 segundos (para você posicionar a janela do Bloco de Notas ou outro editor), e depois digita o texto automaticamente. Útil quando você quer digitar em muitos lugares!
e) Crie um programa que tira uma screenshot da tela (pyautogui.screenshot()) e salva com um nome que inclua a data e hora (use a biblioteca datetime para pegar a data/hora atual). Por exemplo: screenshot_2024-03-15_14-30-45.png.
f) Combine vários conceitos: crie um programa que: - Pede um nome ao usuário - Cria uma lista com 5 tarefas - Ordena a lista em ordem alfabética - Exibe as tarefas formatadas com números (1., 2., 3., etc) - Tira uma screenshot do resultado
Isso junta Python puro (variáveis, funções, listas) com a capacidade de capturar a tela.
g) Com Turtle, crie uma cena visual com pelo menos 3 funções diferentes. Exemplo: uma função desenha_casa(), outra desenha_arvore() e outra desenha_nuvem(). Use um loop para desenhar múltiplas versões em cores diferentes da lista. Desenhe uma paisagem bonita.
h) Crie uma "biblioteca de funções úteis" com pelo menos 5 funções que você desenvolveu ao longo do curso: - Uma função que valida se um número está numa faixa - Uma que calcula o maior de uma lista - Uma que inverte uma string - Uma que conta ocorrências de um caractere - Uma que formata um número com reais (R$)
Documente cada função com comentários explicando o que faz, parâmetros e o que retorna.
i) Crie um script de automação real (5+ ações em sequência): - Abra um editor de texto - Digite um título - Digite 3 parágrafos de um texto qualquer - Salve o arquivo - Tire uma screenshot
Este exercício combina subprocess, PyAutoGUI, time.sleep() e filehandling.
j) Planeje por escrito um projeto integrador (veja a seção 9 abaixo). Descreva: - Qual é a ideia geral - Quais conceitos do curso vai usar (if, loops, funções, listas, strings, etc) - Qual vai ser o "produto final" que o usuário vê - Quais são os 5 passos principais para desenvolvê-lo
Seu plano será a base para o trabalho final.
9. O Projeto Integrador
Parabéns por chegar até aqui. Agora é hora de você criar seu próprio programa do zero — não é um exercício guiado, é um projeto escolhido por você, planejado por você, desenvolvido por você.
9.1. O que é um projeto integrador
Um projeto integrador é um programa completo que junta tudo o que você aprendeu nos 7 capítulos:
- Variáveis e tipos de dados
- Entrada e saída (
input()eprint()) - Estruturas de decisão (
if,elif,else) - Laços de repetição (
for,while) - Funções (com parâmetros e
return) - Listas e strings
- Turtle para visualização (opcional)
- PyAutoGUI para automação (opcional, apenas se fizer sentido)
Não é um programa trivial — é algo com lógica de verdade, que resolve um problema real ou cria algo interessante.
9.2. Ideias de projetos
Se não sabe o que fazer, aqui estão algumas sugestões. Escolha uma que realmente te interessa:
1. Jogo da Forca com Turtle
O computador pensa numa palavra secreta. Você tenta adivinhar letra por letra. Cada erro desenha uma parte de uma forca (tipo desenho). Você vence se adivinhar a palavra antes de a forca ficar completa.
Conceitos: listas, strings, loops, if/elif, funções, Turtle
2. Calculadora Gráfica com Turtle
Um programa que desenha gráficos de funções matemáticas. O usuário digita uma fórmula (como x*x + 2*x - 3) e você desenha o gráfico no Turtle. Bônus: permite clicar na tela para ver o valor da função naquele ponto.
Conceitos: funções matemáticas, loops, Turtle, coordenadas
3. Editor de Desenho Interativo
Um programa que deixa você desenhar com o mouse (ou teclado) numa tela Turtle. Você controla uma "caneta" que deixa rastros. Botões para mudar cor, tamanho, limpar tela.
Conceitos: Turtle, eventos de mouse/teclado (se conseguir), variáveis de estado
4. Agenda de Contatos com Listas
Um programa que gerencia uma lista de contatos (nome, telefone, email, endereço). Menu interativo: adicionar contato, procurar, listar todos, deletar, editar. Salva os contatos em arquivo (bônus de desafio).
Conceitos: listas, dicionários ou estruturas simples, funções, loops, strings
5. Quiz com Tema Escolhido
Um quiz estilo jogo com várias rodadas, pontuação, dificuldade progressiva. Tema escolhido por você (ciência, história, games, música, esportes...). Perguntas podem ser abertas ou múltipla escolha.
Conceitos: listas, if/elif, funções, loops, variáveis acumuladoras
6. Simulador de RPG Simples
Um jogo de aventura baseado em texto. Você é um herói e toma decisões (esquerda, direita, atacar, falar, etc). Cada decisão leva a cenários diferentes. Pode ter inimigos, vida, inventário.
Conceitos: estruturas condicionais complexas, loops, funções para cenários, variáveis de estado
7. Gerador de Histórias Aleatórias
Um programa que cria histórias únicas combinando palavras aleatoriamente. "Um [animal] [adjetivo] estava [lugar] quando [evento] aconteceu..." Salva histórias em arquivo.
Conceitos: listas, random.choice(), strings, funções, arquivo
8. Simulador de Loja
Um programa que simula uma loja com inventário. Cliente vê produtos (com preços), pode comprar, vê o total, aplica desconto se gastar muito. Gerenciador vê o que foi vendido.
Conceitos: dicionários/listas, loops, funções, cálculos monetários
9.3. Como desenvolver seu projeto
Siga esses 5 passos, nessa ordem:
Passo 1: Planejamento escrito
Antes de escrever uma única linha de código, escreva num documento (papel mesmo, ou Word, ou bloco de notas):
- O que exatamente seu programa faz?
- Qual é o "fluxo" principal? (O usuário digita um menu, escolhe uma opção, acontece algo, volta ao menu...)
- Quais funções você vai criar? (Liste o nome e o que cada uma faz)
- Quais variáveis vai precisar?
- Quais são os 5-10 cenários principais que o programa deve cobrir?
Gaste 30-60 minutos nisso. Parece perda de tempo, mas evita que você recomece do zero 3 vezes.
Passo 2: Estrutura básica
Comece com um "esqueleto" do programa:
# Projeto: [Nome]
# Aluno: [Seu nome]
# Data: [Data]
def menu():
# Menu principal
pass
def funcao1():
# Descrição
pass
def funcao2():
# Descrição
pass
# Programa principal
while True:
menu()
opcao = input("Escolha: ")
if opcao == "1":
funcao1()
elif opcao == "2":
funcao2()
# ... mais opções
Teste que o esqueleto roda sem erros (mesmo que as funções façam nada).
Passo 3: Desenvolva uma funcionalidade por vez
Não tente fazer tudo de uma vez. Escolha uma coisa (exemplo: adicionar um contato) e termine, teste, certifique-se que funciona. Depois vá para a próxima.
Use input() para testar — você não precisa do programa estar perfeito, só funcionando.
Passo 4: Testes e ajustes
Para cada funcionalidade, teste com entradas normais, entradas erradas, casos limite:
- Números muito grandes
- Strings vazias
- Letras onde deveria ser número
- Clique em coisas estranhas
Se der erro, leia a mensagem de erro com atenção. Ela sempre diz onde está o problema.
Passo 5: Apresentação
Quando terminar, você apresenta o projeto na aula (mesmo que brevemente — 2-5 minutos). Mostre:
- O que o programa faz
- Como ele funciona (rode um exemplo)
- Quais conceitos do curso você usou
- Uma coisa que você aprendeu de novo durante o desenvolvimento
Isso consolida o aprendizado e é bom para seu portfólio (se quiser seguir carreira em programação, esse projeto é algo real que você criou).
9.4. Dicas finais
- Não tenha medo de erros — errar é programar. Cada erro é uma chance de entender melhor o Python.
- Use comentários — seu código deve ser entendível por alguém (ou por você daqui a 6 meses).
- Salve o código com um nome descritivo —
projeto_final.pyouagenda_contatos.py, nãotrabalho.py. - Peça ajuda cedo — se travar em algo por mais de 15-20 minutos, chame o professor. Ele adora ajudar.
- Faça algo que você curte — se escolher um tema de que gosta, fica bem mais divertido de programar.
10. Mensagem de encerramento
Você fez um percurso longo. No Capítulo 1, conhecia apenas print() e achava que era magia. Agora, sabe:
- Declarar variáveis de qualquer tipo
- Pedir dados do usuário e validar
- Tomar decisões com
ifeelse - Repetir ações com loops
- Dividir código em funções reutilizáveis
- Manipular listas e strings
- Desenhar com Turtle
- Instalar bibliotecas
- Automatizar tarefas com PyAutoGUI
Isso é o essencial de programação. Tudo mais que você aprender (programação web, bancos de dados, inteligência artificial, apps para celular) é construído em cima disso que você já sabe.
O salto que você vai dar agora depende da sua curiosidade. Tem interesse em games? Estude pygame ou Godot. Quer fazer sites? Aprenda HTML, CSS e JavaScript. Fascina-se por dados? Estude pandas e matplotlib. A linguagem Python é só o começo.
E lembre-se: os maiores programadores do mundo não são os que sabem tudo. São os que gostam de resolver problemas, não desistem quando erram, e procuram aprender sempre. Isso você já tem.
Boa sorte no projeto. Você consegue.