creación de scheduler.json para ejecución de servicio

This commit is contained in:
George committed 2026-08-04 09:34:44 -05:00
1 parent 839aad698d
commit 1c39f6f45f
11 files changed
+112 -400

No files matched your search

+13 -11
View File
@@ -5,6 +5,7 @@ from pathlib import Path
from dotenv import load_dotenv
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeout
# ============================================================================
load_dotenv()
SOL_URL = "https://www.sunat.gob.pe/sol.html"
@@ -17,13 +18,13 @@ RUC = os.getenv("SUNAT_RUC", "").strip()
USER = os.getenv("SUNAT_USER", "").strip()
PASSWORD = os.getenv("SUNAT_PASSWORD", "").strip()
# ============================================================================
def save_screenshot(page, name):
path = SCREENSHOT_DIR / f"{name}.png"
page.screenshot(path=str(path))
print(f" 📸 Screenshot guardado: {path}")
# ============================================================================
def get_token(headless=False, timeout=60000):
print("🚀 Iniciando navegador...")
with sync_playwright() as p:
@@ -109,7 +110,7 @@ def get_token(headless=False, timeout=60000):
browser.close()
return None
# ============================================================================
def fill_login_form(page):
page.wait_for_timeout(1000)
@@ -143,7 +144,7 @@ def fill_login_form(page):
else:
print(" ✅ Captcha no detectado")
# ============================================================================
def get_token_from_direct_access(context, login_page):
print(" Buscando enlace con token en el menú SOL...")
token = extract_token_from_menu(login_page)
@@ -154,7 +155,7 @@ def get_token_from_direct_access(context, login_page):
print(" Navegando árbol de menú SOL...")
return navigate_sol_menu(login_page)
# ============================================================================
def navigate_sol_menu(page):
page.wait_for_timeout(2000)
@@ -227,7 +228,7 @@ def navigate_sol_menu(page):
return None
# ============================================================================
def click_menu_item_by_id(page, element_id, expected_text):
print(f" Buscando elemento: #{element_id} ('{expected_text}')...")
@@ -271,7 +272,7 @@ def click_menu_item_by_id(page, element_id, expected_text):
print(f" ❌ No se pudo encontrar: {expected_text}")
return None
# ============================================================================
def check_for_token(page):
urls = [page.url] + [f.url for f in page.frames]
for url in urls:
@@ -348,7 +349,7 @@ def check_for_token(page):
return None
# ============================================================================
def extract_token_from_menu(page):
print(" Analizando estructura del menú SOL...")
@@ -399,7 +400,7 @@ def extract_token_from_menu(page):
return None
# ============================================================================
def extract_token_from_url(url):
if "token=" in url:
token = url.split("token=")[-1]
@@ -409,7 +410,7 @@ def extract_token_from_url(url):
return token
return None
# ============================================================================
def save_token(token):
try:
payload_b64 = token.split(".")[1]
@@ -434,7 +435,7 @@ def save_token(token):
print(f" 💾 Token guardado en: {TOKEN_FILE}")
print(f" ⏰ Expira: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data['expires_at']))}")
# ============================================================================
if __name__ == "__main__":
print("=" * 60)
print("🔐 OBTENCIÓN DE TOKEN SUNAT")
@@ -447,3 +448,4 @@ if __name__ == "__main__":
else:
print(f"\n❌ No se pudo obtener el token.")
print(" Revisa las capturas en la carpeta screenshots/")
# ============================================================================