Skip to main content

Librería para automatización de tareas en RPA dentro de Grupo Los Grobo

Project description

glgrpa

glgrpa es una librería diseñada para automatizar tareas relacionadas con RPA (Robotic Process Automation) dentro del entorno del Grupo Los Grobo. Esta librería proporciona herramientas para interactuar con navegadores web, manejar archivos Excel, gestionar descargas y realizar operaciones específicas en aplicaciones como ARCA.

Instalación

Puedes instalar la librería directamente desde PyPI (cuando esté publicada) utilizando pip:

pip install glgrpa

Características

  • Automatización de Navegadores : Basado en Selenium, permite interactuar con elementos web, realizar clics, ingresar texto, manejar ventanas y más.
  • Gestión de Descargas : Facilita la organización y limpieza de carpetas de descargas personalizadas.
  • Manejo de Archivos Excel : Permite leer archivos Excel y convertirlos en DataFrames de pandas.
  • Interacción con ARCA : Automatiza tareas específicas en la plataforma ARCA, como el inicio de sesión, selección de relaciones y descarga de cartas de porte electrónicas.
  • Terminal y Logs : Incluye herramientas para mostrar mensajes en la consola con colores y formatos para facilitar el seguimiento de la ejecución.

Estructura del Proyecto

La librería está organizada en los siguientes módulos:

  • src/Terminal : Proporciona herramientas para mostrar mensajes en la consola y gestionar tiempos de espera.
  • src/Chrome : Contiene funcionalidades para interactuar con el navegador Chrome utilizando Selenium.
  • src/Windows : Maneja operaciones relacionadas con el sistema de archivos en Windows, como mover archivos y crear estructuras de carpetas.
  • src/Excel : Facilita la lectura de archivos Excel.
  • src/ARCA : Incluye clases específicas para interactuar con la plataforma ARCA.

Uso

Ejemplo de Uso Básico

from glgrpa.src.ARCA.Cartas_de_porte_electronicas.AplicativoCartasDePorteElectronicas import AplicativoCartaDePorteElectronica

# Inicializar la clase
app = AplicativoCartaDePorteElectronica(dev=True)

# Abrir navegador y navegar a ARCA
app.abrir_navegador()
app.navegar_inicio()

# Ingresar credenciales
app.ingresar_credenciales()

# Cambiar relación
app.cambiar_relacion("Nombre de la relación")

# Descargar cartas de porte
cpe_list = app.obtener_listado_cpe()
for cpe in cpe_list:
    app.descargar_carta_de_porte(cpe)

Leer un Archivo Excel

from glgrpa.src.Excel.Excel import Excel

# Leer un archivo Excel
excel = Excel("ruta_del_archivo.xlsx")
dataframe = excel.leer_excel("NombreHoja")
print(dataframe)

Resolución de Rutas para Tareas Programadas

Al ejecutar aplicaciones empaquetadas (.exe) desde tareas programadas de Windows, es común que ocurra un problema de duplicación de rutas donde el directorio de trabajo actual no es el mismo que el directorio del ejecutable.

Problema Común

❌ Error: No se encontró el archivo de variables de entorno:
C:\Trabajadores Virtuales\GLGRPA - CONTABILIDAD - RODOLFO\ap1_TipoCambioSAP\ap1_TipoCambioSAP\.env.production

Solución

La librería glgrpa incluye métodos utilitarios para resolver este problema:

import os
from glgrpa import ControlEjecucion
from dotenv import load_dotenv

# ✅ Forma correcta de cargar variables de entorno
ruta_env = ControlEjecucion.resolver_ruta_variables_entorno('.env.production')

if os.path.exists(ruta_env):
    load_dotenv(ruta_env)
    print(f"✅ Variables cargadas desde: {ruta_env}")
else:
    print(f"❌ No se encontró archivo: {ruta_env}")

# ✅ Para otros tipos de archivos de configuración
from glgrpa.Windows import Windows

