Las versiones anteriores a Rocketbot 2023.03.20 no cuentan con actualizaciones automáticas, por lo que se necesita actualizar manualmente a la última versión de rocketbot. En este post explicaremos los pasos que debes realizar para actualizar Rocketbot
Para mantener la licencia y los robots, tienes que copiar desde tu versión anterior a la versión 2023 los siguientes archivos
license.json: Este archivo contiene tu licencia
robot.db: Este archivo contiene la base de datos de robots que viene por defecto en Rocketbot
Actualización de módulos
La versión 2023.03.20 realiza una actualización de la versión de python que utiliza. Esto puede generar conflictos con algunos módulos de las versiones anteriores, por tanto, no recomendamos copiar la carpeta modules de versiones anteriores, sino instalar las últimas versiones disponibles en el marketplace
Para actualizar o instalar los módulos que necesitan tus robots, puedes ir a la pestaña Robot de tu robot y al final de la página, instalar o actualizar los módulos correspondientes
Sección de módulos en la pestaña Robot
También puedes buscarlo desde el addon Install Mods o desde nuestro Marketplace
Migración de Robots
La última versión, además de actualizar el Python interno de 3.6.8 de 32bits a Python 3.10.4 de 64 bits también corrige el funcionamiento de alguno de los comandos nativos. Esto puede ocacionar que robots desarrollados en versiones anteriores, no funcionen correctamente en la última versión. Ya sea por correciones para bugs de comandos o por librerías externas de Python instaladas en Rocketbot.
Para migrar los robots recomendamos lo siguiente:
Para robots en producción, no actualizar a la nueva versión a menos que sea necesario. Puedes mantener las dos versiones de Rocketbot funcionando en la misma máquina
Actualiza el Python de tu máquina a Python 3.10 de 64 bits e instala las librerías que utilizan tus robots en la carpeta “modules/libs” de la nueva versión
Actualiza a la última versión los archivos que indica el updater
Si quieres migrar un robot productivo, realiza pruebas con la nueva versión antes de actualizar
Url utilizadas por el Updater
Las actualizaciones automáticas son revisadas y descargadas directamente desde el repositorio de Github de Rocketbot. Si tienes restricciones a URLs públicas, te dejamos un listado de las urls que necesita rocketbot para actualizar
Depending on the process you wish to automate and how you intend to run the robots, your server will need to meet specific requirements for the robot to operate well.
Processes can be divided into two types: those that require a graphical interface (robots that take screenshots or use the keyboard and mouse) and those that do not (robots that emulate a terminal, automate xlsx files, use an API, etc.). It is critical to consider this when developing a robot because most servers lose the graphical interface when disconnected, causing robots to fail.
Screen locking and minimizing the remote desktop can also have an impact on your robot’s performance. The operating system should never lock the screen on a machine running an automated process (RPA), as the robot will be unable to take screenshots or move the mouse to the indicated places. When you minimize the rdp, Windows may pause some processes or remove the interface, so you must configure your machine to prevent this from happening.
In Rocketbot, we have developed an application that allows you to easily configure your server, creating the necessary.bat files to run your robot and/or modifying the registers to prevent screen problems. You can download this application here: RDP-Rocketbot. Remember to save it to the server and/or machine as needed.
Maintain interface when server disconnects.
To avoid these issues, Windows servers have a command called tscon.exe that allows you to take an open session on the server and move it to the console, giving your robot an interface to work with after disconnecting from the server.
The tscon command can be used to create a bat file in the RDP-Rocketbot application’s Disconnect and run a task or Disconnect and run ROC tabs. This file must be run as administrator each time you want to disconnect from the server (or run your robot, depending on the option selected), and it will disconnect you from the server while maintaining the graphical interface.
Beware! If the remote desktop is not opened from a physical screen, the resolution may change and become lower. Refer to section three for alternatives.
You can edit the bat and examine its contents, but we have summarized the crucial information here. The bat contains a powershell script that retrieves the session id of the session you are using when logging into the rdp and uses it in the tscon command to open the console session.
To minimize the remote desktop without interfering with the robot’s operation, modify the following registers in the machine that opens the rdp:
For the current user:
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client (32 bit)
HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)
For all users:
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client (32 bit)
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)
You can change the logs with a single click in the RDP-Rocketbot application’s Connect to Remote Desktop tab. Just keep in mind that you must run the application as an administrator.
Change in resolution after disconnecting from the server
If you have already resolved the previous issues, but your robot still fails and/or does not recognize the images, you most likely have a resolution issue. We already mentioned in the first section of this post that when you disconnect the server, the graphical interface is lost and you must use tscon. This enables the robot to take screenshots, but because the server no longer has access to your screen to set a resolution, it uses its own default resolution, which is 1024×768 in most cases.
If your robot uses virtualization, this resolution change may have an impact, so it is critical that you check the resolutions that your server allows when you disconnect before beginning to develop your robot.
The resolutions allowed by the server in the Screen resolutions table from the TSCON console can be seen in the View screen resolutions tab of the RDP-Rocketbot application.
Those are the resolutions you can use, but that does not mean you can begin building the robot. When you disconnect, you should check the resolution of the server and, if possible, change it to the resolution you require. You can use the Windows module to change the screen resolution, and you can also use the Take screenshot command in the Desktop section to see if the resolution is correct.
If when exiting the remote desktop it is not possible to change the resolution manually and/or using the Rocketbot module, you can try the following:
Change the resolution in regedit by searching for all registries named DefaultSettings XResolution and DefaultSettings YResolution.
Prevent screen lock
To prevent the server from blocking the screen, you should first consult with the IT team to see if it is possible to modify the necessary settings to prevent this from happening, as this may not be possible depending on the company’s security policies.
In the Settings section of the RDP-Rocketbot application, you can modify the registers needed to disable the screen lock. The registry to be modified is HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
Ingresar a la página de Rocketbot, clickear el botón Descargue Rocketbot y elegir el sistema operativo macOS.
2. Descomprimir
Una vez descargado, descomprimimos el archivo .zip, obtendremos una carpeta llamada Rocketbot.
3. Ejecutar Rocketbot
Luego de descomprimir podemos dejar la carpeta donde estimemos conveniente, en este ejemplo quedará en Desktop.
Abrir la carpeta y dar doble click en el archivo ejecutable llamado “rocketbot”
3. Conceder permisos
Al dar doble click en el ejecutable, nos mostrará un mensaje de aviso donde indica que no se puede abrir la aplicación ya que no es un desarrollador identificado.
Realizaremos los siguientes pasos:
Damos click en OK
Ir a Preferencias del Sistema – Seguridad y Privacidad
Nos aparecerá que el uso de rocketbot se bloqueó, debemos dar click en “Abrir de todos modos”.
Nos aparecerá el siguiente mensaje, damos click en “Abrir”.
Esto nos abrirá nuestro navegador predeterminado con la dirección localhost:5000
Si además de permitir que abra Rocketbot, nos arroja alertas de Python o de alguna librería como estos ejemplos:
Debemos cancelar la alerta y dar los permisos de seguridad correspondientes.
En la ventana de “Seguridad y Privacidad”, ir a la pestaña “Privacidad”, en el menú izquierdo hacer scroll y seleccionar “Herramientas para desarrolladores”.
Si no tenemos la opción de Herramientas para desarrolladores (Developer Tools), debemos abrir una ventana de Terminal y escribir el siguiente comando spctl developer-mode enable-terminal con eso ya nos debe aparecer
También debemos instalar xcode con la siguiente instrucción desde el Terminal xcode-select --install
Nos aparecerá una ventana indicando que debemos instalar las tools, clickeamos Install y esperamos que termine
Volvemos a Seguridad y Privacidad y clickeamos el candado de la esquina inferior izquierda para poder realizar cambios.
Esto nos pedirá la contraseña de nuestro usuario, la ingresamos y seleccionamos “Desbloquear”.
Ahora podemos dar permisos al Terminal, en el caso que tengamos además otro terminal (ej: iTerm) y lo utilicemos para ejecutar rocketbot, también se debe seleccionar, luego seleccionamos el candado para guardar los cambios.
Finalmente podemos ejecutar rocketbot nuevamente y ya nos abrirá localhost:5000 en nuestro navegador predeterminado.
Si al abrir localhost:5000 nos aparece un error de acceso denegado a localhost, debemos cambiar el puerto de Rocketbot
Para cambiar el puerto debemos ir a la carpeta de Rocketbot y abrir el archivo rocketbot.ini
y cambiar donde dice port, elegimos otro puerto, por ejemplo el 5003
quedando de esta forma
Volvemos a ejecutar rocketbot y ahora ya nos cargará en el nuevo puerto pidiéndonos activar la licencia
Automatización de Aplicaciones de Escritorio
Las aplicaciones de escritorio no son tan estandarizadas como los son las aplicaciones web, mientras que para aplicaciones web utilizamos en su mayoría comandos que automatizan el navegador, para aplicaciones de escritorio tenemos diferentes métodos según el tipo de aplicación. En esta entrada te mostraremos las consideraciones y métodos que debes conocer antes de comenzar a desarrollar un robot para automatizar aplicaciones de escritorio.
Procesos que pueden presindir de una aplicación
Existen algunos procesos que si bien utilizamos una aplicación para realizarlos, existen métodos que permiten a los robots hacerlo de forma más eficiente. Recuerda que automatizar no es solo hacer robots que repliquen el comportamiento humano frente a la computadora.
En este tipo de aplicaciones se encuentran aquellas actividades que se pueden realizar por terminal o scripts bash, aplicaciones que tienen su versión web y que cuentan con una API o que trabajan bajo algún protocolo. Estos procesos pueden ser:
Automatización de correos electrónicos por conexión imap, smtp, pop.
Manipulación de archivos como mover, renombrar, leer, crear, etc.
No necesitas tener instalada la aplicación para automatizar estos procesos, solo debes descargar el módulo correspondiente en nuestro Marketplace. Estos procesos en su mayoría permiten ejecuciones en paralelo.
Aplicaciones con su propio sistema de scripting
Algunas empresas ya conocen el poder de la automatización y nos permiten interactuar con sus aplicaciones a través de su propio sistema de scripting. De esta manera, podemos controlar la aplicación sin necesidad de utilizar el mouse o teclado y utilizar los métodos internos que tiene cada aplicación para automatizar nuestro proceso.
Para automatizar estas aplicaciones es necesario tener instalada la aplicación en la misma máquina donde se ejecutará tu robot. Aplicaciones de este tipo son: SAP, SAPB1, Excel, Word, Outlook y puedes encontrar módulos para automatizarlos en Marketplace. Si conoces alguna aplicación que necesitas automatizar y esta tiene sistema de scripting, comunicate con nosotros y desarrollamos el componente.
Dependiendo de la aplicación, puedes ejecutar más robots al mismo tiempo. Revisa si la aplicación permite abrir múltiples instancias.
Aplicaciones Java o Windows Forms
Aunque algunas aplicaciones no tengan su propio sistema de scripting, si pueden ser automatizados de esta forma a través de las dll de Java o Windows. Automatizar una aplicación por scripting es similar a automatizar una página web, solo necesitas obtener información del objeto que quieres controlar, como el título, la clase, el id, el tipo de objecto, etc.
Esto no puede obtenerse directamente de la aplicación, pero puedes usar alguno de nuestros grabadores como el DesktopRecorder o JavaRecorder. Con esta herramienta puedes grabar las acciones que quieres realizar en la aplicación para luego replicar lo grabado en un robot. No es sencillo determinar que aplicaciones permiten automatizarlo por scripting. La mejor recomendación es descargar los grabadores y revisar si detectan tu aplicación.
La aplicación debe estar instalada en la misma máquina donde se ejecutará el robot y al hacer uso del mouse y/o teclado, no se puede trabajar con robots en paralelo que automaticen el mismo proceso
Otras aplicaciones
Si tu aplicación no se puede automatizar de las formas mencionadas anteriormente, puedes automatizar la aplicación por virtualización y/o comandos de teclado. Para esto, es necesario tener algunas consideraciones:
Si la aplicación permite utilizar combinaciones de tecla, utiliza el teclado por sobre virtualización. Puedes conocer los shortcut de la aplicación al ver una letra subrayada bajo la palabra donde quieres hacer click. Para replicar en Rocketbot, revisa la siguiente entrada 👉 Enviar Tecla
Si se debe extraer información, revisa si puedes usar el portapapeles para copiar el contenido.
Como se sacarán capturas de pantalla, se utilizará el mouse o el teclado. No se puede automatizar la misma aplicación en paralelo
Ejecutar en Paralelo
Rocketbot permite ejecuciones en paralelo, lo que quiere decir que podemos lanzar más de 1 robot al mismo tiempo.
Uno de los requisitos es contar con una licencia de Producción que permita este tipo de ejecuciones.
Al iniciar nuestro Rocketbot Studio, nos informará en la consola cuántos robots en paralelo nos permite:
Tener en cuenta que al estar Rocketbot Studio abierto es considerado un proceso, por lo tanto si tengo un máximo de 2 procesos en paralelo, y requiero ejecutar 2 robots, debo cerrar el Studio.
Para iniciar más de un robot, lo podemos realizar a través de un .bat si estamos en Windows o desde un .sh si estamos en macOS/Linux.
Windows
El archivo .bat debe tener lo siguiente:
cd C:/ruta/a/carpeta/Rocketbot
START rocketbot.exe -start=robot1
START rocketbot.exe -start=robot2
macOS/Linux
El archivo .sh debe tener lo siguiente:
cd /ruta/a/carpeta/Rocketbot
./rocketbot -start=robot1 &
./rocketbot -start=robot2
Luego podemos ejecutar el .bat/.sh mediante un doble click o agregarlo a una tarea programada.
Messages that contain the specified string in the envelope structure’s BCC field.
BEFORE
Messages whose internal date (disregarding time and timezone) is earlier than the specified date.
BODY
Messages that contain the specified string in the body of the message.
CC
Messages that contain the specified string in the envelope structure’s CC field.
DELETED
Messages with the \Deleted flag set.
DRAFT
Messages with the \Draft flag set.
FLAGGED
Messages with the \Flagged flag set.
FROM
Messages that contain the specified string in the envelope structure’s FROM field.
HEADER
Messages that have a header with the specified field-name (as defined in [RFC-2822]) and that contains the specified string in the text of the header (what comes after the colon). If the string to search is zero-length, this matches all messages that have a header line with the specified field-name regardless of the contents.
KEYWORD
Messages with the specified keyword flag set.
LARGER
Messages with an [RFC-2822] size larger than the specified number of octets.
NEW
Messages that have the \Recent flag set but not the \Seen flag. This is functionally equivalent to “(RECENT UNSEEN)”.
NOT
Messages that do not match the specified search key.
OLD
Messages that do not have the \Recent flag set. This is functionally equivalent to “NOT RECENT” (as opposed to “NOT NEW”).
ON
Messages whose internal date (disregarding time and timezone) is within the specified date.
OR
Messages that match either search key.
RECENT
Messages that have the \Recent flag set.
SEEN
Messages that have the \Seen flag set.
SENTBEFORE
Messages whose [RFC-2822] Date: header (disregarding time and timezone) is earlier than the specified date.
SENTON
Messages whose [RFC-2822] Date: header (disregarding time and timezone) is within the specified date.
SENTSINCE
Messages whose [RFC-2822] Date: header (disregarding time and timezone) is within or later than the specified date.
SINCE
Messages whose internal date (disregarding time and timezone) is within or later than the specified date.
SMALLER
Messages with an [RFC-2822] size smaller than the specified number of octets.
SUBJECT
Messages that contain the specified string in the envelope structure’s SUBJECT field.
TEXT
Messages that contain the specified string in the header or body of the message.
TO
Messages that contain the specified string in the envelope structure’s TO field.
UID
Messages with unique identifiers corresponding to the specified unique identifier set. Sequence set ranges are permitted.
UNANSWERED
Messages that do not have the \Answered flag set.
UNDELETED
Messages that do not have the \Deleted flag set.
UNDRAFT
Messages that do not have the \Draft flag set.
UNFLAGGED
Messages that do not have the \Flagged flag set.
UNKEYWORD
Messages that do not have the specified keyword flag set.
UNSEEN
Messages that do not have the \Seen flag set.
Problema Diploma Academy
Aveces existe problemas de caché cuando se quiere ver o descargar el diploma de Academy, para solventarlo deben realizar lo siguiente:
1.- Inspeccionar la página
2.- Ir a la pestaña Network
3.- Desactivar el caché si aún no se tiene marcado
4.- Realizar ctrl +r (o command + r en mac) un par de veces
5.- Esperar que la página recargue y volver a clickear el botón del Diploma
dejamos un video de los pasos a seguir:
Manejo de DatePicker
La mayoría de los datapickers no permiten modificar el input de la fecha de forma sencilla, ya sea enviando con el comando de enviar texto web o modificando el value con Javascript.
Dependiendo de la librería o framework que utilice la página que quieres automatizar, será el método que debes seguir.
Angular
Para saber si la web está desarrollada en angular, el input que laza el datepicker debe tener algún atributo que comience con ng-, por ejemplo:
Para modificar datepicker, debes seguir los siguientes pasos:
Copiar el JS Path (igual como copias el XPath) y almacenarlo en una variable, en el ejemplo, la variable se llama element .
Obtener el nombre del modelo. En el input de ejemplo, el modelo (ng-model) es mov.calendar.fromDate.Esta es la variable que debe modificarse con la fecha, lo escribimos después de scope() (ver ejemplo)
Si el input tiene el atributo ng-change, se debe repetir lo mismo que en el paso anterior, invocando la función.
Escribir el script de ejemplo en el comando ejecutar javascript reemplazando con los valores correspondientes.
Ejemplo:
element = document.querySelector("#datepicker_id") // Este es el JS Path
angular.element(element).scope().mov.calendar.fromDate = "{fecha}" // Acá modificamos la fecha
angular.element(element).scope().mov.update() // Acá aplicamos el cambio
Ember
Para saber si una aplicación está desarrollada con ember, debemos buscar si al inicio del body de la página, tiene algún id o clase con la palabra ember.
Para modificar el datepicker, se deben seguir estos pasos:
Obtener el nombre que aparece en la ruta de la página, luego del #. Ejemplo, si la ruta es tupagina.com/#/reporte-control, el nombre del control será reporte-control.
Obtener el id del input que se quiere modificar.
Escribir el script de ejemplo en el comando ejecutar javascript reemplazando con los valores correspondientes.
Input de ejemplo: <input id="fechaInicial" type="date"/>
Script de ejemplo:
function getApplication() {
var namespaces = Ember.Namespace.NAMESPACES, application;
namespaces.forEach(function(namespace) {
if(namespace instanceof Ember.Application) {
application = namespace;
return false;
}
});
return application;
}
app = getApplication() // obtenemos la aplicación de ember
controller = app.__container__.lookup('controller:reporte-control') //obtenemos el controlador
controller.set('fechaInicial', new Date("{fechaInicial}")) // modificamos la fecha
Nuxtjs
Para saber si una aplicación está desarrollada con nuxt , debemos buscar si al inicio del body de la página, tiene algún id con la palabra nuxt, por ejempo <Div id="__nuxt">.
Para modificar el datepicker, se deben seguir estos pasos:
buscar el elemento con atributo __vue__
Si no está, entonces buscar el ancestro que lo tenga y desde el atributo __vue__ buscar el Children(hijo)
luego buscar el modelo y ejecutar el callback con la fecha
Ejemplo:
element = document.getElementById('id').__vue__// buscar el elemento con atributo __vue__
element = document.getElementById('id_ancestro')._vue__.children[pos_element]// Si no está, entonces buscar el ancestro que lo tenga y desde el atributo __vue__ buscar el Children(hijo)
element.data.model.callback(new Date(mm-dd-yyyy))// luego buscar el modelo y ejecutar el callback con la fecha
Enabling less secure apps to access Gmail
1. Turning on ‘less secure apps’ settings as mail domain Administrator
Under Less secure apps, select Go to settings for less secure apps.
In the subwindow, select the Enforce access to less secure apps for all users radio button. (You can also use the Allow users to manage their access to less secure apps, but don’t forget to turn on the less secure apps option in users settings then!)
Click the Save button.
2. Turning on ‘less secure apps’ settings as mailbox user
On the bottom of the page, in the Less secure app access panel, click Turn on access. If you don’t see this setting, your administrator might have turned off less secure app account access (check the instruction above).
Click the Save button.
Buenas Prácticas en la creación de Bots
Para crear bots de una forma óptima se puede revisar el siguiente manual de Buenas Prácticas.
Agregar descripciones en los comandos nos ayuda a comprender cuál es la acción específica que este realiza, lo que es de suma importancia a la hora de modificar un robot, ya sea para cambiar funcionalidades o identificar posibles errores.
Nombre del Robot
Nunca utilizar espacios, ñ, ni caracteres especiales en el nombre del robot, si el nombre fuera compuesto por varias palabras puede utilizarse el siguiente formato: snake_case, camelCase o PascalCase.
Variables
Nombre de Variables
En la definición de variables nunca se deben utilizar espacios, ñ, o caracteresespeciales, en caso de utilizar palabras compuestas se pueden utilizar guiones bajos o comenzar la siguiente palabra con Mayúscula como por ejemplo: snake_case, camelCase o PascalCase.
Limpiar Variables
Es buena práctica limpiar las variables que no requieren valores fijos, al principio de nuestro bot, es recomendable utilizar el comando “Limpiar Variable(s)” del módulo System++, ya que si limpiamos una por una tendremos un comando por cada variable, lo que se pueden reducir a sólo uno con la siguiente instrucción:
Reglas de Variable
String
Cuando queremos trabajar con variables de tipo String en Rocketbot, debemos pasarlas a comillas dobles, ejemplo.
Tenemos una variable llamada {texto} la cual contiene lo siguiente:
Si queremos por ejemplo modificar parte del texto, podemos utilizar el método de string[1] llamado replace(), en este caso si solo pasamos la variable, nos arrojará un error de sintaxis:
Debemos indicar que la variable {texto} la trabaje como un string, y para eso debemos pasarla entre comillas dobles "{texto}".
Si además nuestra variable es un string pero contiene saltos de líneas, entonces debemos pasarla entre triple comillas dobles y espacios """{texto}""", esto permite que nuestra cadena de texto utilice más de una línea, por ejemplo, ahora nuestra variable {texto}se ve de la siguiente forma:
Si volvemos a ejecutar el comando anterior, nos arrojará un error:
Al pasarla a triple comilla doble y espacios, ejecutará el método sin problema:
Decodificación
Cuando tenemos variables codificadas, por ejemplo por haber obtenido el dato a través de JS, nos mostrará el texto de esta forma:
Para utilizar esta variable como STRING se debe utilizar {variable}.decode() o {variable}.decode(‘latin-1’) en el comando Asignar Variable.
Quedará de esta forma y ya podemos utilizar la información correctamente:
Variables heredadas Padre-Hijo
Las variables del PADRE pueden ser utilizadas por todos los robots de la imagen, el HIJO1 por ejemplo, no puede utilizar las variables de sus hermanos (HIJO2–HIJO3), el NIETO1 puede usar las variables del PADRE y del HIJO1, pero no las del HIJO2 – HIJO3
Tiempos de ejecución (Esperar por Objeto)
En Studio (ambiente Desarrollo) el robot se ejecuta paso a paso con datos de debug que viajan al intérprete y regresan con datos de ejecución. Esto hace que el comando tenga un tiempo de ejecución y milisegundos por cada comando para interpretar la respuesta. Significa que el robot en desarrollo es mucho más lento que en producción donde no necesita tiempos de debug. Ej: En un robot extenso de manejo de Excel un robot tarda una hora en desarrollo pero solo 10 minutos en producción. Para solventar esto y como parte de las buenas prácticas se debe usar los comandos Esperar por Objeto, de cada tipo de tecnología (Web, Desktop, Virtualización, etc.).
Credenciales
Como buena práctica es importante utilizar un baúl de credenciales para obtener los datos y no dejarlos fijos.
Si tenemos Mac o Linux, podemos utilizar el siguiente módulo Credentials_, si estamos en Windows, debemos usar el siguiente: Windows Credential Manager.
Podemos encontrar más información acerca de cómo realizarlo, en la documentación de los manuales linkeados arriba.
Validaciones
Se deben validar todos los comandos y/o módulos que lo permitan, por ejemplo si es una conexión a una BD, Correo, FTP, Abrir un Archivo, etc. se debe retornar a una variable y tomar una decisión con un IF.
Esto nos permite poder controlar errores y tomar una decisión para que el robot no continúe ejecutándose cuando faltan partes del proceso o cuando no se realizó algo de forma correcta.
Ejemplo:
Crear un archivo excel y validar su correcta creación, si está ok, entonces se escribe en el archivo, sino, se deja un mensaje en el log y se detiene el robot.
Luego realizamos el guardado del archivo, y se valida, si se guardó de forma correcta, entonces cerramos la aplicación, sino, se deja un mensaje en el log y se detiene el robot.
Cerrar Procesos
Todos los comandos y/o módulos que permitan cerrar conexiones, se deben agregar al proceso, por ejemplo, cerrar una conexión a una BD, a un FTP, Correo, Cerrar un archivo Excel, XML, etc.
Es necesario siempre cerrar todo lo que se abre con Rocketbot, ya que esto nos permite liberar recursos y evitar errores de ejecución, si el comando o módulo no permite cerrar la conexión o los procesos no son cerrados de forma correcta, se pueden utilizar los módulos killProcess y/o killApp para terminar de matar procesos zombies.
Ejemplo de un error:
Problema
No se realizó la ejecución de bots desde el Orquestador dado que un proceso no finalizó.
Causa
No llega la respuesta de proceso finalizado al Orquestador. Esto ocurre cuando se trabaja con un proceso que queda en segundo plano o no finaliza al terminar el robot. Por ejemplo, abrir alguna aplicación.
Solución
Agregar el comando killProcess y/o killApp al final del flujo para que cierre cualquier proceso zombie que pudiera estar activo e impida notificar al Orquestador el término del proceso.
Web
Abrir navegador
Opciones:
Selecciona navegador: Chrome/Firefox/IE
URL de Servidor:Indicar la url de la página a la cual queremos acceder (Si no se elige ninguna abre por defecto https://www.google.com). Admite variables
Modo de Apertura:Síncrona/Asíncrona.
Sincrónico es el método normal de apertura, el cual espera para continuar con los comandos, no se debe cambiar.
Buenas prácticas
Es óptimo agregar la url en una variable, pensando en escalabilidad, si en algún momento se requiere que la variable sea dinámica o si necesita cambiar, lo ideal es que Rocketbot lea algún archivo de configuración y setear el valor a la variable para no estar abriendo y modificando el robot.
Error común
Los navegadores son controlados por web drivers, estos se encuentran dentro de la carpeta Rocketbot/drivers/{sistema operativo}/{browser}, los mismos deben ser actualizados si se actualiza la versión del navegador y el robot comienza a presentar problemas.
Error de driver al intentar abrir navegador, esto sucede cuando el navegador se actualiza, para solucionarlo se debe actualizar el driver según la versión del browser.
Descargar y descomprimir el driver, copiar el archivo en la siguiente ruta:
Rocketbot/drivers/{sistema operativo}/{browser}
Ej: Rocketbot/drivers/win/chrome
Cerrar Navegador
Nos permite cerrar el navegador abierto con Rocketbot, cierra todo incluyendo las pestañas abiertas.
Buenas prácticas
Siempre que realicemos un robot de tipo Web, y ya no necesitemos utilizar más el navegador, debemos agregar el comando Cerrar Navegador, ya que esto además de cerrar el Browser, mata el proceso del driver abierto con Rocketbot. El cual se abre en cada ejecución, por lo que si no se mata y se acumulan demasiados, podría consumir bastante recurso de la máquina.
Todo lo que se abre con Rocketbot, es óptimo que se cierre al final del proceso o cuando ya no se utilice más, ej: navegador, conexión a BD, conexión a email, Excel, etc.
Cambiar a ventana
Cuando la página que estamos controlando abre otra ventana (al clickar un botón, enlace, etc.) este comando nos permite cambiarnos a la nueva pestaña y dejarla en foco para poder trabajar con los elementos.
En este ejemplo tenemos en foco la primera pestaña (google),
si queremos hacer un click en la página de Rocketbot (pestaña 2), por ejemplo al botón Descargar, obtendremos un error como este, donde nos indica que nose encuentra el elemento.
Debemos entonces primero cambiarnos de ventana y una vez quede en foco ya podremos realizar el click. Podemos cambiarnos indicando el handle o una de las siguientes opciones las cuales indican la posición de las pestañas abiertas:
Secuencia:
Buenas prácticas
Cada vez que nos cambiamos a otra ventana debemos utilizar el comando Esperar por Objeto con su respectivo IF de validación, ya que estamos ingresando a otra página y debemos asegurarnos de que cargó correctamente.
Esperar Por Objeto
Este comando permite esperar por un elemento en la web, dándole segundos máximos de espera hasta que nos retorna una respuesta (True o False, si lo encontró o no respectivamente). Se debe utilizar siempre que abrimos el navegador para confirmar si la página realmente cargó, también cuando clickeamos algún enlace o botón y nos abre otra pestaña, en general siempre que “cambiemos” de página, para así validar que cargó y los elementos ya existen.
Opciones:
Dato a buscar:Valor del identificador del elemento.
Tipo de dato: Tipo de identificador del elemento.
Esperar Antes: Cantidad de segundos antes de que el comando “Esperar por Objeto” se ejecute. Es una espera fija, la cantidad de segundos que definamos se respetarán si o si, por lo cual se recomienda que sean tiempos bajos, ojalá no más de 2-5 segundos.
AcciónEsperar máx: Cantidad de segundos máxima que esperará el elemento. Es una espera variable, si ingresamos 10 segundos, no significa que los esperará si o si, sino que como máximo esperará esa cantidad, si nuestro elemento aparece antes en la página, entonces obtendremos antes nuestra respuesta y se continuará con el siguiente comando, en cambio, si nuestro elemento no aparece, estará consultando hasta que se cumplan los 10 segundos y luego nos retornará un False en nuestra variable.
Esperar Después: Cantidad de segundos que esperará luego de que se ejecute el comando “Esperar por Objeto” y continúe con el siguiente. Es una espera fija, la cantidad de segundos que definamos se respetarán si o si, por lo cual se recomienda que sean tiempos bajos, ojalá no más de 2-5 segundos.
Asignar resultado a variable: Variable donde retornaremos el valor de si encontró o no el elemento dentro de los segundos asignados (True o False).
En este caso se está esperando 10 segundos a que aparezca el input de Google para realizar una búsqueda.
Buenas prácticas
Esperar Antes y Esperar Después: Son tiempos fijos, y son campos opcionales, en caso de utilizarlos, se deben indicar tiempos bajos (ej: 2-5 segundos), ya que utilizar esperas fijas no es buena práctica.
Acción Esperar máx: Es un tiempo variable, y es un campo obligatorio, siempre debe ir un valor ya que sino se indica, el comando no estará cumpliendo su función, como es un tiempo variable y no fijo, a diferencia de los dos inputs indicados arriba, el tiempo indicado debe ser más amplio.
Siempre que utilizamos Esperar por Objetoal inicio de nuestro flujo, se debe utilizar el comando IF del menú lógica, ya que tendremos una respuesta (True o False) en nuestra variable, en este ejemplo, llamada {wait}, con esa respuesta debemos tomar una decisión, qué hacer si es True (seguir el flujo normal) o qué hacer si es False (arrojar excepción, cerrar navegador, escribir en un log, informar por correo, etc.)
La secuencia sería la siguiente:
Abrir la página de google.
Esperar 10 segundos máximo a que el input de búsqueda cargue en la página.
Tomar una decisión con el IF
True: Clickear el input de búsqueda, enviar el texto a buscar y realizar un Enter.
False: Cerrar el navegador y detener el robot.
Sistema
Esperar
Hace esperar al sistema por N segundos y luego sigue ejecutando los comandos.
Utilizado para casos especiales,no se deben utilizar esperas fijas ya que solo aumentarán el tiempo de ejecución del robot, para Web se debe utilizar Esperar por Objetoy para Desktop con Virtualización se debe utilizar Esperar por Imagen.
Scripts
Ejecuta otro script RocketBot
Este comando nos sirve para llamar un robot desde otro, donde podemos compartir variables y dividir tareas entre cada robot.
Nos mostrará todos los robot que tenemos en nuestra base de datos para ejecutarlos.
Buenas prácticas
Como buena práctica siempre es recomendado seccionar el flujo (proceso), en varios mini-bots. Esto facilita el poder modificar el proceso, revisar dónde está fallando, corregirlo y reutilizar comandos.
Ejemplo:
Un robot principal (padre), que abra un navegador con una url, luego un mini robot (hijo_descarga), que descargue un archivo y otro mini bot (hijo_mail) que tome el archivo y lo envíe por mail.
Robot“padre”:
Abre el navegador con una URL específica.
Maximiza la ventana.
Ejecuta un robot hijo (hijo_descarga).
Cierra el navegador.
Variables:
N/A
Robot “hijo_descarga”:
Cuenta la cantidad de archivos existentes en la carpeta de Descarga.
Realiza click en el botón Descargar de la página abierta.
Espera hasta que la descarga haya finalizado.
Ejecuta un robot hijo (hijo_mail)
Variables:
Robot “hijo_mail”:
Configura un correo Gmail.
Envía un correo adjuntando el archivo descargado en el robot anterior (utilizando la variable {path} del robot hijo_descarga).
Variables:
Detener este robot
Detiene la ejecución del robot actual y continúa con los siguientes, para utilizarlo solo se agrega el comando.
Buenas prácticas
Si tenemos una validación IF por ejemplo, para validar que la página cargó correctamente, este comando nos serviría para no continuar con las demás instrucciones. En caso de que algo falle, se puede detener el robot.
Ejemplo:
En este caso al caer en el Else, detendrá el Robot actual, por lo que no continuará con las siguientes instrucciones como la ejecución del bot hijo llamado Excel.
Detener todo y salir
Este comando detiene el Script en curso y sus padres.
Buenas prácticas
Misma función que el comando anterior, con la diferencia de que este detendrá tanto el robot actual como sus robots padres.
Desktop
Mover Mouse
Mueve el mouse hasta la posición indicada por coordenadas X e Y (ej: 1045,207).
Para obtener las coordenadas podemos utilizar el comando Obtener coordenadas del mouse.
Buena práctica
Este tipo de instrucciones no se deben utilizar en procesos Web, son para utilizarlas en automatizaciones de aplicaciones de escritorio, sin embargo si requerimos mover el mouse para realizar algún click, es mejor utilizar el comando Click en Imagen, el cual busca la imagen en toda la pantalla, por lo tanto si el objeto cambia de posición lo encontrará igualmente, no así MoverMouse, que solamente irá a una posición específica.
Mouse Click
Hace click en donde está posicionado el Mouse, si queremos que lo realice en un lugar específico, debemos utilizar primero el comando Mover Mouse para indicarle la posición y una vez esté donde lo queremos, utilizamos Mouse Click.
Podemos utilizar:
left -> para hacer click con el botón izquierdo
right-> para hacer click con el botón derecho
middle -> para hacer click con el botón central del Mouse
Buena práctica
Este tipo de instrucciones no se deben utilizar en procesos Web, son para utilizarlas en automatizaciones de aplicaciones de escritorio, sin embargo si requerimos realizar algún click, es mejor utilizar el comando Click en Imagen, el cual busca la imagen en toda la pantalla, por lo tanto si el objeto cambia de posición lo encontrará igualmente, no así Mouse Click, que solamente lo hará en una posición específica.
Alerta
Este comando muestra un cartel de mensaje. Agregamos el comando: Mostrará la ventana de alerta: También le podemos pasar una variable para que nos muestre su valor. Nos mostrará la ventana de alerta con el valor que tiene la variable que ingresamos.
Buena práctica
Las alertas son sólo cuando estamos desarrollando un robot, pero se deben eliminar de un robot final, ya que éstas pausan la ejecución y el proceso no continuará hasta que sea aceptada.
Enviar Tecla
Al igual que el comando Enviar Texto Web éste sólo acepta una opción, si se escribe un texto (o una variable con texto) no se puede agregar una tecla especial, o no funcionará. Al revés lo mismo, si queremos enviar una tecla especial, no podemos también pasar un texto.
Buenas prácticas
No utilizar este comando en automatizaciones Web, en ese caso se debe utilizar Enviar Texto Web, ni en aplicaciones Office (Excel, Word, Powerpoint) para ellas se deben utilizar los menús o módulos respectivos.
En el input de Texto, podemos concatenar un texto y una tecla, de la siguiente forma:
Si se necesita repetir la misma tecla varias veces, también se puede indicar de esta forma:
Podemos encontrar más información respecto a combinaciones a utilizar en el siguiente link: pywinauto además podemos utilizar teclas predefinidas con el el módulo Keyboard.
Lógica
IF
La sentencia if se utiliza para ejecutar un bloque de código si, y sólo si, se cumple una determinada condición. Por lo tanto, IF es usado para la toma de decisiones.
Buenas prácticas
Nunca se debe dejar un IF vacío y poner solo la lógica en el Else, esto no es permitido en Python por lo tanto producirá fallos en nuestro robot.
Ejemplo:
La forma correcta es la siguiente, donde el Else si puede ir vacío:
While
Con la sentencia While podemos ejecutar un ciclo mientras se cumpla una condición, lo cual nos permite ejecutar instrucciones múltiples veces.
Buenas prácticas
La condición debe estar relacionada con una variable que tenga un cambio en la condición para que en algún momento esta se cumpla y se termine el ciclo, sinó se corre el riesgo de generar un bucle infinito.
XLSX
Si trabajamos con este menú no es necesario tener instalado Microsoft Excel, ya que no trabaja con la aplicación, abre o crea un archivo en segundo plano y no veremos que este se abra, todo pasará por debajo.
Nuevo xlsx
Nos permite crear un nuevo archivo XLSX en memoria, podemos indicar un Identificador (puede ser un número, letra o palabra) en el caso de que necesitemos crear y trabaja con más de un archivo xlsx abierto por Rocketbot, luego si necesitamos ir moviéndonos entre uno u otro, lo tendremos que realizar a través de su ID, también podemos indicar una variable, donde obtendremos un True si se puedo crear un nuevo archivo o False en caso contrario.
Buenas prácticas
Retornar a una variable para validar si se pudo abrir de forma correcta o no y con eso tomar una decisión a través del comando IF.
Ejemplo:
Abrir xlsx
Nos permite abrir un archivo XLSX en memoria, debemos indicar la ruta donde se encuentra, y al igual que el comando anterior también podemos indicar un Identificador en el caso que necesitemos abrir más de un archivo, además de la variable donde obtendremos un True si se pudo abrir de forma correcta, o un False en caso contrario.
Buenas prácticas
Retornar a una variable para validar si se pudo abrir de forma correcta o no y con eso tomar una decisión a través del comando IF.
Ejemplo:
Contar Filas
Este comando nos permite obtener la cantidad total de filas con información del archivo xlsx. Por defecto contará las filas de la primera hoja, si necesitamos trabajar con otra, primero debemos cambiarnos con el comando Cambiar de Hoja.
Buenas prácticas
Siempre luego de Abrir un archivo xlsx, debemos contar la cantidad de filas que tiene, ya que en el caso de que la cantidad sea variable y en otra ocasión el archivo tenga más o menos filas, es decir, en otra ocasión el archivo tenga más o menos filas tendríamos que estar modificando el comando Obtener celda de forma manual, lo cual no es óptimo, por lo tanto siempre se debe trabajar con una variable que contenga la cantidad de filas.
Obtener celda
Este comando nos permite obtener una celda o un rango de celdas y almacenar la información en una variable, al obtener un rango nos devolverá una lista o una lista de listas.
Buenas prácticas
Cuando trabajamos con un rango (ej: A1:F3) no debemos pasar un número fijo al final de este, sino, debemos utilizar el comando Contar Filas y asignar el valor a una variable, esta variable es la que se debe pasar al final del rango, ej: A1:F{filas}, esto en el caso de que la cantidad de datos en el Excel sea variable, para no estar modificando el comando cada vez que la cantidad de filas cambia, se debe utilizar esta buena práctica.
Virtualización
Este menú es nuestra última opción para realizar una automatización, el orden de prioridad sería:
Comandos nativos y/o módulos para Web, Office, Email, Base de datos, SAP, FTP, Archivos, etc.
Si necesitamos controlar una aplicación de escritorio, debemos primero intentar con los grabadores, Desktop Recorder o Java Recorder, si ninguno de los dos nos sirve, entonces la última opción será Virtualización ya que se deben considerar ciertas cosas como por ejemplo:
La resolución del PC afectará al bot, por ejemplo, si se desarrolla un bot en X computador y luego se pasa al computador del cliente o donde se ejecutará finalmente, lo más probable es que no funcione correctamente, ya que se tienen resoluciones y componentes distintos.
Las imágenes siempre deben estar enfrente para que el bot las reconozca, esto quiere decir que una persona no puede utilizar el computador al mismo tiempo que el robot, por lo tanto no se podrán realizar ejecuciones en paralelo.
La pantalla no se puede bloquear, por lo que eso se debe desactivar o realizar ajustes para que no suceda.
Considerar: Al trabajar con Virtualización, al sacar una captura de pantalla con los comandos del menú que lo permiten, siempre tomará la pantalla principal por defecto.
Buscar por Imagen
Busca una imagen de referencia en la pantalla y almacena el resultado en una variable retornando True si la encontró dentro del tiempo definido o False en caso contrario.
Buenas prácticas
Al igual que el comando Esperar por Objeto para la parte web, en Virtualización debemos utilizar este comando para asegurarnos de que el elemento con el cual queremos trabajar, existe, y luego tomar una decisión con un IF, si nos retorna True, osea que sí lo encontró, entonces dentro de ese bloque realizamos nuestro flujo, si nos retorna False, osea que no lo encontró entonces debemos decidir qué hacer.
Esperar por Imagen
Espera una imagen de referencia en la pantalla y almacena en una variable si está visible o no.
Realiza la misma función que el comando Buscar por imagen.
Buenas prácticas
Al igual que el comando Esperar por Objeto para la parte web, en Virtualización debemos utilizar este comando para asegurarnos de que el elemento con el cual queremos trabajar, existe, y luego tomar una decisión con un IF, si nos retorna True, osea que sí lo encontró, entonces dentro de ese bloque realizamos nuestro flujo, si nos retorna False, osea que no lo encontró entonces debemos decidir qué hacer.
Tips
Windows
Estos son algunos casos donde los comandos de imagen no funcionen correctamente, por lo tanto se debe revisar resolución o ejecutar Rocketbot como administrador.
Si la configuración de pantalla está aumentada, dejarla al 100% y probar.
Importante:Si se realizan cambios de escala, puede ser necesario cerrar sesión y volver a abrir para que los cambios se guarden.
2. Si realiza click en ciertas imágenes pero no en todas.
Por ejemplo realiza click en elementos del escritorio o barra de tareas pero no en una aplicación de escritorio interna, además al intentar abrir la aplicación con Rocketbot aparece lo siguiente:
Ejecutar Rocketbot como administrador y probar.
3. Si realiza click en otra parte
Especificar alguna referencia, por ejemplo si tenemos dos elementos iguales, debemos marcar como referencia algo que no se repita y como foco el lugar donde realizar el click.
Por ejemplo acá seleccionamos como referencia el label Username el cual no se repite, y el foco es el input, lo que hará será calcular las coordenadas desde la imagen de referencia hasta la indicada en foco y hará click a lo que se encuentre en esa posición.
Si sigue realizando el click en otra parte, y se está trabajando desde un escritorio remoto, debemos cambiar la resolución antes de ingresar al servidor.
Por ejemplo, el foco (donde hacer el click) es el ícono de Rocketbot, pero el click lo realiza en el punto rojo:
Configuración:
4. Si sigue sin encontrar las imágenes y es un Windows Enterprise (win 7 o win 10), revisar si está la siguiente .dll sino, agregarla:
5. Virtualización en Windows server 2012 mediante rdp
En caso que las funciones de virtualización para “click en imagen” o “esperar por imagen” no funcionara correctamente podemos revisar lo siguiente:
Que no esté habilitada la opción de cambiar el nivel de escala:
Adicional a esto verificar que esté instalada las características dentro de “Interfaz de usuario e Infraestructura” en especial Experiencia de escritorio:
macOS
Permiso denegado al hacer OCR
Solución:
Abrir el terminal e ir a la ruta indicada en el error, ej: cd /Users/usuario/Desktop/Rocketbot/drivers/mac/tesseract
Escribir el comando ls-l para visualizar los permisos.
Veremos que en este caso no tiene permisos de ejecución:
4. Le damos los permisos con uno de los siguiente comandos:
ejecución para todos los usuarios:chmod 777 tesseract
ejecución sólo para el owner:chmod 744 tesseract
Volvemos a ejecutar un ls -lpara revisar los cambios:
Ahora ejecutamos nuevamente el comando de OCR
MySQL
Configurar conexión MySQL
Para conectarnos con MySQL, debemos indicar la URL del servidor, puerto, nombre de la BD, usuario y contraseña, además podemos retornar el resultado a una variable donde obtendremos un True si la conexión fue exitosa, o un False, en caso contrario y podemos utilizar un ID en caso de que nos conectemos a varias Bases de datos MySQL.
Buenas prácticas
Siempre agregar una variable para retornar el status de conexión y con eso validar a través del comando IF para tomar una decisión.
Consulta MySQL
Realiza una consulta MySQL (Select, insert, delete, update), el resultado lo retornamos en una variable para posteriormente trabajar con la información.
Buenas prácticas
En el ambiente de Desarrollo de Rocketbot las consultas se deben realizar con límites y no traer todos los registros, ya que si son demasiados, Rocketbot puede detenerse por consumo de memoria, esto para realizar pruebas, ya en el ambiente de producción igualmente es recomendable seccionar la cantidad de registros consultados.
Email
SMTP – IMAP
Configurar Servidor
Configura un servidor SMTP e IMAP con SSL para enviar y recibir correo. Al abrir el comando, por defecto vienen los servidores y puertos de gmail, debemos añadir el correo y su contraseña.
Buenas prácticas
Variables:
Es buena práctica, utilizar variables tanto en el nombre de usuario como en el caso de la contraseña y no escribirlos directamente en el comando. También debemos recordar siempre borrar las credenciales si por alguna razón tuvieras que compartir el robot.
Conexión:
Siempre se debe validar la correcta conexión de la cuenta de correo, en el caso de los módulos, éstos permiten validar la conexión retornando el resultado a una variable, por lo tanto esto se debe validar con un IF.
Ejemplo:
Una vez que ya no utilizaremos nada respecto a correos, debemos cerrar la conexión con el comando “Cerrar Conexión” del módulo que estemos utilizando.
Módulos:
Se recomienda utilizar los módulos específicos para los distintos tipos de servidores de correo, pero si se requiere utilizar uno corporativo o que por el momento no tenga su respectivo módulo, es óptimo utilizar este comando para configurar y complementarlo con el módulo Email Advanced en vez de utilizar los comandos nativos que son más limitados.
Listar todos los email IMAP
Este comando nos permite obtener una lista de todos los email que coincidan con el filtro[2] indicado, debemos retornar el resultado a una variable para trabajar con la información.
Buenas prácticas
Una vez que obtenemos el resultado de listar email es necesario decodificar los datos.
La decodificación se realiza con el comando Asignar Variable y la función de Python decode().
Ejemplo:
Quedará de la siguiente forma:
Si queremos realizar el decode para toda la lista obtenida, debemos recorrerla con un For.
Listar email nuevos IMAP
Este comando nos permite obtener una lista de todos los email que coincidan con el filtro[3] indicado, la diferencia con el comando anterior es que este nos traerá los id’s sólo de los correos que no hayan sido leídos aún. Debemos retornar el resultado a una variable para trabajar con la información.
Al igual que el comando anterior, también debemos decodificar los id’s entregados.
Integración con Aplicaciones
Excel
Si trabajamos con este menú si es necesario tener instalado Microsoft Excel, ya que trabaja con la aplicación, abre o crea un archivo en primer plano y veremos que este se abre.
Nuevo Libro
Nos permite crear un nuevo archivo Excel, podemos indicar un Identificador (puede ser un número, letra o palabra) en el caso de que necesitemos crear y/o trabaja con más de un archivo Excel abierto por Rocketbot, luego si necesitamos ir moviéndonos entre uno u otro, lo tendremos que realizar a través de su ID, también podemos indicar una variable, donde obtendremos un True si se puedo crear un nuevo Excel o False en caso contrario.
Buenas prácticas
Retornar a una variable para validar si se pudo abrir de forma correcta o no y con eso tomar una decisión a través del comando IF.
Ejemplo:
Abrir archivo
Nos permite abrir un archivo Excel existente, debemos indicar la ruta donde se encuentra, y al igual que el comando anterior también podemos indicar un Identificador en el caso que necesitemos abrir más de un archivo, además de la variable donde obtendremos un True si se pudo abrir de forma correcta, o un False en caso contrario.
Buenas prácticas
Retornar a una variable para validar si se pudo abrir de forma correcta o no y con eso tomar una decisión a través del comando IF.
Ejemplo:
Guardar Archivo
Este comando guarda el archivo excel en la ruta que especifiquemos (usando el botón buscar o pasando una variable), es posible guardar el resultado de la operación en una variable, donde obtendremos un True si fue exitosa o un False en caso contrario.
Buenas prácticas
Retornar a una variable para validar si se pudo guardar de forma correcta o no y con eso tomar una decisión a través del comando IF.
Ejemplo:
Contar Filas
Este comando nos permite obtener la cantidad total de filas con información del archivo Excel. Por defecto contará las filas de la primera hoja, si necesitamos trabajar con otra, primero debemos cambiarnos con el comando Cambiar de Hoja.
Considerar que sólo contará la cantidad en la columna A, por lo tanto si necesitamos cambiar de columna podemos utilizar el comando Contar Filas del módulo Advanced Excel.
Buenas prácticas
Siempre luego de Abrir un archivo Excel, debemos contar la cantidad de filas que tiene, ya que en el caso de que la cantidad sea variable, es decir, en otra ocasión el archivo tenga más o menos filas tendríamos que estar modificando el comando Obtener celdade forma manual, lo cual no es óptimo, por lo tanto siempre se debe trabajar con una variable que contenga la cantidad de filas.
Obtener celda
Este comando nos permite obtener una celda o un rango de celdas y almacenar la información en una variable, al obtener un rango nos devolverá una lista o una lista de listas.
Buenas prácticas
Cuando trabajamos con un rango (ej: A1:F3) no debemos pasar un número fijo al final de este, sino, debemos utilizar el comando Contar Filas y asignar el valor a una variable, esta variable es la que se debe pasar al final del rango, ej: A1:F{filas}, esto en el caso de que la cantidad de datos en el Excel sea variable, para no estar modificando el comando cada vez que la cantidad de filas cambia, se debe utilizar esta buena práctica.
Cerrar Excel
Este comando cerrará todos los Excel abiertos, independientemente de si fueron abiertos por Rocketbot o no, ya que mata la aplicación de Excel.
Si se requiere cerrar solo el archivo abierto pro Rocketbot, podemos utilizar el comando Cerrar XLSX del módulo Advanced Excel.
Buenas prácticas
Una vez que dejemos de utilizar el Excel debemos cerrarlo, sino el proceso quedará abierto y al acumular demasiados podría afectar en algo el funcionamiento correcto del bot.
Logs en Rocketbot
Los logs se encuentran en la ruta: Rocketbot/logs/YYMMDD/logfile_YYMMDD_HHMMSS.log
Estructura de Logs de Rocketbot
Fecha: formato yyyy-mm-dd
Hora: formato H:M:S.f
mod/core: ej: Rocketbot, script, system
Tipo de log: ej: INFO, ERROR, EXCEPTION
Comando/módulo: ej: clcikWeb, for, alert, module — {module_name: “System++”}
Ejemplo:
Visualizar errores en Rocketbot
En el Studio, cuando un comando falle, se mostrará en color rojo y además indicará el texto del error, también podemos complementar la información revisando la consola de Rocketbot, la cual nos irá mostrando la información en tiempo real, o también revisando el archivo generado en la carpeta logs.
Si obtenemos un error en algún módulo, en la consola podremos ver la línea exacta donde ocurrió.
Ejemplo:
Recomendaciones para generar Logs.
Revisar en el momento de desarrollo todos los errores posibles ya que en el Studio la interfaz muestra todos los errores en forma gráfica. En producción no existe la interfaz de desarrollo por lo que no se muestra ningún error en forma gráfica, por lo tanto se recomienda programar acciones para reportar anomalías en las ejecuciones.
Se recomienda incluir información como Fecha, Hora, BOT, Acción y Resultado de la acción, que sean compatibles con las buenas prácticas de monitoreo y supervisión a través de visualizadores externos como Power BI, Kibana, etc. a través de correo electrónico, mensajes de texto, etc.
Robots en Paralelo
El siguiente cuadro grafica, cuándo y en qué condiciones se pueden ejecutar robots en paralelo.
Tipo de aplicación a automatizar
Posibilidad de implementar Bots en paralelo
Requisitos
Solución Alternativa
Sistemas WEB internos
SI
El sistema debe permitir correr múltiples sesiones por equipo
Sistemas WEB externos
SI
Bases de datos
SI
APIs
SI
Correo
SI
SAP con GUI Scripting
SI
Habilitar en SAP GUI Scripting y una sesión por Bot
Aplicación Java Cliente Servidor
Probable
-La aplicación debe permitir correr múltiples sesiones en la misma máquina.
-Cada BOT requiere tener una cuenta de acceso.
-La aplicación cliente debe ser una aplicación Java(basada en swing y awt) que se pueda grabar en Java Recorder
Aplicación Windows Cliente Servidor
SI
-La aplicación cliente debe permitir correr múltiples sesiones en la misma máquina.
-Cada BOT requiere tener una cuenta de acceso.
-La aplicación cliente debe ser una aplicación Windows(basada en C# o .net)que se pueda grabar con Desktop Recorder Rocketbot
Microsoft Word
SI
Solo si los BOTs trabajan sobre Archivos Word diferentes
Microsoft Excel
Si
Solo si los BOTs trabajan sobre Archivos Excel diferentes
Aplicación que obligue al uso de tratamiento de imágenes(OCR) o virtualización para su automatización
No
No se puede automatizar en paralelo sobre una misma máquina
Usar VMs sobre un mismo Servidor o equipos físicos. Con licencias individuales Onpremise S(Si requiere usar Xperience).
Escritorio Remoto
No se recomienda trabajar desde el escritorio remoto a menos que sea necesario, por ejemplo si es una web y podemos acceder desde fuera, entonces lo óptimo es realizar el bot desde nuestros computadores, si en cambio el sistema que queremos automatizar está en las dependencias del cliente, entonces tendremos que conectarnos.
Al trabajar desde un Escritorio Remoto podemos presentar lentitud en las acciones, si a esto sumamos conexión a través de alguna VPN y una velocidad de internet más lenta, entonces la lentitud puede aumentar. Esto afecta al tiempo de desarrollo de un bot, ya que al intentar mover un comando a otra posición, el delay de esta acción puede tardar.
Buenas prácticas
Si presentamos lentitud en las acciones, se recomienda primero que todo, definir bien el proceso para no estar modificando cada vez y tener que arrastrar los comandos desde el final hacia la posición deseada, también dividir aún más el flujo para trabajar con mini bots que contengan una cantidad no mayor a 40 instrucciones.
Para arrastrar comandos y empezar a subirlos, se debe posicionar entre el término del menú superior y el inicio del Dashboard (marcado en el recuadro rojo de la imagen de abajo)
Al dejar el comando en esa posición, sin soltar el mouse, empezará a hacer scroll y nuestra instrucción irá subiendo.
Y en el caso contrario, si queremos bajar una instrucción, el scroll lo realizará posicionando el comando entre el final del dashboard y el inicio del footer