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.

Video de ayuda Buenas Prácticas:

Robot

Buenas prácticas

Descripción en Comandos

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_casecamelCase o PascalCase.

Variables

Nombre de Variables

En la definición de variables nunca se deben utilizar espaciosñ, o caracteres especiales, en caso de utilizar palabras compuestas se pueden utilizar guiones bajos o comenzar la siguiente palabra con Mayúscula como por ejemplo: snake_casecamelCase 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:

                        1.  

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:

1 Revisar métodos de string

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 (HIJO2HIJO3), 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.
                        1.  

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.

Los drivers los puedes encontrar en https://www.seleniumhq.org/download/

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.

Chrome: https://chromedriver.chromium.org/downloads
Mozilla: https://github.com/mozilla/geckodriver/releases/tag/v0.29.0

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ón Esperar 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 Objeto al 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 Objeto y 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_mailque tome el archivo y lo envíe por mail.

Robot “padre”:

      1. Abre el navegador con una URL específica.
      2. Maximiza la ventana.
      3.  Ejecuta un robot hijo (hijo_descarga).
      4. Cierra el navegador.
                        1.  

Variables:

N/A

Robot “hijo_descarga:

      1. Cuenta la cantidad de archivos existentes en la carpeta de Descarga.
      2. Realiza click en el botón Descargar de la página abierta.
      3. Espera hasta que la descarga haya finalizado.
      4. Ejecuta un robot hijo (hijo_mail)
                        1.  

Variables:

Robot “hijo_mail:

      1. Configura un correo Gmail.
      2. Envía un correo adjuntando el archivo descargado en el robot anterior (utilizando la variable {path} del robot hijo_descarga).
                        1.  

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í Mover Mouse, 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:

      1. Comandos nativos y/o módulos para Web, Office, Email, Base de datos, SAP, FTP, Archivos, etc.
      2. 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:
        1. 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.
        2. 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.
        3. 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.

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:

      1. Abrir el terminal e ir a la ruta indicada en el error, ej:
        cd /Users/usuario/Desktop/Rocketbot/drivers/mac/tesseract
      2. Escribir el comando ls-l para visualizar los permisos.
      3. 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 -l para 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.

2Filtros de email

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.

3Filtros de email

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

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


 




CÓMO HABILITAR LAS APLICACIONES POCO SEGURAS EN GMAIL

Para poder enviar y recibir correos en Gmail desde Rocketbot, es necesario habilitar el acceso a aplicaciones poco seguras, para esto, se realizan los siguientes pasos:

1.- Dar click en la imagen de tu cuenta de Gmail.

2.- Luego dar click en “Cuenta de Google

3.- Click en “Seguridad

4.- Ir al apartado  “Acceso de aplicaciones poco seguras” y dar click en “Activar acceso

5.- Finalmente activar “Permitir el acceso de aplicaciones poco seguras




TIPS COMANDOS ROCKETBOT

FECHAS

MODIFICAR FORMATO DE UNA FECHA CON PYTHON

Variable: fecha: 2019-04-01

Comando "Asignar Variable": 

datetime.strptime("{fecha}", '%Y-%m-%d').strftime('%d.%m.%Y')

Resultado: 01.04.2019


MODIFICAR FORMATO DE UNA FECHA CON JAVASCRIPT

Variable: fecha

Comando "Ejecuta JS":

fecha = "06/12/2018"
fecha = fecha.split("/").reverse().join("");
return fecha;


FECHA DE HOY CON FORMATO

Comando “Asignar Variable”

datetime.now().strftime("%d/%m/%Y %H:%M:%S")

Obtener el día actual (número)

datetime.today().weekday()

Lunes = 0
Martes = 1
Miércoles = 2
Jueves = 3
Viernes = 4
Sábado = 5
Domingo =6

 


RESTAR DOS HORAS

 

Comando "Asignar Variable":

 

datetime.strptime("{hora1}", "%H:%M:%S") - datetime.strptime("{hora2}", "%H:%M:%S")

 

 

 


ÚLTIMO DÍA DEL MES CON SCRIPT PYTHON

Variables:

Archivo last_day.py