ruta_config = Windows.resolver_ruta_archivo('config.ini')
ruta_datos = Windows.resolver_ruta_archivo('datos.json')

Uso con ControlEjecucion

from glgrpa import ControlEjecucion
import os
from dotenv import load_dotenv

@ControlEjecucion.decorador_ejecucion_controlada(
    intentos_maximos=3,
    permitir_multiples_ejecuciones_diarias=False,
    email_destinatarios=['admin@empresa.com'],
    smtp_server='smtp.outlook.com',
    smtp_port=587,
    smtp_username='robot@empresa.com',
    smtp_password='password'
)
def mi_proceso_rpa():
    # Cargar variables de entorno correctamente
    ruta_env = ControlEjecucion.resolver_ruta_variables_entorno()
    if os.path.exists(ruta_env):
        load_dotenv(ruta_env)

    # Tu lógica de automatización aquí
    pass

if __name__ == "__main__":
    mi_proceso_rpa()

Configuración de Tareas Programadas

Para evitar problemas con tareas programadas, asegúrate de configurar:

  1. Directorio de inicio: Configura que la tarea programada inicie en el directorio donde está el .exe
  2. Permisos: Ejecutar con privilegios de usuario apropiados
  3. Sesión interactiva: Para procesos RPA que requieren GUI, asegurar sesión de escritorio activa

Automatización SAP Robusta

La librería incluye funcionalidades avanzadas para automatización SAP que se adaptan automáticamente a diferentes entornos de ejecución:

Métodos Adaptativos para VMs

Las transacciones SAP (como OB08) implementan métodos adaptativos que funcionan tanto en entornos con GUI activo como en VMs sin sesión interactiva:

from glgrpa.transacciones.OB08 import OB08

# Inicializar transacción
ob08 = OB08(base_url="...", usuario="...", clave="...", dev=True)

# Los métodos se adaptan automáticamente al entorno:
# - GUI activo: usa teclas de acceso rápido (Ctrl+S, Shift+F3, Escape)
# - GUI no activo: usa click directo Selenium (para VMs/tareas programadas)
ob08.guardar()                    # Ctrl+S preferido, 3 fallbacks Selenium
ob08.finalizar()                  # Shift+F3 preferido, 3 fallbacks Selenium
ob08.omitir()                     # Shift+F8 preferido, 3 fallbacks Selenium
ob08.cancelar_entradas_nuevas()   # Escape preferido, 3 fallbacks Selenium
ob08.cancelar_menu_inicial()      # Escape preferido, 3 fallbacks Selenium

Detección y Manejo de Diálogos Modales

Novedad en v0.0.97: Sistema automático de detección e interacción con diálogos modales SAP:

# Detectar automáticamente diálogos presentes
dialogo_info = ob08.detectar_dialogo_modal()

if dialogo_info['presente']:
    print(f"🔔 Diálogo detectado: {dialogo_info['tipo']}")
    print(f"Pregunta: {dialogo_info['texto_pregunta']}")
    print(f"Botones: {dialogo_info['botones']}")

    # Responder automáticamente
    if dialogo_info['tipo'] == 'cancelar_actualizacion':
        ob08.interactuar_dialogo_modal('si')  # Confirmar cancelación

    elif dialogo_info['tipo'] == 'fin_actualizacion':
        ob08.interactuar_dialogo_modal('si')     # Guardar cambios
        # ob08.interactuar_dialogo_modal('no')   # Descartar cambios
        # ob08.interactuar_dialogo_modal('cancelar')  # Cancelar diálogo

# Diálogos soportados:
# - "Cancelar actualización": ¿Realmente desea cancelar? (Sí/No)
# - "Fin actualización": ¿Grabar primero modificaciones? (Sí/No/Cancelar)

Botones SAP Completos (v0.0.97)

Cobertura completa de botones críticos en transacciones SAP:

