Buscar y click en coordenadas variables

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

romo64
Posts: 3
Joined: 26 Jan 2023, 16:58

Buscar y click en coordenadas variables

02 Aug 2023, 14:58

Buenos días gente, hoy me encuentro realizando una pequeña y sencilla automatización, donde estoy trabajando sobre una página web X, y cada tanto tengo que hacer click en un botón pequeño.
Al principio lo resolví fácil dándole unas coordenadas x e y, y de hecho funcionó muy bien. Dejo abajo el codigo que use:

Code: Select all

^<::	; Ctrl+<
	MouseGetPos X, Y ;
	Click, 220, 315 ;
	Mousemove, %X%, %Y% ;
	Return

^+<::	; Ctrl+Shift+w
	MouseGetPos X, Y ;
	Click, 240, 275 ;
	Mousemove, %X%, %Y% ;
	Return
Pero resulta que uno de esos botones, es cambiante en sus coordenadas, dado que está posterior a un texto que puede ser o más largo o más corto y me cambia de posición dicho botón.
Ahora bien, se que tal botón tiene un ID llamado por ej "document-info-serie" Entonces pienso que sería más certero buscar ese ID en el navegador que uso (Chrome) y hacer click sobre tal coordenada.
Soy nuevo en este lenguaje y no conozco del todo su estructura y formas de vinculación con navegadores. Me seria de mucha ayuda si me dan alguna idea de como poder hacer esto.

Desde ya muchas gracias.



Edito:
Aun sigo sin poder resolverlo, pero de momento uso ese script de arriba, y por ahora tengo un inconveniente. Cuando coincide con el boton en la web, hace el clik y funciona pero a su vez me abre una nueva pestaña con la indicacion de boton. Como si fuera tambien el click de la rueda del mouse. intente con Click, Left. Pero hace lo mismo. Alguien tiene alguna idea de como hacer para que eso no suceda?
Gracias !
User avatar
ositoMalvado
Posts: 183
Joined: 24 Dec 2019, 12:02
Contact:

Re: Buscar y click en coordenadas variables

09 Aug 2023, 13:21

En el Chrome que uses, haz click izquierdo sobre el acceso directo del programa, pon propiedades y en Destino, al final del texto colocas lo siguiente

Code: Select all

 --remote-debugging-port=9222 --remote-allow-origin
Aplicar y luego Aceptar. Cierra y abre Chrome

Utilizando la librería Chrome [Releases] [Click derecho + Guardar], podrás interceptar una pestaña y trabajar sobre ella inyectando JS.


Te doy un ejemplo del codigo AHK, con "c" y "g" del teclado activaras 2 funciones diferentes para que puedas entender:

Ten en cuenta que es AHK v1

Code: Select all

#SingleInstance, force
#Include, Chrome.ahk
;IMPORTAR LIBRERÍA Chrome.ahk 
;Releases: https://github.com/G33kDude/Chrome.ahk/releases
;Versión actual: https://github.com/G33kDude/Chrome.ahk/releases/download/1.3.0/Chrome.ahk
;
;Créditos G33kDude por la librería para manejar Chrome desde AHK

global elemento_y_clickear ;hacemos global nuestro js que queremos inyectar
elemento_y_clickear = ;ahora le asignamos un valor de JS
( 
mivalor = "Hola desde JS inyectado";
alert("trabajando");
if (document.getElementById("document-info-serie"))
    document.getElementById("document-info-serie").click();
)
global mi_pagina:="Google" ;buscamos la pagina por titulo/nombre o fragmento del nombre

;ASIGNAMOS mi_pagina ahora a la pagina que encontrara Chrome
mi_pagina:=Chrome.GetPageByTitle(mi_pagina)
If !IsObject(mi_pagina){ ;si no existe 
    MsgBox,, Error, La página no se encontró, 500 ;error y reload script
    Reload
}
Return ;inicialización finalizada

;PRESIONA
C:: ;CON LA LETRA C ejecutaras el JAVASCRIPT DEFINIDO MÁS ARRIBA
    mi_pagina.Evaluate(elemento_y_clickear) ;inyectamos el codigo JS asignado en la variable
    MsgBox, % mi_pagina.Evaluate("mivalor").value ;para obtener valor asignado a una variable en JS
Return

;PRESIONA
G:: ;CON LA LETRA G te hice un ejemplo para que puedas ver la versatilidad de AHK + CHROME
    ejemplo_js = ;en este caso definimos el js sin ser global, se puede hacer de ambas manera dependiendo la situación
    (
    if(!document.querySelector("#miBoton")){
        const button = document.createElement("button");
        button.textContent = "Mi Botón";
        button.id = 'miBoton';
        button.style.position = "fixed";
        button.style.top = "20px";
        button.style.right = "-50px";
        button.style.padding = "10px 20px";
        button.style.backgroundColor = "#3498db";
        button.style.color = "white";
        button.style.border = "none";
        button.style.borderRadius = "5px";
        button.style.boxShadow = "0px 0px 10px rgba(0, 0, 0, 0.3)";
        button.style.cursor = "pointer";
        button.style.zIndex = "9999";
        button.style.transition = "right 0.3s ease-in-out";
        function toggleButton() {
            if (button.style.right === "0px") {
                button.style.right = "-50px";
            } else {
                button.style.right = "0px";
            }
        }
        button.addEventListener("click", () => {
            alert("Haz hecho funcionar un botón creado desde AHK!!!")
        });

        button.addEventListener("mouseover", () => {
            button.style.right = "0px";
        });

        button.addEventListener("mouseout", () => {
            button.style.right = "-50px";
        });
        document.body.appendChild(button);
    }
    )
    mi_pagina.Evaluate(ejemplo_js)
Return
My WEB some useful stuff

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 5 guests