Como Automatizar Processos com PyAutoGUI

Aprenda a automatizar processos com PyAutoGUI e economize horas de trabalho manual baixando centenas de documentos automaticamente.

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.

Menu “File” do Visual Studio Code aberto, com a opção “Open Folder…” destacada em roxo, indicando o caminho para abrir uma pasta no editor

Com ela aberta, criaremos a seguinte estrutura de arquivos:

Codigo
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:

Codigo
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 Excel

Importando 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:

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

Codigo
pa.PAUSE = 0.5

Lendo a Lista de Artigos

Agora vamos ler a planilha Excel que contém os códigos DOI dos artigos:

Codigo
# 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.

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Começar agoraSeta para a direita
Fundo PythonTelas Python
Luz Python

Criando a Função para Abrir o Navegador

Em seguida, criaremos a primeira função responsável por abrir o Google Chrome:

Python
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:

Python
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:

Python
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:

Python
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:

  1. Execute este arquivo, clicando no botão de play que aparece no canto superior direito do VS Code;
  2. Rapidamente, mova o mouse até o botão "Download" no site;
  3. Espere os 5 segundos;
  4. 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:

Python
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:

Python
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_arquivo

No 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:

Python
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_arquivo

No 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:

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

Codigo
# 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!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes de Python

Posts mais recentes da Hashtag Treinamentos