Botón Método Tecla Preferida Fallbacks Selenium
Guardar guardar() Ctrl+S ID, accesskey, texto
Finalizar finalizar() Shift+F3 ID, accesskey, texto
Omitir omitir() Shift+F8 ID, accesskey, texto
Cancelar (Entradas) cancelar_entradas_nuevas() Escape ID, accesskey, texto
Cancelar (Inicial) cancelar_menu_inicial() Escape ID, accesskey, texto

Estrategias Múltiples de Interacción

Cada operación crítica implementa múltiples estrategias de fallback:

  1. Método preferido: Teclas de acceso rápido (Ctrl+S, F5, etc.)
  2. Fallback 1: Click directo en elementos HTML por ID
  3. Fallback 2: Búsqueda por accesskey o atributos específicos
  4. Fallback 3: Búsqueda por texto o título del elemento
# Ejemplo: Flujo completo con manejo automático
try:
    # Procesar datos
    ob08.ingresar_tipo_de_cambio(df_divisas)

    # Manejar diálogos automáticamente si aparecen
    dialogo_info = ob08.detectar_dialogo_modal()
    if dialogo_info['presente']:
        ob08.interactuar_dialogo_modal('si')  # Guardar cambios

    # Finalizar exitosamente
    ob08.finalizar()

except Exception as e:
    print(f"❌ Error en proceso: {e}")

    # Limpieza automática con detección de contexto
    try:
        # Manejar diálogos primero
        dialogo_info = ob08.detectar_dialogo_modal()
        if dialogo_info['presente']:
            ob08.interactuar_dialogo_modal('no')  # Rechazar cambios

        # Cancelar según contexto actual
        if "Entradas nuevas" in ob08.driver.title:
            ob08.cancelar_entradas_nuevas()
        else:
            ob08.cancelar_menu_inicial()

    except Exception as cleanup_error:
        print(f"⚠️ Error en limpieza: {cleanup_error}")

Debugging Avanzado

  • Screenshots automáticos en caso de fallo con nombres descriptivos
  • Logging detallado con emojis para fácil identificación
  • Información contextual de elementos DOM encontrados/no encontrados
  • Estrategias de reintento documentadas en logs
  • Detección automática de diálogos modales con información completa

Requisitos

Los requisitos de la librería están especificados en el archivo requirements.txt:

  • selenium
  • pandas
  • colorama
  • openpyxl
  • office365-rest-python-client

Autor

Gabriel Bellome < gabriel.bellome@losgrobo.com >

Licencia

Este proyecto está bajo una licencia privada y es propiedad del Grupo Los Grobo.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

glgrpa-0.0.101.tar.gz (68.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

glgrpa-0.0.101-py3-none-any.whl (71.1 kB view details)

Uploaded Python 3

File details

Details for the file glgrpa-0.0.101.tar.gz.

File metadata

  • Download URL: glgrpa-0.0.101.tar.gz
  • Upload date:
  • Size: 68.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.6

File hashes

Hashes for glgrpa-0.0.101.tar.gz
Algorithm Hash digest
SHA256 0c7bc099a116a4a0b63dc17370e04c724a1672efe2bf60526bf32eaf61ffa833
MD5 d6f8726ebb1ca186fb937d6ab5b8e112
BLAKE2b-256 972c42d5b2f2443d37b4fc3e4abad96f50646528bd26f80bff746fb5c077e4af

See more details on using hashes here.

File details

Details for the file glgrpa-0.0.101-py3-none-any.whl.

File metadata

  • Download URL: glgrpa-0.0.101-py3-none-any.whl
  • Upload date:
  • Size: 71.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.6

File hashes

Hashes for glgrpa-0.0.101-py3-none-any.whl
Algorithm Hash digest
SHA256 cf57b7b840f88981c1874a66c0fcf296d66dc662e9c53b792e4d6bc5d109278e
MD5 3eff26b8a444983d5efebd2f48256b9c
BLAKE2b-256 86bcd48f7b66e38636d4a9837ed2d306fbbc9fa552c69f07f52e02dc97d06e03

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page