Criar pasta em um diretório usando somente o mouse com pyautogui
:
# 202312 - Python 3.12.0
import pyautogui
import os
import logging
logging.basicConfig(level=logging.DEBUG, encoding='utf-8',
filename='app.log', filemode='a',
format='%(levelname)s - %(message)s - %(asctime)s')
def single_click(x, y):
pyautogui.click(x, y, duration=1)
def double_click(x, y):
pyautogui.doubleClick(x, y, duration=1)
def right_click(x, y):
pyautogui.rightClick(x, y, duration=1)
def get_coordinates(file_path):
coordenadas = {}
with open(file_path, 'r') as file:
for line in file:
x, y, key = line.split(',')
x, y = map(int, (x, y))
coordenadas[key.strip()] = (x, y)
return coordenadas
coordenadas = get_coordinates('coordenadas.txt')
def contar_pastas_no_diretorio(diretorio):
return len(os.listdir(diretorio))
diretorio = './assets'
pastas_existentes = contar_pastas_no_diretorio(diretorio)
def criar_pasta():
try:
print('Abrindo diretório e criando pasta...')
for key in coordenadas.keys():
x, y = coordenadas[key]
if 'single' in key:
single_click(x, y)
elif 'double' in key:
double_click(x, y)
elif 'right' in key:
right_click(x, y)
pastas_atualizadas = contar_pastas_no_diretorio(diretorio)
if pastas_atualizadas > pastas_existentes:
logging.info('Pasta criada no diretório "assets".')
print('Pasta criada com sucesso!')
else:
logging.error('A nova pasta não foi criada no diretório "assets".')
print('Não foi possível criar nova pasta.')
except Exception as exception:
logging.error(
'Ocorreu um erro enquanto a nova pasta estava sendo criada')
if __name__ == '__main__':
criar_pasta()
Nesse exemplo, foram criadas funções para click simples, duplo e click com o botão direito no mouse.
A função get_coordinates()
, monta um dicionário com as coordenadas
e chaves passadas no arquivo coordenadas.txt
, que contém
as coordenadas de clicks do mouse extraídas utilizando o
módulo mouseInfo
. As chaves facilitam a inserção das coordenadas
por serem descritivas de acordo com a localização de cada click.
Arquivo coordenadas.txt
:
1100,1049,dir_abrir_explorer_single
337,603,dir_home_single
1279,424,dir_workspace_double
570,806,dir_project_double
569,433,dir_assets_double
980,568,mouse_diretorio_right
1150,458,mouse_new_single
1335,458,mouse_folder_single
980,568,mouse_diretorio_single
Após a criação do dicionário de coordenadas, de acordo com o tipo de click,
x
e y
recebe a coordenada do click e são passados como argumentos para
as funções de click.
Após dicionário criado, a função criar_pasta()
itera as chaves e para
cada chave, é inserito os valores de x
e y
, depois, é verificado o
click do mouse descrito na chave, se é single click, double click ou click
com o botão direito.
O código ainda prevê tratamento de erro try/except
e geração de log de
execução usando logging
, com execução do script sobre dunder name
,
statement usado para barrar a execução do script quando importado como um
módulo por outro script.
Antes da execução do script:
PS C:\Users\elias\Workspace\python-automation> ls .\assets\
PS C:\Users\elias\Workspace\python-automation>
Após a execução do script:
PS C:\Users\elias\Workspace\python-automation> ls .\assets\
Directory: C:\Users\elias\Workspace\python-automation\assets
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/26/2023 7:03 PM New folder
PS C:\Users\elias\Workspace\python-automation>
- Criando pasta:
PS C:\Users\elias\Workspace\python-automation> python .\pyautogui_criar_pasta.py
Abrindo diretório e criando pasta...
Pasta criada com sucesso!
PS C:\Users\elias\Workspace\python-automation>
- Simulando erro:
PS C:\Users\elias\Workspace\python-automation> python .\pyautogui_criar_pasta.py
Abrindo diretório e criando pasta...
Não foi possível criar nova pasta.
PS C:\Users\elias\Workspace\python-automation>
- Log:
INFO - Pasta criada no diretório "assets". - 2023-12-26 19:00:45,898
ERROR - A nova pasta não foi criada no diretório "assets". - 2023-12-26 19:03:06,262
Esse exercício é a refatoração do código estrutural, com a adição de:
- funções para as repetições dos comandos
pyautogui
- criação de dicionario para facilitar o uso de coordenadas e o uso de chaves descritivas para cada click
- função
criar_pasta()
dunder statement
para utilização como módulo sem execução direta no momento doimport
- adicionado
try/except
para tratamento de erros - adicionado
logging
com informação de criação de pasta e erro na execução do script