El objetivo que tienen los RPA es la de automatizar tareas repetitivas que se realizan de forma manual. Al ser realizadas por un proceso automático, podemos liberar de esta tarea a nuestros usuarios y además minimizamos la posibilidad de que se produzcan errores por los fallos que pueden cometer los usuarios cuando lo hacen manualmente. Hace tiempo vi un documental en el que mostraban cómo funcionaba una granja de likes: se trataba de una serie de empleados con miles de teléfonos móviles y ellos se encargaban de ir pulsando like en alguna publicación en cada uno de estos terminales. De esta forma, subían la popularidad de la publicación o de la persona que hubiese contratado este servicio.
Con estas dos premisas, se me ocurrió la idea de probar las capacidades de Power Automate for Desktop (PAD) con un proceso automático que se conectase frecuentemente a una determinada página para incrementar su número de visitantes. Para que las visitas fuesen únicas, además quería hacer la visita cada vez desde una IP diferente y así surge la idea de escribir este artículo.
Disclaimer: El artículo sólo tiene el propósito de probar las capacidades de Power Automate for Desktop. No tiene la intención de proveer de una herramienta que permita incrementar las visitas de ninguna página web ("For Testing Purposes Only")
Para esta prueba utilizaremos las siguientes tecnologías:
Power Automate Desktop: para automatizar las tareas.
Power Automate: para ejecutar el flujo PAD de forma periódica.
Azure: para albergar la infraestructura.
Una página web propia que queramos monitorizar. En mi caso, un post de un blog de Blogger.
Google Analytics para el análisis en detalle de las visitas de la página. Para ello, tuve que añadir un pequeño script en la página web.
El flujo sería el siguiente:
Un proceso abre la página web que queramos monitorizar en incógnito
Una vez abierta, realiza alguna interacción con la misma y cierra la página
Se renueva la IP
Esperamos un tiempo para que apliquen los cambios
Volvemos a empezar
Seguro que hay formas de hacerlo de una manera más eficiente, pero para esta prueba, lo he realizado de la siguiente forma:
PREPARACIÓN DE LA INFRAESTRUCTURA EN AZURE (Parte I)
La primera parte de la preparación consiste en la creación de una máquina virtual en Azure donde instalaremos el cliente de Power Automate Desktop. Para ello, en una suscripción de Azure crearemos un nuevo grupo de recursos con una máquina virtual Windows. Dado que esto es para una prueba, escogí una VM económica que cumpla con los requisitos para la instalación de Power Automate for Desktop: https://docs.microsoft.com/en-us/power-automate/desktop-flows/setup
Como podéis ver, la ubicación de la VM es West Europe. Por eso, luego veréis que en Google Analytics aparece Países Bajos como lugar del acceso a la página web. Para poder acceder por Escritorio Remoto, le habilité los puertos RDP (33889) y le agregué una IP pública dinámica para que se cambie la dirección cada vez que desasociamos la red a la VM.
Como último paso, tenemos que verificar que las sesiones de Azure no tienen establecido un timeout que haga que se cierren tras determinado tiempo de inactividad. Esto lo necesitamos para dejar abierta la sesión de Azure con el usuario administrador ya que, si se cerrase, nos pediría la autenticación multifactor (MFA).
PREPARACIÓN DEL POWER AUTOMATE FOR DESKTOP
Ahora, vamos a acceder mediante escritorio remoto (RDP) a nuestra máquina virtual. Una vez dentro, vamos a instalar el cliente de Power Automate for Desktop (lo podéis encontrar en la parte de descargas de la página principal de Power Automate.)
Una vez descargado, procedemos a su instalación en la máquina virtual:
Cuando esté instalado, lo ejecutamos e iniciamos sesión con un usuario de nuestro tenant de pruebas. Dado que vamos a utilizar componentes premium (un gateway local), desde esta misma página vamos a pulsar en el botón "Go premium". Dado que este artículo sólo es una prueba, seleccionamos la opción "Start trial".
Y veremos el mensaje indicando que se ha activado la versión de prueba.
Si accedéis al navegador predeterminado (en mi caso Edge), veremos que se nos ha instalado también la extensión de "Microsoft Power Automate" que deberemos activar ('Turn on extension')
CREACIÓN DEL GATEWAY LOCAL.
Ahora es el momento de crear un gateway local en nuestra VM para que posteriormente podamos acceder desde un flujo en la nube de Power Automate. Para instalar el Gateway, deberéis acceder a https://docs.microsoft.com/en-us/data-integration/gateway/service-gateway-install desde la máquina virtual y descargar el Gateway Installer (GatewayInstall.exe). Una vez descargado, ejecutadlo para instalarlo en la VM.
Tras la instalación, accedemos con el usuario de nuestro tenant con el que vamos a realizar la configuración del flujo de Power Automate.
Y seleccionamos la opción "Register a new gateway on this computer" para que quede asociado a nuestra VM.
Ahora, nos pedirá establecer un nombre para nuestro gateway y una clave de recuperación:
Una vez creado, recibiremos el mensaje de que nuestro gateway está correctamente instalado en el equipo:
Ahora, si desde un navegador accedemos a la página principal de Power Automate y seleccionamos la opción "Gateways" que hay en la zona "Data" del menú izquierdo, podemos ver que nuestro gateway aparece en el listado.
PREPARACIÓN DE LA INFRAESTRUCTURA EN AZURE (Parte II)
Ahora ya estaríamos en condiciones de crear el flujo de Power Automate for Desktop. Dicho flujo se encargará de realizar tres tareas:
Desasociar la interfaz de red de la Máquina Virtual. Esto liberará la dirección IP que tenga asociada hasta ese momento.
Asociar de nuevo la interfaz de red para asignar una nueva dirección IP.
Abrir una ventana de incógnito del navegador y acceder a nuestra página web de Blogger.
Las dos primeras acciones se realizan desde la zona de Información general de la Dirección IP pública en el portal de Azure. Os pongo aquí los pantallazos ya que se referenciarán posteriormente dentro del flujo de Power Automate for Desktop:
A. Desasociar la interfaz de red:
B. Asociar la interfaz de red:
Dado que lo que vamos a desasociar y asociar la IP pública de la VM, perderemos el acceso mediante escritorio remoto a la misma, por lo que se nos complicará la posibilidad de crear todos los pasos de Power Automate for Desktop. Por esta razón, vamos a utilizar otro de los servicios que nos ofrece Azure y que se llama "Azure Bastión". Así pues, la segunda parte de la configuración de la infraestructura de Azure, será configurar este servicio de conexión.
AZURE BASTION
Azure Bastión nos permite acceder a nuestra VM como si lo hiciésemos por RDP, pero desde el propio portal de Azure, es decir, sin tener que exponer una IP pública. Esto nos va a permitir acceder a nuestra infraestructura de la máquina virtual y desasociar y asociar la IP pública sin perder el acceso a la VM. Para acceder a Azure Bastión, accedemos al recurso de la máquina virtual y desde la sección "Conectar" nos situamos en la pestaña "Bastión".
Como veis en la imagen, desde esta misma pestaña tenemos acceso a más información sobre este servicio de Azure. Pulsaremos en el botón "Usar un bastión" y aparecerá la siguiente ventana:
Seleccionaremos "Crear una instancia de Azure Bastión"
Tras un rato de espera (5-6 minutos), nos solicitará un usuario y contraseña para el acceso a nuestra VM.
Tras introducir el usuario y contraseña del administrador de la VM, pulsamos el botón "Conectar" y así accederemos a ella en una nueva pestaña del navegador, por lo que ya podremos hacer desde allí el flujo de Power Automate for Desktop sin riesgo de perder la conexión cuando desasociemos la IP pública. Lo único que tenéis que tener cuidado es de no refrescar esta página en lugar de la que hay dentro de ella cuando queráis hacer un refresh (a mí me ha pasado varias veces).
Por tanto, ahora ya sí que podemos pasar a la fase de construcción del flujo de Power Automate for Desktop desde nuestra máquina virtual.
FLUJO DE POWER AUTOMATE FOR DESKTOP
[NOTA]: No me considero un experto en Power Automate for Desktop, así que es probable que alguno de los pasos se pueda hacer de alguna otra forma que sea más eficiente.
Para crear el flujo que desasocie una IP, asocie una nueva y acceda a nuestra página web, seguiremos los siguientes pasos:
Accedemos al portal de Azure en el navegador predeterminado (en mi caso Microsoft Edge) con el usuario administrador y nos situamos en la zona de Información general de la Dirección IP pública que vamos a desasociar para que haya una sesión abierta del portal de Azure*.* Ahora copiamos en un Notepad la URL de esta página ya que la necesitaremos más adelante.
Abrimos la aplicación de Power Automate for Desktop y pulsamos en
"Nuevo flujo" y le damos un nombre.
La primera operación será establecer una variable con la URL de la página de configuración de la IP (la del punto 1). Para ello escogemos la acción "Set variable" que haz en el bloque de 'Variables' y pegamos la URL que guardamos en el primer punto estableciendo un nombre de variable (en mi caso 'AzureIPwebPage').
Fijaos que la instancia del navegador queda almacenada en la variable 'Browser'. Esta variable será la que utilicemos en todas las acciones relacionadas con esta página de Azure.
Con este paso, ya tendremos abierta una nueva sesión del explorador Edge con nuestra página de configuración de la IP.
En esta acción, desplegaremos el 'UI element' para seleccionar el botón "Add UI element". Esto iniciará un asistente que nos permitirá seleccionar el div de "Dissociate" de la página y agregarlo pulsando Ctrl + botón izquierdo del ratón.
Una vez seleccionado, la acción quedará configurada de la siguiente forma:
Que en nuestro flujo se mostrará de la siguiente forma:
[IMPORTANTE]: El asistente de selección de elementos se basa en clases css y en identificadores de la misma forma que se hace con jQuery. Lo que ocurre es que a veces los identificadores de los elementos en las páginas de Azure son dinámicos y no siempre se generan con el mismo ID. Esto puede hacer que no se seleccionen correctamente los elementos en las ejecuciones posteriores. Por eso, os recomiendo que verifiquéis la configuración de la selección de elementos desde la opción View -> UI elements del menú superior del PAD:
Así en la parte derecha podréis ver los elementos seleccionados en el
flujo y al acceder a ellos, podéis ver cómo está configurada la
selección de ese elemento.
Por ejemplo, en el caso del div seleccionado en el paso anterior, su
configuración es la siguiente:
En la parte inferior de la configuración, podéis ver que está seleccionado el div cuyo ID sea '_weave_e_322'. Os recomiendo refrescar la página varias veces y comprobar si la selección vuelve a funcionar. Para ello, podéis usar jQuery en la consola de la web del navegador de la siguiente forma: $('div[Id="_weave_e_322"]')
Si la selección no es correcta, podéis usar jQuery para afinar la selección hasta que la selección siempre sea acertada. De hecho, podéis utilizar el botón "Text editor" que hay en la parte superior derecha para introducir la selección de la forma que queráis.
[NOTA]: Aunque hemos desasociado la IP pública de la máquina virtual, veréis que, al estar accediendo con Azure Bastión, seguimos conectados a la VM sin problemas, por lo que podemos continuar con el proceso del flujo.
Una vez pulsado el botón, se abrirá un panel lateral para establecer el recurso al que queremos asociar la IP pública. En nuestro caso deberemos seleccionar "Interfaz de red" y marcar la que creamos en nuestra VM.
Una vez seleccionado el atributo text, pulsamos Finish en el asistente y tendremos nuestra acción configurada y lista para almacenar la nueva IP en la variable que hayamos establecido en la acción. En este caso, en la variable 'currentPublicIP'.
[NOTA]: Para que Power Automate for Desktop pueda
interactuar con una página de incógnito, tenéis que configurar la
extensión de "Microsoft Power Automate" del navegador correspondiente
para permitirle que se ejecute también cuando está en InPrivate.
En el caso de la extensión de Edge, se configura así:
Y con esto hemos concluido el flujo de escritorio de Power Automate, por lo que sólo nos queda el paso final: hacer que el flujo se ejecute periódicamente. Para ello, vamos a utilizar un flujo periódico de Power Automate en la nube. Antes de ello, tenemos que cerrar la sesión del usuario de nuestra máquina virtual para liberar el acceso a ella desde el flujo de nube. Es decir, necesitamos hacer un Sign out del usuario en la VM:
CREACIÓN DEL FLUJO DE POWER AUTOMATE (cloud flow)
Vamos a crear un flujo de nube de Power Automate que se encargue de ejecutar el anterior flujo de Power Automate for Desktop cada hora. Va a ser un flujo muy básico en el que no voy a hacer tratamiento de errores ya que no es el objetivo de este artículo. Así pues, desde el portal de Power Automate en la nube, agregaremos un nuevo flujo de tipo periódico (Scheduled) y le configuraremos el trigger para que se ejecute cada hora.
Imagen 38.- Creación del Flujo de Power Automate que lance el de Power Automate Desktop.
Una vez configurado el trigger, agregaremos la acción "Run a Flow built with Power Automate for desktop".
[NOTA]: Fijaos que esta acción es PREMIUM. Como activamos las características premium en versión trial al principio del proceso, podemos utilizarlo sin problemas durante el periodo que dura el Trial.
Después de configurar la autenticación en la máquina virtual con las credenciales correspondientes para crear la conexión, os pedirá seleccionar el flujo a ejecutar y si lo queremos en modo Atendido o Desatendido. En nuestro caso, como queremos mantener la sesión que está ahora mismo activa en la máquina virtual ya que allí está abierta la sesión de Azure con el administrador logado, elegiremos la opción 'Unattended'
Lo ejecutamos para probarlo:
Una vez verificado su correcto funcionamiento, sólo nos queda esperar a ver cómo se ejecuta de forma periódica y comprobar cómo se incrementan las visitas de nuestra página. Si por casualidad, alguna vez el flujo tiene un error, podréis comprobar en este flujo de Power Automate su causa. Por ejemplo, en mi caso tuve un problema a la hora de pulsar un botón del flujo al no encontrar su identificador (ya os comenté que, a veces, los identificadores de los elementos en el portal de Azure no son exactamente los mismos) y me ofreció el siguiente mensaje:
Para solventarlo, modifiqué la selección del elemento para que no se basase en el ID del div.
COMPROBACIÓN DE LOS RESULTADOS
Después de dejar el flujo que se ejecute durante varios días de forma autónoma, es el momento de ver los resultados. En mi caso, la monitorización de la página la visualizaré con Google Analytics. En la siguiente imagen podéis ver los resultados de las visitas de la página de prueba en los últimos 7 días:
Como podéis ver, las visitas se han incrementado considerablemente en este periodo y además con el evento "first_visit". La razón de que haya un pequeño descenso en un par de días es porque el flujo falló a la hora de pulsar uno de los botones como comenté en el apartado anterior. Estas son las estadísticas si el flujo se lanza una vez por hora, pero, dado que la duración del mismo es de 4-5 minutos, podríamos hacer que se ejecutase cada 10 minutos, de forma que tuviésemos 144 visitas únicas diarias.
Si os fijáis en el gráfico, además podéis comprobar cómo el país desde el que proceden las visitas en "Netherlands". Esto es porque alojamos la máquina virtual en "West Europe" y los servidores físicos que la soportan están en Amsterdam.
Finalmente, si accedemos al fichero txt donde íbamos registrando las diferentes IPs, podemos ver cómo han ido variando a lo largo del tiempo que ha estado el flujo en funcionamiento.
Con esto finalizo este artículo. Como os comentaba al principio, la idea del mismo no es que se utilice Power Automate for Desktop para falsear los datos de las visitas de una determinada página web. El único objetivo es mostrar cómo este servicio de Microsoft puede ayudarnos a automatizar tareas que son manuales e incrementar así la productividad de los usuarios. Además, ha servido para conocer un poco el funcionamiento de un par de servicios de Azure como es la creación de máquinas virtuales con IP pública y la conexión a ellas con Azure Bastión.
Estoy seguro de que hay maneras más eficientes de hacer todo este proceso, por ejemplo, utilizando scripts de PowerShell, pero quería realizar todo el proceso como si lo ejecutase un usuario de forma manual.
Espero que os haya resultado interesante y podáis aplicarlo en alguna de vuestros desarrollos.
Enrique Sánchez Moreno
Cloud Services Manager en ILUNION IT Services
www.esanchezm.com