Muchos saludos a esta comunidad de software libre, quiero compartir algo que de seguro muchos han estado buscando desde que los dinosaurios se apareaban en el lago antiguamente y es manipular el mouse y teclado desde la terminal. Esto es muy útil puesto que podemos hacer pruebas de automatización para manipular el navegador por ejemplo como si estuvieramos nosotros moviendo el mouse y escribiendo con el teclado.
El inconveniente que podría suponer es la dependencia de la resolución de pantalla puesto que cambiarían las posiciones de los controles y el otro es la escala de la página web.
También alguien puede decir el cómo saber si un elemento web se cargó sin tocar el código de la página.
Bueno el truco que yo empleo para saber si se cargó algo en una página de una manera muy efectiva y más general es verificar el color de un pixel en un área donde está un control, de esta manera sé si está disponible o no, o bien en 3 áreas clave. si en esos puntos hay un color X es que está en el estado deseado. Bienvenido a la IA 2021 Amigo!!!.
Para resolver lo de la resolución yo prefiero usar coordenadas relativas a la última posición del mouse. Puedo desplazarme 20 pixeles independientes desde esta posición, pero yo prefiero resetear el punto de origen a la esquina superior izquierda de la ventana, obtener esa coordenada, luego obtengo la coordenada de donde esta el elemento web dentro de la ventana y resto por ejemplo xventesquina – xpunterosobrecontrol, eso me da la posicion relativa que debo poner y de esa manera aunque cambie la posición de la ventana o la resolución seguiremos usando la misma referencia.
Debemos instalar xdotool.
apt install xdotool
-Para obtener el WID de una ventana buscando por lo que dice en su barra de títulos.
wid=$(xdotool search –sync –name «firefox»)
-Activar esa ventana
xdotool windowactivate $wid;
-Enfocar esa ventana
xdotool windowfocus $wid
-Obtener posX y posY de ventana, esquina superior izquierda.
POSX=$(xdotool getactivewindow getwindowgeometry|grep Pos|cut -d»:» -f2|cut -d» » -f2|cut -d»,» -f1)
POSY=$(xdotool getactivewindow getwindowgeometry|grep Pos|cut -d»:» -f2|cut -d» » -f2|cut -d»,» -f2)
-Moverse a una posición 428,304 desde esa esquina y de paso dar 1 click.
xdotool mousemove –sync $POSX $POSY
xdotool mousemove_relative –sync 428 304 click 1
-Podemos teclear algo si lo deseamos.
xdotool type «Deja de verme así.»
-Podemos dar enter si queremos para entrar el dato en la web
xdotool key Return
-O F5 para recargar la página.
xdotool key F5
Esto es un resumen pero ya con esto puede soñar lo que desee porque puede controlar cualquier aplicación, podría ser un diseñador de revistas automatizado que use libreoffice y cambie las imágenes y los artículos por tí.
Conozco selenium pero desde C no encontré mucha referencia.
Selenium depende de los XPats de los elementos y los tags por ejemplo que son más susceptibles a cambio, por ejemplo un problema común es con los sitios que generan nombres dinámicos que cambian al recargar la página y se hace engorroso seleccionar el elemento, esto dejaría el script con selenium inutilizable rápidamente puesto que depende de la estructura interna de la página. Puede que esta solución más visual dure más tiempo en uso.