Pirobits
  

Autoclicker para el botón de regalo de puntos de Twitch con Javascript

alberto avatar Alberto Sola · 8/11/2022 · 2 min

El otro día viendo Twitch.tv me di cuenta que daban puntos de bonificación tras varios minutos de visualización. Además, cada rato, sale un icono con forma de regalo que si lo pinchas, te da puntos extra.

Es satisfactorio presionarlo, y engancha, pero ¿por qué no automatizarlo?

Haciendo una búsqueda rápida en Google me salen muchas extensiones extensiones de Chrome tipo auto-clicker, pero no me fío de prácticamente ninguna extensión. Estamos ejecutando código de alguien, y le estamos permitiendo acceder a nuestro datos de navegación.

Parece una tontería, pero la seguridad es algo que cada día debería preocuparnos más. He leído ya múltiples artículos sobre extensiones que extraen datos del usuario, como contraseñas, etc.

Es la excusa perfecta para realizar un pequeño script en Javascript que lo pulse automáticamente, y de camino hacemos un poco de web scrapping, que siempre me ha divertido.

El primer paso es abrir la consola de desarrollador de tu navegador, y ejecutar la siguiente instrucción:

La consola se puede abrir con "ctrl/cmd + shift/opt + j" o desde el menú superior. Cualquier duda, Google es tu amigo 😉

Una posible solución es la siguiente función:

let a = setInterval(() => Array.from(document.getElementsByTagName('button')).filter(e => e.ariaLabel === 'Reclamar bonificación')[0]?.click(), 1000)

Desgranando la función:

  • setInterval: ejecuta una función cada X milisegundos. En este caso cada segundo.
  • Array.from: convierte el resultado de la búsqueda HTML en un array.
  • Array.filter: busca un elemento en el array que contenga el atributo "aria-label" con el valor 'Reclamar bonificación', y accedemos al primer elemento. Nota: en caso de que no encuentre un elemento porque cambie el identificador, este código fallaría.
  • HtmlElement.click: manda un evento tipo "click" al botón.

Simple y sencillo, sin necesidad de extensiones. Si en algún momento queremos pararlo, simplemente ejecutamos:

clearInterval(a)

Posibles mejoras:

  • Hacer que se inyecte automáticamente y no haya que ejecutar al función a mano tras reiniciar la pestaña/navegador.
  • La función es dependiente del idioma en el que se renderice la página, ya que depende del atributo aria label.

En este post hemos hecho un pequeño código nosotros, muy sencillo, y que nos asegura que no ejecuta código malicioso jeje. Además, ha sido divertido dedicarle unos minutos a este "reto".

¡Saludos!

Si te ha resultado útil este artículo agradecería si te suscribes a mi newsletter. Recibirás contenido exclusivo de calidad y también me ayudarás enormemente. Cada suscripción apoya el trabajo que realizo y me permite conocer mejor los temas que te interesan, de forma que puedo mejorar los conocimientos que comparto contigo.


Posts recientes