image

Acesse bootcamps ilimitados e +650 cursos pra sempre

Disponível apenas:

208 vagas
Marcio Camara
Marcio Camara20/04/2026 14:15
Compartilhe
CI&T - Do Prompt ao AgenteRecomendados para vocêCI&T - Do Prompt ao Agente

Python - Mac Os - Biblioteca pyautogui

    As próximas linhas têm por objetivo compartilhar uma “dor” que me gerou um desconforto grande, e já que dediquei tempo e energia procurando essa solução, vou compartilhar essa informação, mas rogo clemência aos mais experientes: Foi redigido por um “tio de 47 anos com uma formação acadêmica em Humanas, e é algo que acredito que pode contribuir com colegas que estejam em processo de transição de carreira, ou mesmo começando agora sua jornada pela linguagem Python”.

    Aceito críticas, desde que o objetivo delas seja construtivo.

    Em casa, utilizo o Mac os e no trabalho o Windows. Essa diferença resulta em uma dificuldade: o que funciona em casa pode não funcionar no trabalho, e acabei chegando em uma situação em que, um aplicativo desenvolvido pela equipe de TI da minha unidade não funcionava na minha máquina.

    Chamei o colega responsável, e a primeira coisa que ele falou após eu reportar o problema foi: “Mas na minha máquina funciona”. É raro, mas acontece nas melhores famílias, e agora eu estava como responsável por entregar a solução para mim mesmo e não poderia me conformar com essa simples resposta.

    Nos últimos dias, precisei automatizar uma tarefa repetitiva: abrir o Google Drive pelo Chrome, navegar até uma pasta e capturar dados para um pipeline de ETL. A ferramenta escolhida foi o pyautogui — uma biblioteca Python que controla o mouse e o teclado do computador, como se fosse uma "mão virtual" digitando e clicando no lugar do usuário.

     O que eu queria fazer x o que aconteceu

    Problema 1 — O texto saía todo em MAIÚSCULAS

    Eu passava um link em letras minúsculas para o pyautogui.write(), e o que aparecia na tela era o link inteiro em maiúsculas. O código rodava sem erro. O resultado estava errado.

    Aqui aprendi algo importante: pyautogui.write() não "digita texto" como um humano digita. Ela simula teclas físicas do teclado, uma por uma. Pense assim: é como se alguém pedisse para você digitar uma mensagem, mas você tivesse que pressionar cada tecla de um teclado mecânico — se o teclado está configurado para maiúsculas, tudo sai em maiúsculas, independente do que você queria escrever.

    No macOS, um estado residual do sistema após atalhos como Cmd + Espaço pode deixar a tecla Shift "presa" sem você perceber. E como o pyautogui é mapeado para o layout de teclado americano (US QWERTY), qualquer diferença de configuração ou sistema operacional já é suficiente para quebrar o comportamento esperado.

    A solução: usar a área de transferência (o famoso "Ctrl+C / Ctrl+V") em vez de simular digitação. Com a biblioteca pyperclip, copiamos o texto para a memória do computador e mandamos o Python "colar" com Cmd+V. O texto chega exatamente como foi escrito — sem depender do estado do teclado.

    Problema 2 — O Chrome abria, mas o clique colava no VS Code

    Depois de resolver o texto, o próximo passo era navegar até uma pasta do Drive. O Chrome abria normalmente, mas quando o Python tentava colar o link na barra de endereços, o conteúdo ia parar numa célula do VS Code — o editor de código em uso.

    O motivo: o computador não é mágico. Quando você manda abrir um programa, ele precisa de tempo para abrir a janela e ganhar o "foco" (atenção) do sistema operacional. Se o Python mandar um Cmd+V rápido demais, o sistema ainda está "olhando" para o VS Code, não para o Chrome.

    Cada sistema operacional tem seus próprios comandos. No macOS, o comando nativo para abrir aplicativos é:

    subprocess.Popen(['open', '-a', 'Google Chrome'])
    

    No Windows, o equivalente seria:

    subprocess.Popen(['start', 'chrome'], shell=True)
    

    Essa diferença parece pequena, mas faz toda a diferença em automação. Cada sistema operacional é um país diferente — com seu próprio idioma.

    Problema 3 — O duplo clique na pasta simplesmente não funcionava

    O mouse se movia até a posição certa. O código terminava sem erros. A pasta não abria. Aqui surgiram dois problemas ao mesmo tempo:

    · Coordenada negativa (x=-1038): Macs com tela Retina usam um sistema de coordenadas diferente. A tela física tem o dobro de pixels, mas o sistema operacional trabalha com "pontos lógicos" — metade do valor. Eu uso 2 monitores, e o chrome foi aberto no monitor localizado a minha à esquerda dem relação a tela principal, as coordenadas podem ficar negativas, o que o pyautogui simplesmente ignora.

    · Bug do duplo clique no macOS com pyautogui: É um problema documentado. A implementação da biblioteca não converte o duplo clique corretamente para o sistema de eventos do macOS. A solução foi trocar para a biblioteca pynput apenas para os cliques físicos, simulando dois cliques separados com um intervalo de 150ms — tempo suficiente para o macOS reconhecer como duplo clique.

    O que tudo isso ensina sobre aprender Python (e tecnologia em geral)

    • Erros silenciosos são os mais traiçoeiros. Quando o código roda sem mensagem de erro, mas o resultado está errado, o problema geralmente não está na lógica — está na interação entre o código, a biblioteca, o sistema operacional e o hardware. Desenvolver o hábito de questionar "o código está correto, mas o ambiente está configurado certo?" economiza horas de investigação.
    • Cada sistema operacional é um país diferente. Windows, macOS e Linux têm culturas próprias: comandos diferentes, caminhos de arquivo diferentes, comportamentos diferentes para as mesmas bibliotecas. Uma automação que funciona no Windows pode falhar completamente no Mac — não porque o código está errado, mas porque o "idioma" do sistema é outro.
    • Versões importam. Uma biblioteca Python se comporta diferente dependendo da versão instalada, do sistema operacional e até da versão do Python. Antes de procurar um erro no seu código, vale perguntar: qual versão estou usando? Esse comportamento é um bug conhecido nessa versão?

    Como usar IA de forma investigativa (não só para "pedir a resposta")

    Usar IA para aprender programação é poderoso — mas a diferença entre aprender de verdade e só copiar código está na forma como você faz a pergunta.

    Eu uso sim, atualmente o Claude Sonnet 4.6, mas minha abordagem em relação a IA sempre foi utilizá-la como um tutor, alguém que consiga ver os pontos cegos que um iniciante não consegue, não apenas pegar a resposta pronta e é isso, o que pode resultar até em um problema de segurança grave nos casos em que não existir conhecimento suficiente para ser crítico em relação a solução apresentada pela IA.

    A pergunta "me dá o código para clicar duas vezes numa pasta" recebe um código. Segue um exemplo do prompt que utilizei, com esse foco em aprimorar seus conhecimentos em relação aos problemas com seu código.

    "Estou usando Python [versão X] no [sistema operacional] com a biblioteca [nome] versão [X.X]. Estou tentando fazer [descrição do objetivo]. Quando executo o código abaixo, acontece [descrição do comportamento errado]. Eu esperava que [descrição do comportamento esperado]. O que pode estar causando esse problema, levando em conta as particularidades do meu sistema operacional e da versão da biblioteca? E qual seria a forma mais robusta e recomendada de resolver isso?"

    Esse modelo força você a:

    1.    Descrever o ambiente completo — sistema, versão do Python, versão da biblioteca

    2.    Separar o que acontece do que você esperava — diagnóstico preciso

    3.    Pedir a causa, não só a solução — você entende o porquê, não só o como

    4.    Buscar a solução robusta — não a gambiarra que funciona hoje e quebra amanhã

    A IA é uma ferramenta de investigação, não um oráculo. Quanto mais contexto você fornece, mais útil ela se torna — e mais você aprende no processo.

    Cada um dos problemas acima poderia ter me feito desistir. O código rodava, parecia certo, e mesmo assim estava errado. Isso é frustrante. É normal. É parte do processo.

    O que muda com o tempo não é a ausência de erros — é a velocidade com que você identifica, investiga e resolve. E cada erro resolvido é um conhecimento que fica.

    Se você está começando em Python ou em qualquer área técnica: o caminho não é linear, mas cada tropeço te ensina algo que nenhum tutorial consegue.

    Continue a nadar!

    Compartilhe
    Recomendados para você
    Bootcamp Afya - Automação de Dados com IA
    Globant  - Java & Spring Boot AI Developer
    Accenture - Python para Análise e Automação de Dados
    Comentários (0)
    Recomendados para vocêCI&T - Do Prompt ao Agente