Como Automatizar Processos com PyAutoGUI
Aprenda a automatizar processos com PyAutoGUI e economize horas de trabalho manual baixando centenas de documentos automaticamente.
O que você vai ver aqui?
Introdução
Fala, impressionador(a)!
Imagine ter que baixar manualmente mais de 200 artigos científicos, um por um. Você entra no site, pesquisa o código do artigo, clica em download, salva o arquivo, anota qual foi baixado e repete isso 200 vezes. Esse trabalho manual poderia levar facilmente 15 horas do seu dia.
Mas e se você pudesse criar um script em Python que fizesse tudo isso automaticamente enquanto você trabalha em outras coisas? É exatamente isso que você vai aprender neste artigo.
Vou te mostrar como construir uma automação real, usada para resolver um problema do dia a dia, que transformou 15 horas de trabalho manual em 5 horas de execução automática, sem precisar ficar na frente do computador.
Então, se você curtiu e quer aprender como construir essa automação, vem comigo!
Para fazer o download do(s) arquivo(s) utilizados na aula, preencha com o seu e-mail:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
O Contexto do Projeto Real
Esse não é um exemplo teórico. Este projeto surgiu de uma necessidade real: uma pesquisadora precisava baixar mais de 200 papers acadêmicos do Sci-Hub, um repositório de artigos científicos de domínio público, para sua pesquisa de mestrado.
O processo manual seria:
- Acessar o site do Sci-Hub;
- Pesquisar cada artigo pelo código DOI (identificador único de documentos acadêmicos);
- Fazer o download do PDF;
- Salvar com o nome correto;
- Registrar quais artigos foram encontrados e quais não estavam disponíveis.
Multiplicando isso por 200 artigos, teríamos aproximadamente 15 horas de trabalho repetitivo e cansativo.
Por Que Escolher PyAutoGUI para Esta Automação
Há várias formas de automatizar processos web em Python, como: Selenium, Beautiful Soup, requests, entre outras. Mas neste caso específico, escolhemos trabalhar com o PyAutoGUI, uma biblioteca que controla o mouse e o teclado do seu computador, simulando exatamente o que uma pessoa faria manualmente. Em vez de interagir diretamente com o código HTML da página (como o Selenium faz), o PyAutoGUI simplesmente clica, digita e navega como se fosse você.
Caso queira entender mais sobre o PyAutoGUI, você pode acessar o vídeo Pyautogui- Automatize Qualquer Sistema com Python [Passo a Passo].
As principais vantagens são:
- Rapidez de implementação: o código foi desenvolvido em aproximadamente 15 minutos;
- Facilidade de uso: você não precisa entender a estrutura HTML do site;
- Funciona em qualquer site: não importa como o site está construído;
- Simula comportamento humano: reduz chances de ser bloqueado por sistemas anti-bot.
Preparando o Ambiente
Antes de começar, você precisa ter Python e VS Code instalados no seu computador. Se ainda não tem, você pode acessar o nosso artigo Como Configurar VS Code para Python, com um passo a passo explicando tudo que você precisa fazer.
Com o Python instalado precisaremos criar uma pasta chamada "projeto_papers" na área de trabalho, por exemplo,para armazenar todos os arquivos do projeto.
Em seguida vamos abrir o VS Code, clicar no canto superior esquerdo em File e selecionar a opção Open Folder para abrir a pasta que acabamos de criar.