Con GetVar estamos trayendo la información de las variables "mes" y "anio" que tenemos declaradas en Rocketbot.

Con SetVar estamos seteando a la variable "resultado" que tenemos declarada en Rocketbot, el valos que nos entrega calendar.monthrange.

 

Resultado:


DÍA LABORAL ANTERIOR

Comando "Asignar Variable":

datetime.today() - timedelta(days={days_delta}[datetime.today().weekday()])

variable:
time_delta =
[2,3,1,1,1,1,1]


OMITIR ALERT DEL NAVEGADOR POR JS

Comando "Ejecuta JS":

alert = function(a){console.log(a)}

opción 2:
alert = console.log


SEPARAR LETRAS Y NÚMEROS DE VARIABLE

Variables de ejemplo

var = 1234567MANDATO
var_num -> donde se guardarán los números
var_letras -> donde se guardaran las letras

Validar si es dígito:

Validar si es letra:

Resultado:

 


DEJAR SOLO EL NÚMERO

Variables:

Comando "Asignar variable":

"".join([ b for b in "{valor}"  if b.isdigit() ])

 

Resultado:

 


LEER UN ARCHIVO .TXT Y ASIGNARLO A UNA VARIABLE

Comando "Asignar Variable":

open("C:/Users/User/Desktop/archivo.txt").read()

Resultado:


ELIMINAR ACENTOS

Tenemos una variable con acento (var), en este caso pasaremos el resultado a var2 para ver el cambio, pero se podría pasar directamente a la misma variable.

Variables:

Comando "Asignar Variable":

unicodedata.normalize('NFKD', "{var}").encode("ascii", "ignore").decode()

Resultado:


OMITIR VENTANA DE CONFIRMACIÓN DEL NAVEGADOR

Comando "Ejecuta JS":

window.confirm = function () { return true }

O con el módulo: AcceptAlert


MODIFICAR DATOS DE UN ARRAY

Variable con Array:

 

Modificar posición 1 ("Mantenedores") por la palabra "nuevo_valor"

Comando "Asignar Variable":

Se indica que primero tome desde la posición 0 a la 1 (se excluye el valor de la posición 1, 'Mantenedores'), luego que agregue "nuevo_valor" y que continúe desde la posición 2 en adelante y se asigna a la variable "dato" .

Resultado:


CREAR ARRAY Y AÑADIR VARIABLES

Crear variable con []

Comando "Asignar Variable":

{array}.__add__(["{dato1}","{dato2}"])

 

Resultado:

Otra forma:{array} + ["{dato1}","{dato2}"]


ELIMINAR DATOS DE ARRAY 

 

Comando Asignar Variable

*Eliminar datos de un array indicando la posición:

Resultado:

 

*Eliminar datos de un array indicando el valor:

 

 

Resultado:

 

 


ABRIR “EJECUTAR” DE WINDOWS

 

Comando "Enviar Tecla":

^{ESC} Ejecutar {ENTER}

 

Resultado:

 

O con el módulo: Enviar Teclas Predefinidas


SETEAR UN ATRIBUTO A UN ELEMENTO

 

Comando "Ejecuta JS":

document.getElementsByClassName("r4nke ")[10].setAttribute("tag","prueba")


DAR CLICK A UN ELEMENTO POR SU QUERYSELECTOR

 

Comando "Ejecuta JS":

document.querySelectorAll('[data-date="20190529"]')[0].click()

ó

document.querySelector('[data-date="20190529"]').click()


MARCAR UN CHECKBOX POR SU ÍNDICE

 

Comando "Ejecuta JS":

$("input[type=checkbox]").eq(0).prop("checked",true);

MARCARLOS TODOS:

$("input[type=checkbox]").prop("checked",true);

DESMARCARLOS TODOS:

$("input[type=checkbox]").prop("checked",false);

DAR CLICK A TODOS (MARCA Y DESMARCA):

$(":checkbox").click();

DAR CLICK AL ÚLTIMO:

$(":checkbox").last().click();


SABER SI UN CHECKBOX ESTÁ MARCADO O NO

Inspeccionar el checkbox:

Obtener el selector:

