Administrando una interfaz web de principio a fin
El núcleo del navegador que se mantuvo aún realiza trabajo real, con múltiples pasos y autenticación; esta capacidad es la que Dinoer copió deliberadamente, no por accidente.
No se trata del caso principal de este proyecto: eso es un corpus de investigación bloqueado, no un panel de administración. Pero esa capacidad no desapareció cuando se eliminó la capa de percepción: rpa.py sigue impulsando una interfaz autenticada de la misma manera que lo haría una persona, a través de varios pasos, detrás de un inicio de sesión. Es útil cuando una campaña de investigación necesita autenticarse para leer una fuente restringida; es valioso por sí solo cuando la tarea es genuinamente de configuración, no de investigación.
Detrás de un desafío básico a nivel de red
Un objetivo que se encuentra detrás de la propia capa HTTP Basic de un servidor proxy inverso, sobre su proceso de inicio de sesión de la aplicación:
{"http_credentials": true, "url": "https://target.local/admin", "actions": [...]}
El escenario aún no revela ningún secreto; http_credentials le indica a Dinoer que lo resuelva desde el directorio encriptado, restringido a ese origen, utilizando el mismo mecanismo que utiliza un campo de formulario.
¿Qué hace que esta solución funcione?
Una llamada para cualquier cosa que requiera estado. Iniciar sesión, realizar una acción, confirmar: todo en una sola invocación. Dividirlo en varias llamadas hace que el estado del DOM se pierda silenciosamente: una sesión guardada solo incluye cookies y localStorage, nunca lo que estaba visible en la pantalla.
Una afirmación al principio. Si la página no es la esperada, deténgase antes de escribir algo en ningún lugar:
{"type": "evaluer", "script": "document.title", "contient": "Sign in"}
Un directorio encriptado para cada credencial.
{"type": "remplir", "selecteur": "input[name=\"username\"]",
"valeur": "depuis_secrets", "secret_cle": "username"},
{"type": "remplir", "selecteur": "input[name=\"password\"]",
"valeur": "depuis_secrets", "secret_cle": "password"},
{"type": "cliquer", "selecteur": "button[type=\"submit\"]"},
{"type": "attendre_selecteur_present", "selecteur": ".user-menu"}
El escenario permanece válido porque nombra claves, nunca valores.
Señales leídas, no solo el veredicto. Después de cada paso: dónde estoy realmente (boussole.url_courante), qué dijo el servidor (boussole.dernier_code_http), si la sesión se mantuvo (session_derive).
Dónde se detiene
Las operaciones que duran minutos no funcionan bien; el núcleo retenido devuelve una respuesta final, no un flujo de datos, y un tiempo de espera no significa un fallo: el servidor sigue funcionando después de que el cliente deja de esperar. Las modificaciones masivas en muchos objetivos independientes se gestionan mejor con campagne.py, o mediante una API si existe para ese objetivo. Y nada aquí puede deshacerse: ejecuta la lista que escribiste, a velocidad de máquina.