creación de scheduler.json para ejecución de servicio
This commit is contained in:
1 parent
839aad698d
commit
1c39f6f45f
11 files changed
+112
-400
No files matched your search
+13
-11
@@ -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/")
|
||||
# ============================================================================
|
||||
Reference in new issue
Block a user