Com ela aberta, criaremos a seguinte estrutura de arquivos:
projeto_papers
|
|_main.py (seu código principal)
|_papers_id.xlsx (planilha com os códigos dos artigos)
|_log.txt (arquivo vazio para registrar os downloads)O arquivo "papers_id.xlsx" pode ser baixado diretamente no material disponível na aula, com os demais arquivos. Esta planilha possui duas colunas:
- title: Nome do artigo;
- DOI: Código identificador do artigo.
Com Python instalado, selecione na aba Explorer do VS Code a pasta "projeto_papers" e abra o terminal integrado com o comando CTRL + J. No terminal, digite os seguintes comandos para instalar as bibliotecas necessárias:
pip install pyautogui #Para controlar mouse e teclado
pip install pandas #Para ler a planilha Excel com a lista de artigos
pip install openpyxl #Necessário para o Pandas trabalhar com arquivos ExcelImportando as Bibliotecas e Configurações Iniciais
No arquivo "main.py", começaremos importando as bibliotecas que baixamos e outras que iremos utilizar ao longo da automação:
import pyautogui as pa # Automação do mouse, teclado e tela
import time # Controle de tempo e pausas no código
import pandas as pd # Manipulação e análise de dados em tabelas
import os # Interação com arquivos e pastas do sistema
import glob # Busca de arquivos usando padrões (*.csv, *.xlsx)Além das importações podemos definir vamos também definir meio segundo de espera entre cada comando do PyAutoGUI para evitar que o código execute rápido demais e acabe levando a bugs e comportamentos indesejados.
pa.PAUSE = 0.5Lendo a Lista de Artigos
Agora vamos ler a planilha Excel que contém os códigos DOI dos artigos:
# Ler o arquivo Excel com os DOIs
arquivo = pd.read_excel('papers_id.xlsx')
# Extrair apenas a coluna DOI
lista_doi = arquivo['DOI']No código acima, o Pandas lê o arquivo Excel e transforma em uma estrutura de dados chamada DataFrame. Depois, extraí apenas a coluna DOI, que contém os códigos que precisamos pesquisar.
Criando a Função para Abrir o Navegador
Em seguida, criaremos a primeira função responsável por abrir o Google Chrome:
def abrir_navegador():
# Apertar tecla Windows para abrir o menu Iniciar
pa.press('win')
# Digitar "Chrome" na barra de pesquisa
pa.write('chrome')
# Apertar Enter para abrir o Chrome
pa.press('enter')
# Esperar 3 segundos para garantir que o navegador abriu completamente
time.sleep(3)Abrindo o Site Sci-Hub
A próxima função vai entrar no site do Sci-Hub:
def abrir_scihub():
# Aperta a combinação de teclas CTRL + L para selecionar barra de navegação
pa.hotkey('ctrl', 'l')
# Digitar o endereço do site
pa.write('https://sci-hub.in')
# Apertar Enter
pa.press('enter')
# Esperar 4 segundos para o site carregar
time.sleep(4)Diferente do comando press, o hotkey consegue apertar duas ou mais teclas ao mesmo tempo e isso permite usar atalhos comuns, como Ctrl+C, Ctrl+V, Alt+Tab e o próprio CTRL + L.
Pesquisando o Artigo
Agora vamos criar a função que pesquisa o DOI de cada artigo:
def pesquisar_doi(doi):
# Digitar o código DOI
pa.write(doi)
# Apertar Enter para pesquisar
pa.press('enter')
# Esperar 10 segundos para carregar o PDF
time.sleep(10)No código acima, colocamos 10 segundos de espera, pois artigos maiores podem demorar mais para carregar. Os 10 segundos garantem que mesmo PDFs grandes terão tempo suficiente para aparecer na tela.
Quando sua automação vai rodar por horas, é melhor ser conservador nos tempos de espera. É preferível que o código demore um pouco mais, mas funcione de forma confiável, do que ser ultrarrápido e travar no meio do processo.
Capturando a Posição do Botão Download
Antes de criar a função de download, precisamos descobrir onde fica o botão "Download" na tela. Por isso, criaremos um arquivo auxiliar chamado "auxiliar.py". Dentro dele, vamos inserir o seguinte código:
import pyautogui as pa
import time
# Espera 5 segundos
time.sleep(5)
# Mostra a posição do mouse
print(pa.position())Para usar este código, você precisa:
- Execute este arquivo, clicando no botão de play que aparece no canto superior direito do VS Code;
- Rapidamente, mova o mouse até o botão "Download" no site;
- Espere os 5 segundos;
- O código mostrará as coordenadas X e Y do mouse.
Por exemplo, pode aparecer: Point(x=1795, y=141. Contudo, esses números variam de acordo com: resolução da tela, tamanho da janela do navegador e posição do navegador na tela. Por isso, você precisa descobrir suas próprias coordenadas!
Fazendo o Download
Com as coordenadas em mãos, chegou o momento de criar a função de download:
def fazer_download():
# Clica no botão download, usando as coordenadas que coletamos previamente
pa.click(1795, 141)
# Espera 1 segundo
time.sleep(1)
# Aperta a tecla Enter para confirmar
pa.press('enter')
# Espera 4 segundos para o download
time.sleep(4)
# Aperta a tecla ESC para fechar a janela de download
pa.press('esc')Antes de executar esta automação, baixe manualmente um arquivo qualquer pelo Chrome e salve na pasta onde quer guardar os artigos. Isso faz o navegador "lembrar" dessa pasta como padrão, evitando que você precise programar a seleção de pasta no código.
Verificando se o Download Funcionou
Pode ser que ao pesquisar por algum DOI o artigo não seja encontrado. Com isso, o donwload não é efetuado. Por conta disso, precisamos saber se o artigo foi realmente baixado:
def verificar_download(pasta, qtd_antiga):
# Contar quantos arquivos tem agora na pasta
qtd_nova = len(os.listdir(pasta))
# Se tem mais arquivos, o download funcionou
if qtd_nova > qtd_antiga:
erro = False
else:
erro = True
# Pega o nome do último arquivo baixado
nome_arquivo = pegar_ultimo_arquivo(pasta)
# Retorna se deu erro e qual o nome do arquivo
return erro, nome_arquivoNo código acima, contamos quantos arquivos existem na pasta antes e depois do download, se o número aumenta a cada download, quer dizer que tudo está certo. Porém, se o número não aumentar, o artigo não foi encontrado e, portanto, houve um erro.
Pegando o Último Arquivo Baixado
Para relacionar qual arquivo corresponde a qual artigo, precisamos saber o nome do último arquivo baixado:
def pegar_ultimo_arquivo(pasta):
# Lista todos os arquivos da pasta
lista_arquivos = glob.glob(os.path.join(pasta, '*'))
# Pega o arquivo mais recente (último criado)
ultimo_arquivo = max(lista_arquivos, key=os.path.getctime)
return ultimo_arquivoNo código abaixo:
- glob.glob(): lista todos os arquivos da pasta;
- max(..., key=os.path.getctime): encontra o arquivo com data de criação mais recente.
Registrando Tudo em um Log
Por fim, criamos um registro de tudo que aconteceu:
def registrar_log(erro, nome_arquivo, doi):
# Define a mensagem de acordo com o resultado
if erro:
mensagem = f"{doi}: ERRO\n"
else:
mensagem = f"{doi}: SUCESSO - Arquivo: {nome_arquivo}\n"
# Mostrar no terminal
print(mensagem)
# Salvar no arquivo "log.txt"
with open('log.txt', 'a') as log:
log.write(mensagem)Dentro da função, há uma estrutura condicional que verifica o valor de erro. Se for verdadeiro, a função monta uma mensagem informando que houve erro associado ao DOI. Caso contrário, ela cria uma mensagem de sucesso, incluindo o nome do arquivo gerado. Essa mensagem é construída usando f-strings, o que permite inserir variáveis diretamente dentro do texto de forma simples e legível.
Em seguida, a mensagem é exibida no terminal por meio da função print, permitindo que o usuário acompanhe em tempo real o andamento do processo. Por fim, o código abre (ou cria, se não existir) o arquivo log.txt no modo de anexação ('a') e grava a mensagem nele, garantindo um registro permanente de todas as execuções, sem apagar os logs anteriores.
Juntando Tudo
Agora que todas as funções estão prontas, o próximo passo é criar um loop responsável por executar o processo completo para cada arquivo.
# Definir a pasta de destino
pasta = r'C:\Users\SeuUsuario\Downloads\papers'
# Abrir o navegador uma única vez
abrir_navegador()
# Para cada artigo na lista
for doi in lista_doi:
# Contar quantos arquivos tem antes do download
qtd_antiga = len(os.listdir(pasta))
# Executar todo o processo
abrir_scihub()
pesquisar_doi(doi)
fazer_download()
erro, nome_arquivo = verificar_download(pasta, qtd_antiga)
registrar_log(erro, nome_arquivo, doi)Nesse loop, o script primeiro conta quantos arquivos já existem na pasta de destino, em seguida acessa o Sci-Hub, realiza a pesquisa do artigo correspondente, efetua o download do arquivo e verifica se a operação foi concluída com sucesso. Por fim, independentemente do resultado, o sistema registra a execução no arquivo de log, garantindo o acompanhamento e o controle de todo o processo.
Conclusão
Automatizar tarefas repetitivas não é apenas sobre economizar tempo, é sobre liberar sua mente para trabalhos que realmente importam.
Quer se aprofundar ainda mais? Temos um minicurso gratuito de automação em Python e ocurso completo de Python. Além disso, se preferir esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Hashtag Treinamentos
Para acessar outras publicações de Python, clique aqui!
Posts mais recentes de Python
- Curso Básico de Python: Saia do Zero em 10 Aulas GrátisAprenda com o curso básico de Python gratuito da Hashtag: 10 aulas práticas, exercícios e projetos reais para sair do zero em programação.
- Agentes RAG com Python: como criar um assistente de IAAprenda a criar Agentes RAG com Python do zero: LangChain, FAISS e OpenAI para montar um assistente de IA que responde com base nos seus documentos.
- 25 Tipos de Gráficos em Python: Guia Completo com CódigoAprenda a criar os principais tipos de gráficos em Python com Plotly: barras, pizza, mapas e mais, com código pronto para copiar e usar.
Posts mais recentes da Hashtag Treinamentos
- Planilha de Controle de Notas Fiscais no Excel [Grátis]Baixe a planilha de controle de notas fiscais no Excel grátis: calcule ISS e retenções, veja o que está em aberto e gere a cobrança de cada nota de serviço.
- Qual IA usar na empresa: ChatGPT, Claude ou Perplexity?Qual IA usar na empresa: veja as diferenças entre ChatGPT, Claude e Perplexity e quando cada um rende mais em cada área da sua equipe.
- Apostilas Gratuitas em PDF: Excel, Power BI, Python e IABaixe apostilas gratuitas em PDF de Excel, Power BI, Python, Claude e agentes de IA, com exercícios e gabarito. Escolha a sua e comece hoje.








