Ya se ha publicado un nuevo número de la revista digital 𝑪𝒐𝒎𝒑𝒂𝒓𝒕𝒊𝑴𝑶𝑺𝑺 en la que he vuelto a tener el inmenso placer de colaborar.
En esta ocasión, he escrito un artículo con un caso de uso de Power Automate for Desktop. Se trata de que el flujo se encargue de acceder de forma periódica a una determinada página web, pero utilizando cada vez una IP diferente. De esta forma, se incrementarán las visitas de la página como si se estuviesen conectando usuarios distintos (visitas únicas).
Para esta prueba de concepto, he utilizado flujos de Power Automate (tanto en la versión desktop, como de cloud), una máquina virtual en Azure y el servicio de Azure Bastion.
Os dejo el enlace a mi artículo, pero no dejéis de leer el resto de contenidos de la revista. ¡Hay mucho conocimiento allí recogido! 💡
https://www.compartimoss.com/revistas/numero-53/incrementar-las-visitas-de-una-pagina-con-pad
Por si acaso se estropea el enlace anterior, os dejo aquí el artículo completo:
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 este test, 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:
- Desasociar la interfaz de red:

- 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’).

- Ahora vamos a hacer el mismo proceso para establecer una variable con la página web que vamos a monitorizar. En mi caso, es una página que he creado en mi Blogger y que le he agregado los tags de Google Analytics para monitorizarla. Lo almacenamos en la variable ‘myWebPage’.

- El siguiente paso, será abrir el navegador con la URL de la configuración de la IP pública en Azure. Para ello, escogemos la acción “Launch new Microsoft Edge” que hay dentro del bloque de ‘Browser Automation’ y establecemos que la URL es la variable correspondiente.

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.
- Como la página tarda un poco en cargar, vamos a establecer un pequeño retardo en el flujo para estar seguros que todos los componentes se muestran correctamente. Para ello, agregamos la acción “Wait” que hay en el bloque ‘Flow control’ e indicamos una espera de 5 segundos.

Con este paso, ya tendremos abierta una nueva sesión del explorador Edge con nuestra página de configuración de la IP.
- Es el turno ahora de Desasociar la IP que tenga actualmente la máquina virtual. Para ello, tendremos que pulsar el botón “Desasociar” que han en la página de Azure que hemos abierto. Esto se consigue con la acción “Click link on web page” que hay en la sección ‘Browser automation’.
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.
- Si ejecutáis el flujo hasta ahora, veréis que tras accionar el botón “Dissociate”, se os pedirá una confirmación. Para ello, utilizando la misma acción que antes, pulsaremos el botón “Yes”.

- Dado que el proceso de desasociar la IP al recurso tarda un poco, volveremos a establecer un retardo para asegurarnos que se ejecuta completamente. En este caso, lo estableceremos en 60 segundos.

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.
- Vamos a actualizar la página de Azure para visualizar que ahora no hay ninguna IP asociada. Para ello, utilizaremos la acción “Go to web page” del bloque ‘Browser automation’. En la configuración de esta acción, en el apartado Navigate, seleccionaremos ‘Reload web page’.

- Volvemos a poner un pequeño retraso de 5 segundos para que se termine de cargar bien la página.

- Es el momento ahora de pulsar el botón “Associate” en la página de Azure. Para ello, volvemos a utilizar la misma acción de siempre (“Click link on web page”) y seleccionamos el botón correspondiente.

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:
- Para seleccionar en el desplegable “Interfaz de red” volvemos a utilizar la misma acción de los pasos anteriores (“Click link on web page”). En primer lugar, haremos un click para mostrar las opciones y luego haremos click en ‘Network interface’

- Es el momento de seleccionar la interfaz de red de nuestra máquina virtual. Para ello volveremos a usar la misma acción pulsando sobre el desplegable y escogiendo la que corresponda.

- Ahora deberemos pulsar el botón “Ok”, por lo que volveremos a utilizar la acción “Click link on web page” en el elemento correspondiente.

- Una vez pulsado el botón, se ejecutará el proceso de asociación de la IP pública a nuestra interfaz de red. Como este proceso lleva un tiempo, volveremos a insertar una acción de espera por 90 segundos.

- El siguiente paso va a ser almacenar nuestra nueva IP en una variable del flujo. Para ello vamos primero a actualizar la página de Azure para que se muestre la nueva IP asociada. Para ello, volveremos a usar la acción “Go to web page” del bloque ‘Browser automation’ con la opción ‘Reload web page’. De nuevo, después volveremos a establecer una pequeña espera de 5 segundos para cargar bien los componentes de la página.

- Ahora vamos a guardar en una variable la nueva IP. Para ello vamos a utilizar la acción “Extract data from web page” que está en el bloque ‘Browser automation > Web data extraction’. Al agregarla al flujo, se abrirá la configuración. Lo que hay que hacer en este caso es ir directamente a nuestra página web de Azure y automáticamente se lanzará el asistente para la selección del elemento. Una vez localizado el div de la IP, pulsaremos botón derecho en el ratón y se abrirá un menú contextual para que escojamos qué valor queremos extraer. Aquí sería el atributo text del div que es el que contiene la dirección IP.


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’.
- Agregaremos ahora la acción “Get current date and time” del bloque ‘Date time’ para almacenar la fecha y hora actual en una variable (‘CurrentDateTime’)

- En este paso vamos a guardar la IP en un fichero de texto. Para ello, he creado un txt denominado ‘PAD_IPs.txt’ en una ruta dentro de la VM.
Para escribir en él la IP con la fecha actual, agregamos la acción “Write text to file” del bloque ‘File’ y lo configuramos de la siguiente forma para que en el texto a escribir concatene la fecha actual y la IP:

- Ya hemos hecho todas las tareas que necesitábamos del portal de Azure, por lo que podemos pasar a cerrar esta página. Para ello, agregaremos la acción “Close web browser” del bloque ‘Browser automation’.

- Ahora ya podemos pasar a abrir una nueva página del navegador con la URL de la página que vamos a monitorizar (la que está almacenada en la variable ‘myWebPage’). Para poder abrirla en modo de incógnito (in private) tendremos que usar la acción “Run application” del bloque ‘System’ ya que no hay una acción de navegador que lo haga.
En esta acción deberemos escoger el ejecutable de nuestro navegador y en la parte de comandos establecer la variable de la URL de nuestra web seguida del parámetro ‘-inprivate‘. De esta forma se cargará el navegador con nuestra web de incógnito.
Por tanto, la acción quedará de la siguiente forma:

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 Auotmate” 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í:

- Ahora necesitamos volver a disponer del navegador en una variable browser. Para ello, agregaremos la acción “Launch new Microsoft Edge” y en el parámetro ‘Launch mode’ escogeremos ‘Attach to running instace’. En el parámetro ‘Attach to Microsoft Edge tab’ seleccionaremos ‘By URL’ y en el ‘Tab URL’ escogeremos la variable de nuestra página web (‘myWebPage’).
Con esto, ya tendremos almacenada esta instancia del navegador en la variable ‘Browser2’

- Como ya tenemos la instancia del navegador en la variable, podemos cerrar la ventana con la acción “Close web browser” que está en el bloque ‘Browser automation’.

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.

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.
¡Muchas gracias por leerme!