Click derecho -> copiar -> copiar selector

 

Comando "Ejecuta JS":

return document.querySelector('SELECTOR_COPIADO').cheched

Ejemplo:

Retornar el resultado a una variable, en este caso “checkbox”, al ejecutarlo obtendremos un True o False, dependiendo de si está marcado o no

Para decodificar (sacar la b')

Resultado:

 


 

PARA MARCAR UN CHECK DEPENDIENDO DEL VALOR

 

Ejemplo:

Necesitamos marcar el checkbox si la fecha es igual a "2019-07-02"

Comando "Ejecuta JS":

$('td:contains(2019-07-02)').last().parent().find('input').prop('checked',true).change()

 

Resultado:


CLICK EN UN BOTÓN SUBMIT

Comando "Ejecuta JS":

$(":submit").click()


GUARDAR EN UNA VARIABLE EL STATUS (RESPUESTA) DEL COMANDO EJECUTADO

 

Comando "Asignar Variable":

%rocketbot_last_status%

Ejemplo:

Abrir navegador y obtener la respuesta en la variable {res}

Resultado:


CREAR UNA CARPETA DESDE ROCKET

 

Comando "Asignar Variable":

os.mkdir("C:/el/path")


COPIAR VALOR DE UNA VARIABLE AL PORTAPAPELES

 

Comando “Asignar Variable”

Windows:

os.system("echo {variable} | clip")

MAC:

os.system("echo {variable} | pbcopy")

o con el módulo para Windows: Portapapeles


OBTENER CURRENT WORKING DIRECTORY

 

Comando “Asignar Variable”:

os.getcwd()


OBTENER NOMBRE DE ARCHIVO DE UN PATH

 

Variables:

Comando "Asignar Variable":

os.path.basename(r"{path}")

Resultado:


COMANDO DETENER

 

El comando Detener, si está en un hijo, detendrá ese Robot y continuará con los pasos del Padre.

Si está dentro de un if detiene el if y todo el robot.


CUANDO HAY EVENTOS CHANGE Y NECESITAMOS ACTIVAR EL CAMBIO DEL VALOR

Ejemplo:

*Por ejemplo esta fecha, al cambiar el value con JS lo modificaba pero no “activaba” la búsqueda, para eso, podemos realizar lo siguiente con JQuery y utilizar change():

 

Comando "Ejecuta JS":

$('input[class="form-control ng-pristine ng-untouched ng-valid ng-isolate-scope ng-valid-required ng-valid-date"]').val('{fecha}').change()


REQUEST API

 

Si se realiza un GET en un script Python y arroja este error:

 

('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

 

En el Script se debe agregar el "User-Agent":

 

headers = {

   'User-Agent': 'My User Agent 1.0',

}

data = requests.get(URL_, headers=headers)

data = data.json()


MINIMIZAR TODO PARA MOSTRAR EL ESCRITORIO (WINDOWS)

 

Comando "Enviar Tecla":

{VK_LWIN down}D{VK_LWIN up}

o con el módulo: Enviar Teclas Predefinidas


EN EXCEL AL OBTENER CELDA CON NÚMEROS LOS TRAE COMO FLOAT

Validar si termina en .0 para hacer un "replace"

 

Validamos si la respuesta en {var2} es True, y si es reemplazamos el .0 por nada

 

Secuencia:


VALIDAR CONEXIÓN A INTERNET

 

Comando "Ejecuta JS":

return navigator.onLine

 

Devuelve True o False.


REALIZAR SCROLL

 

Comando "Ejecuta JS"

window.scrollTo(0,500);

*500 px horizontalmente

o con el módulo: WebPro


OBTENER EL TOTAL DE FILAS DE UNA TABLA

 

Comando "Ejecuta JS":

document.getElementsByClassName('tabla_indicadores')[4].getElementsByTagName("tr").length;

*Donde tabla_indicadores es la clase de la tabla de la cual queremos obtener las filas.


SELECCIONAR UNA OPCIÓN DE UN SELECT EN BASE A UNA VARIABLE

 

Comando "Ejecuta JS":

$(‘span:contains({var})’).click()


ENVIAR EMAIL CON ACENTOS DESDE UN ROBOT HIJO

 

Para los tildes y eñes, deberíamos colocar el texto según estas opciones:

á -> á

é -> é

í -> í

ó -> ó

ú -> ú

ñ -> ñ

 

Ejemplo con el módulo del Gmail:

Correo:


ELIMINAR LOS NONE DE UNA LISTA

 

En Script Python:

 

test_list = [1, None, 4, None, None, 5, 8, None] 

# printing original list  

print ("The original list is : " + str(test_list))  

# to remove None values in list 

res = [] 

for val in test_list: 

    if val != None : 

        res.append(val)


Modificar texto para que empiece con letra mayúscula:

Comando: "Asignar Variable"

Resultado:




CREAR TAREA PROGRAMADA (Task Scheduler)

Requisito: Contar con licencia de producción.

Desde el entorno gráfico Windows

1.- Crear un .bat con la ruta donde está instalado Rocketbot, seguido de la instrucción -start= más el nombre del robot a ejecutar, ejemplo:

Archivo robot.bat:

cd C:\ruta\rocketbot\
rocketbot.exe -start=nombre_del_robot

 2.- Abrir Task Manager

3.- Clickear “Create Task” para crear una nueva tarea

4.- En “Name”, colocar el nombre que tendrá la tarea y marcar “Run with highest privileges”.

5.- Vamos a la pestaña “Triggers” y presionamos en “New”.

6.- Esto abrirá la siguiente ventana, donde en “Settings” configuramos cada cuanto queremos que se ejecute la tarea (una vez, diariamente, etc) y en “Start” ponemos la fecha de inicio y la hora en que queremos que se ejecute.

7.- Luego ir a la pestaña “Actions” y dar click en “New

8.-  Esto abrirá la siguiente ventana, donde en “Program/Script”, buscamos el archivo .bat que creamos al inicio y presionamos “OK”

**Esto creará la tarea y aparecerá en el listado del Task Manager:

 

Si existieran problemas al iniciar el bot con la tarea programada, por ejemplo de que no encuentra la ruta a algún módulo o error de licencia, revisar lo siguiente:

 

Desmarcar “Ejecutar con los privilegios más altos”

 

En Acciones -> Editar

Agregar la ruta de Rocketbot en la opción “Iniciar en:”

 

 

Desde la CMD

  1. Abrir la CMD como administrador
  2. Escribir el siguiente comando:
    SCHTASKS /CREATE /SC <DATE> /TN "FOLDERPATH\TASKNAME" /TR "C:\SOURCE\FOLDER\APP-OR-SCRIPT" /ST HH:M

    donde <DATE> debes reemplazarlo por:

    1. Diario: DAILY
      SCHTASKS /CREATE /SC DAILY /TN "MyTasks\Notepad task" /TR "C:\Windows\System32\notepad.exe" /ST 11:00
    2. Semanal:  WEEKLY /D DIA
      SCHTASKS /CREATE /SC WEEKLY /D SUN /TN "MyTasks\Notepad task" /TR "C:\Windows\System32\notepad.exe" /ST 11:00
      
    3. Mensual: MONTHLY /D DIA
      SCHTASKS /CREATE /SC MONTHLY /D 15 /TN "MyTasks\Notepad task" /TR "C:\Windows\System32\notepad.exe" /ST 11:00
  3. Si deseas que la tarea programada se ejecute para un usuario específico, agregar al final lo siguiente:
    /RU USER-ACCOUNT


    Ejemplo:

    SCHTASKS /CREATE /SC DAILY /TN "MyTasks\Notepad task" /TR "C:\Windows\System32\notepad.exe" /ST 11:00 /RU admin
  4. Puedes encontrar más información de los comandos aquí: How create task using task scheduler command prompt

 

MacOs y Linux

  1. Crear un .sh con la ruta donde está instalado Rocketbot, seguido de la instrucción -start= más el nombre del robot a ejecutar, ejemplo:Archivo robot.sh:cd user/ruta/rocketbot/
    rocketbot -start=nombre_del_robot
  2. Abrir la terminal y ejecutar crontab -e. Esto debería abrir un archivo en vim. Ahí es donde se listarán las tareas programadas.
  3. En la pantalla de vim, presionar la tecla i para insertar un nuevo cronjob y colocar 0,15,30,45 * * * * cd ~/.carpeta && ./robot.sh, donde los primeros números representan la fecha en un formato que puedes crear acá crontab.guru
  4. Presionar la tecla esc y luego escribir :wq y listo! ya tienes tu tarea programada.



TIPS VIRTUALIZACIÓN

Estos son algunos casos donde los click en imagen por ejemplo no funcionen correctamente, por lo tanto se debe revisar resolución o ejecutar Rocketbot como administrador.

1.- Si no realiza los click en las imágenes.

Instalar lo siguiente:

.NET Framework: https://dotnet.microsoft.com/download/dotnet-framework

Visual C++: https://support.microsoft.com/es-es/help/2977003/the-latest-supported-visual-c-downloads

Revisar:

Si la configuración de pantalla está aumentada, dejarla al 100% y probar


 

Importante: Si se realizan cambios de escala, 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 dos íconos iguales en las pestañas del navegador y en este caso queremos hacer click en la segunda, debemos especificar una referencia, sino hará click en la primera coincidencia.
Entonces para especificar nuestro click identificamos una referencia cercana:*En este caso vemos que la palabra “Ayuda” está cerca de la pestaña a la cual queremos hacerle click, por lo que la dejaremos como Referencia, y el ícono lo especificamos como foco (donde hará el click), con esto ya realizará el click donde queremos.

 

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 imagenes y es un Windows Enterprise (win 7 o win 10), revisar si está la siguiente .dll sino, agregarla:

 

DLL: api-ms-win-downlevel-shlwapi-l1-1-0.dll

 

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 revisar:

Que no esté habilitada la opción de cambiar el nivel de escala:

Adicional a esto verificar que este instalada las características dentro de “Interfaz de usuario e Infraestructura” en especial y en especial “Experiencia de escritorio”:

En MAC

Permiso denegado al hacer OCR

  1. Abrir el terminal e ir a la ruta indicada en el error, ej:
    cd /Users/usuario/Desktop/Rocketbot/drivers/mac/tesseract
  2. Escribir el siguiente comando para visualizar los permisos:
    ls -l
    
  3. Veremos que en este caso no tiene permisos de ejecución:

  4. Le damos los permisos con el siguiente comando:
    ejecución para todos los usuarios: chmod 777 tesseract
    ejecución solo para el owner: chmod 744 tesseract
    

  5. Volvemos a ejecutar un ls -l para revisar los cambios:

  6. Ahora ejecutamos nuevamente el comando de OCR




Codificación y decodificación de Caracteres

En Rocketbot es posible codificar y decodificar los caracteres y textos que se obtienen como resultado de una automatización.

Es importante seleccionae la codificación correcta debido a que Rocketbot esta basado en Python, siendo el mas utilizado Latin-1 para caracteres cono acento, ñ o simbolos usados en hablahispana.

Para utilizarlos desde un comando de asignar variables por ejemplo se puede utilizar {my_var}.decode(“latin-1”)

Codec Aliases Languages
ascii 646, us-ascii English
big5 big5-tw, csbig5 Traditional Chinese
big5hkscs big5-hkscs, hkscs Traditional Chinese
cp037 IBM037, IBM039 English
cp273 273, IBM273, csIBM273

German

New in version 3.4.

cp424 EBCDIC-CP-HE, IBM424 Hebrew
cp437 437, IBM437 English
cp500 EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500 Western Europe
cp720 Arabic
cp737 Greek
cp775 IBM775 Baltic languages
cp850 850, IBM850 Western Europe
cp852 852, IBM852 Central and Eastern Europe
cp855 855, IBM855 Bulgarian, Byelorussian, Macedonian, Russian, Serbian
cp856 Hebrew
cp857 857, IBM857 Turkish
cp858 858, IBM858 Western Europe
cp860 860, IBM860 Portuguese
cp861 861, CP-IS, IBM861 Icelandic
cp862 862, IBM862 Hebrew
cp863 863, IBM863 Canadian
cp864 IBM864 Arabic
cp865 865, IBM865 Danish, Norwegian
cp866 866, IBM866 Russian
cp869 869, CP-GR, IBM869 Greek
cp874 Thai
cp875 Greek
cp932 932, ms932, mskanji, ms-kanji Japanese
cp949 949, ms949, uhc Korean
cp950 950, ms950 Traditional Chinese
cp1006 Urdu
cp1026 ibm1026 Turkish
cp1125 1125, ibm1125, cp866u, ruscii

Ukrainian

New in version 3.4.

cp1140 ibm1140 Western Europe
cp1250 windows-1250 Central and Eastern Europe
cp1251 windows-1251 Bulgarian, Byelorussian, Macedonian, Russian, Serbian
cp1252 windows-1252 Western Europe
cp1253 windows-1253 Greek
cp1254 windows-1254 Turkish
cp1255 windows-1255 Hebrew
cp1256 windows-1256 Arabic
cp1257 windows-1257 Baltic languages
cp1258 windows-1258 Vietnamese
cp65001

Windows only: Windows UTF-8 (CP_UTF8)

New in version 3.3.

euc_jp eucjp, ujis, u-jis Japanese
euc_jis_2004 jisx0213, eucjis2004 Japanese
euc_jisx0213 eucjisx0213 Japanese
euc_kr euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001 Korean
gb2312 chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58 Simplified Chinese
gbk 936, cp936, ms936 Unified Chinese
gb18030 gb18030-2000 Unified Chinese
hz hzgb, hz-gb, hz-gb-2312 Simplified Chinese
iso2022_jp csiso2022jp, iso2022jp, iso-2022-jp Japanese
iso2022_jp_1 iso2022jp-1, iso-2022-jp-1 Japanese
iso2022_jp_2 iso2022jp-2, iso-2022-jp-2 Japanese, Korean, Simplified Chinese, Western Europe, Greek
iso2022_jp_2004 iso2022jp-2004, iso-2022-jp-2004 Japanese
iso2022_jp_3 iso2022jp-3, iso-2022-jp-3 Japanese
iso2022_jp_ext iso2022jp-ext, iso-2022-jp-ext Japanese
iso2022_kr csiso2022kr, iso2022kr, iso-2022-kr Korean
latin_1 iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1 West Europe
iso8859_2 iso-8859-2, latin2, L2 Central and Eastern Europe
iso8859_3 iso-8859-3, latin3, L3 Esperanto, Maltese
iso8859_4 iso-8859-4, latin4, L4 Baltic languages
iso8859_5 iso-8859-5, cyrillic Bulgarian, Byelorussian, Macedonian, Russian, Serbian
iso8859_6 iso-8859-6, arabic Arabic
iso8859_7 iso-8859-7, greek, greek8 Greek
iso8859_8 iso-8859-8, hebrew Hebrew
iso8859_9 iso-8859-9, latin5, L5 Turkish
iso8859_10 iso-8859-10, latin6, L6 Nordic languages
iso8859_11 iso-8859-11, thai Thai languages
iso8859_13 iso-8859-13, latin7, L7 Baltic languages
iso8859_14 iso-8859-14, latin8, L8 Celtic languages
iso8859_15 iso-8859-15, latin9, L9 Western Europe
iso8859_16 iso-8859-16, latin10, L10 South-Eastern Europe
johab cp1361, ms1361 Korean
koi8_r Russian
koi8_t

Tajik

New in version 3.5.

koi8_u Ukrainian
kz1048 kz_1048, strk1048_2002, rk1048

Kazakh

New in version 3.5.

mac_cyrillic maccyrillic Bulgarian, Byelorussian, Macedonian, Russian, Serbian
mac_greek macgreek Greek
mac_iceland maciceland Icelandic
mac_latin2 maclatin2, maccentraleurope Central and Eastern Europe
mac_roman macroman, macintosh Western Europe
mac_turkish macturkish Turkish
ptcp154 csptcp154, pt154, cp154, cyrillic-asian Kazakh
shift_jis csshiftjis, shiftjis, sjis, s_jis Japanese
shift_jis_2004 shiftjis2004, sjis_2004, sjis2004 Japanese
shift_jisx0213 shiftjisx0213, sjisx0213, s_jisx0213 Japanese
utf_32 U32, utf32 all languages
utf_32_be UTF-32BE all languages
utf_32_le UTF-32LE all languages
utf_16 U16, utf16 all languages
utf_16_be UTF-16BE all languages
utf_16_le UTF-16LE all languages
utf_7 U7, unicode-1-1-utf-7 all languages
utf_8 U8, UTF, utf8 all languages
utf_8_sig all languages



Ejecutar archivo Python

Scripts \ Ejecutar archivo Python

Con este comando podrás abrir y ejecutar archivos Python (.py) dentro de la plataforma. Tiene las librerías más usadas para RPA (Robotic Process Automation) ya disponibles, pero si necesitas instalar alguna en particular debes hacerlo de forma local en la siguiente ruta: Rocketbot/modules/libs

Importante:
Para ejecutar el archivo este comando usa el interprete de Python instalado en tu sistema, por lo que debes tenerlo instalado. Además usa un scope distinto al de Python tradicional, por lo que las variables y librerías que uses en funciones debes importarlas nuevamente dentro de la función.

Datos de entrada Descripción Ejemplo
Ruta a archivo PY Ruta al archivo .py que se desea ejecutar C:/users/user/documents/example.py

💡Nota:
Este comando no retorna ninguna salida o resultado. Si necesitas retornar un valor a una variable de Rocketbot, puedes usar la función SetVar() que recibe dos parámetros, el primero es el nombre de la variable de Rocketbot donde obtendrás el resultado, y el segundo es el valor que deseas asignar a dicha variable. Ejemplo: SetVar(“variable_rocketbot”, variable_python)

Imagen de ejemplo

Video de Curso RPA comando Ejecutar archivo Python



Last post

[frontpage_news widget=”318″ name=”Last Post”]




Fecha con Formato

Darle fecha actual y formato a una variable

Para obtener la fecha correcta en una variable y darle formato a la fecha con el siguiente código:

[datetime.utcnow() – timedelta(hours=5)][0].strftime(‘%H:%M %p’)

En este código le extraemos 5 horas a la fecha UTC y le damos el formato obteniendo como resultado una fecha parecida a:20:23 PM

 




Trabajar con internet Explorer.

Para trabajar con internet explorer se debe configurar el navegador previamente.

Fuente: https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

Required Configuration

  • The IEDriverServer exectuable must be downloaded and placed in your PATH.
  • On IE 7 or higher on Windows Vista or Windows 7, you must set the Protected Mode settings for each zone to be the same value. The value can be on or off, as long as it is the same for every zone. To set the Protected Mode settings, choose “Internet Options…” from the Tools menu, and click on the Security tab. For each zone, there will be a check box at the bottom of the tab labeled “Enable Protected Mode”.
  • Additionally, “Enhanced Protected Mode” must be disabled for IE 10 and higher. This option is found in the Advanced tab of the Internet Options dialog.
  • The browser zoom level must be set to 100% so that the native mouse events can be set to the correct coordinates.
  • For Windows 10, you also need to set “Change the size of text, apps, and other items” to 100% in display settings.
  • For IE 11 only, you will need to set a registry entry on the target computer so that the driver can maintain a connection to the instance of Internet Explorer it creates. For 32-bit Windows installations, the key you must examine in the registry editor is HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE. For 64-bit Windows installations, the key is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE. Please note that the FEATURE_BFCACHEsubkey may or may not be present, and should be created if it is not present. Important:Inside this key, create a DWORD value named iexplore.exe with the value of 0.

Others Errors:

  • It throws an error like this when trying to open the browser with IE

To work with IE we need to make the following configurations:

Go to the Rocketbot folder and copy the 32bit driver to the 64bit driver folder.

drivers\win\ie\x86\IEDriverServer.exe to drivers\win\ie\x64\IEDriverServer.exe

After that, we must go to the IE browser, Settings->Internet Options->Security

 

 

 

 

 

 

 

 

 

 

 

All options must be set to the lowest level that allows and disable “Protected Mode“.