Consulta sobre programacion (bot para navegador)

Hola, no sabia en que lugar del foro crear este hilo, si no es el adecuado por favor reportadlo para que lo muevan.

Tengo conocimientos de programacion pero estan algo obsoletos y me gustaria saber como con que lenguaje de programacion o entorno de desarrollo puedo conseguir esto que quiero, o incluso si puedo hacerlo con el mismo navegador:

Estoy jugando desde hace unos años a un juego de navegador y como me come mas tiempo del que me gustaria llevo un tiempo pensando en hacer un bot que juegue por mi, sobre todo la parte de recoger recursos, pense en leer el codigo fuente, pero es minusculo limitandose solo a llamadas a procedimientos javascript y otros donde esta el autentico meollo de la web, pero he averiguado que usando el inspector de Firefox (Mayus+F5) puedo ver el codigo real del juego y los datos que necesito, entonces necesito extraer esos datos, analizarlos (para ver por ejemplo si tengo bastantes recursos para construir, y en su caso iniciar la construccion mandando la orden) he localizado la linea de codigo en el inspector donde salen los recursos y el enlace donde iniciar la construccion, por lo que necesito esos datos, he pensado varias cosas desde hacer un navegador personalizado con esa funcion o incluso que puede haber alguna extension de firefox o chrome que haga lo que quiero, o incluso el propio inspector de firefox tiene alguna opcion para extraer esos datos.

Si sabeis algun otro foro mas especializado, aunque sea en ingles donde puedan resolverme esta duda lo agradezco.
Te instalas Violentmonkey y creas un script nuevo para la página en cuestión.

Solo es necesario tener el navegado abierto y el bot va haciendo sus cosas.
Yo uso kantu (extensión chrome/ firefox) para varias tareas repetitivas.

Está basado en php, aunque tiene comandos propios también, y sobretodo es muy facil hacer el script, hasta puede basarte en un movimiento tuyo "grabando" todos los pasos, ayudando a identificar botones, etc..

Échale un ojo a ver si te sirve para tu cometido, es la forma mas fácil que veo. Éstán encima del tema, actualizan cada pocas semanas añadiendo funcionalidades y corrigiendo bugs, aunque todavía tienen uno conocido y es que la tarea se detiene sin motivo aparente, lo mismo es a los 30 minutos que a las 3h, hay que estar un poco "vigilando" por si tienes que reanudarlo, yo me lo pongo mientras hago otras cosas por ejemplo. No te serviría para dejarlo por la noche en éste caso, a no ser que de casualidad no se te presente el fallo por el tipo de web que sea o algo asi.

Saludos
@Alecs7k @alvaro101 gracias a los 2, le echare un vistazo a esos addons que me decis.

Edito: He probado los programas que habeis dicho, el kantu creo que no me sirve porque segun parece es un automatizador y necesito algo que tenga cierta inteligencia que reaccione a los datos que reciba de la pagina ya que debe leer datos, procesarlos, decidir la accion a tomar y actuar, el otro programa violentmonkey parece que se adapta mas a lo que quiero pero tambien parece mas complicado ya que lo unico que aparece es un script vacio y no tengo mucha idea de por donde empezar pense que tendria algun menu o IDE del que seleccionar que parte de la web quieres trastear o algun importador del inspector de firefox , pero supongo que me toca mirar tutoriales y darle a javascript.
daisakute escribió:@Alecs7k @alvaro101 gracias a los 2, le echare un vistazo a esos addons que me decis.

Edito: He probado los programas que habeis dicho, el kantu creo que no me sirve porque segun parece es un automatizador y necesito algo que tenga cierta inteligencia que reaccione a los datos que reciba de la pagina ya que debe leer datos, procesarlos, decidir la accion a tomar y actuar, el otro programa violentmonkey parece que se adapta mas a lo que quiero pero tambien parece mas complicado ya que lo unico que aparece es un script vacio y no tengo mucha idea de por donde empezar pense que tendria algun menu o IDE del que seleccionar que parte de la web quieres trastear o algun importador del inspector de firefox , pero supongo que me toca mirar tutoriales y darle a javascript.


Violentmonkey es exactamente eso. Para escribir scripts y modificar las webs que quieras. Para según que cosas puede llevar bastante tiempo. Mira a ver si ese existe algún tipo de script para ese juego en https://greasyfork.org/es y creas el tuyo a partir de ahí.
Si puedes especificar un poco mas igual podemos ayudarte a empezar.

Con kantu es para automatizar si, pero puedes hacer 1 loop que se repita todo el rato, y varios flujos que entren si se cumplen x condiciones.

Está basado en selenium, siendo éste una herramienta muy conocida para visualizar e interactuar con webs a través de nodeJS entre otros. Y kantu vendria a ser como una versión "lite" de ésto, con comandos útiles, pero sin tener que programar desde 0.

No tengo ni idea de lo que buscas, pero por ejemplo, el script puede ir recorriendo botones y clicar sibre él si el texto dice OK, o si el valor que aparece es superior a X cifra.

Por eso, si especificas un poco mas puedo empezarte algo, o decirte definitivamente que uses otra cosa.
alvaro101 escribió:Si puedes especificar un poco mas igual podemos ayudarte a empezar.

Con kantu es para automatizar si, pero puedes hacer 1 loop que se repita todo el rato, y varios flujos que entren si se cumplen x condiciones.

Está basado en selenium, siendo éste una herramienta muy conocida para visualizar e interactuar con webs a través de nodeJS entre otros. Y kantu vendria a ser como una versión "lite" de ésto, con comandos útiles, pero sin tener que programar desde 0.

No tengo ni idea de lo que buscas, pero por ejemplo, el script puede ir recorriendo botones y clicar sibre él si el texto dice OK, o si el valor que aparece es superior a X cifra.

Por eso, si especificas un poco mas puedo empezarte algo, o decirte definitivamente que uses otra cosa.


Conozco selenium, al menos me suena de ser de lo primero que encontre cuando buscaba informacion sobre como hacer lo que quiero, no puedo dar informacion sobre el juego en cuestion ya que como casi todos los juegos, es ilegal usar bots y en este en particular los admin son especialmente insidiosos de todas formas lo que si puedo hacer es poner el codigo que quiero leer que esta todo contenido en llamadas a javascript.

Por ejemplo el codigo web si le das a ver codigo fuente es solo un breve html con las imagenes un par de metas y llamadas a un par de anucios de otros juegos de misma compañia y lo importante un par de llamadas a game.js y resources.js que es donde supongo que anda el meollo del codigo.

Aunque quiero que al final el bot haga varias cosas queria para empezar que atacase pvp automaticamente ya que los ataques deben ser cada ciertos minutos excepto si gastas claro que entonces puedes atacar continuamente, usando el inspector he encontrado los siguientes codigos

<div class="player-name" data-automation-locator="field.playerNickname">Megazorrk</div>

que es el nombre del jugador y

<div class="player-level" data-automation-locator="field.playerLevel">64</div>

que es su nivel.

Entonces de momento quiero saber como puedo leer esos datos, buscar la linea y extraer el nombre del jugador Megazorrk y su nivel 64, para si el nivel esta en un rango accesible atacarlo y guardar el resultado junto con su nombre en un fichero para tener una lista de jugadores a los que atacar con cierta seguridad.

Debo trabajar directamente sobre el codigo ya que el juego precisamente para evitar bots y automatismos a veces te salta con algun popup o cambia ligeramente la posicion del boton de atacar (quien dice ligeramente dice que hoy te aparece a la izquierda y dentro de 2 horas a la derecha).

Gracias.
Ok.

Supongo que el nickname te es indiferente, no?

Sobre el cambio de sitio del botón no es problema, kantu es capaz de clicar tanto por coordenadas en píxeles (X, Y), como por el nombre del botón, o cualquier div que lo contenga. Éste último es el que tienes que usar, siempre que no cambie de nombre tambien claro, supongo que de entre todos los div que tenga ese boton, habrá alguno fijo.

Si te has fijado en la extensión. El script se conforma con pasos, que se van recorriendo de arriba abajo.

Y en cada paso tienes 3 propiedades:
- comando (que acción hace: leer, clicar, etc..)
- target (en que parte lo hace)
- value (en algunos comandos es opcional)

Usa el comando "store text" o "store value" mas bien ya que es un número.
En target tendrás que especificar ese boton o div. Puedes usar la herramienta "select" justo al lado y clicar tu mismo sobre el boton o div de alrededor, para que lo pille.
Y en value le das nombre a la variable, "level" por ejemplo.

Si todo está bien, te estaria pillando el numero.
Puedes hacer otro paso para indicar tú el minimo, por ejemplo 40, llamándo a la variable "min" por ejemplo.

Y luego hacer un condicional con if, que entre si la variable "level" es menor que "min".

Y dentro de ese if ya irían los pasos de clicar o efectuar otras acciones.

Y para rematar, englobar todos los pasos en un bucle infinito para que vaya haciéndolo solo. Con pausas opcionales, dependiendo de lo que requiera el juego y demas...

Aquí tienes la documentación de los comandos, no obstante voy para el pc y te lo pongo todo mas exacto, que ahora estoy desde movil y te lo estoy diciendo todo de cabeza. https://ui.vision/docs/selenium-ide
@alvaro101 que bueno tu post, muchas gracias creo que intentare eso que dices pero me tocara hacerlo en unos dias ya que ahora estoy algo liado pero en cuanto pueda me pongo a probar lo que me dices.
Gracias.
Por refinar un poco mas (y ya no puedo mas sin saber mas info xDD):


COMMAND --- TARGET --- VALUE --- (explicacion)

label -------------- repeat ---------- --------- (etiqueta para llamarla luego y empezar el script desde aquí)
execute script - return 50 ---- min ------ (declara la variable "min" con el valor mínimo de nivel que quieres entrarle)
storeValue --------- ?? --------- level ----- (?? tendrás que ubicarlo tu, el div que te comentaba, la ubicación del nivel del contrario. Guardará el valor en la variable "level")
if_v2 ---------- level < min -------- --------- (entra si el nivel es menor de 50, de lo contrario, continúa el script después del comando "end")
*
end -------------------- -------------- ---------- (aqui acaba el "if")
gotoLabel ------- repeat --------- ----------- (va de nuevo a "label repeat" y recorre los pasos otravez)


*tendrás que meter tu acción, si es click en algún botón o lo que sea.. dentro del "if" (cuando el nivel sea mas bajo de 50)

Como ves, es un bucle que se repite todo el rato, en no muchos pasos, imagino que tendrás que agregar algunos extra mas..
Puedes ajustar la velocidad de los pasos (0 / 0.3 segundos / 2 segundos), ya sabes, por si la web tiene que cargar algo que tarde un poco en estar presente.
De todos modos también tienes un !timeout_wait que espera X segundos antes de detenerse el script, esperando que el elemento esté presente en la página.
Y si es mas tiempo, hay un comando "pause" para hacer una pausa donde creas oportuno, le indicas el tiempo a esperar en milisegundos y listo.

Creo que con ésto y leerte la documentación por encima (no son muchos comandos) ya tienes para empezar a probar cositas. Cualquier cosa me dices.. un saludo!
@alvaro101 Queria darte las gracias por recomendarme el kantu, aunque es muy basico para lo que quiero hacer y bastante ortopedico la verdad, me he tirado bastantes dias hasta conseguir que mas o menos haga lo que quiero y casi 3/4 partes del codigo es control de errores para que no se le vaya la olla ya que se desconectaba random, hacia cosas raras, se quedaba pillado, etc, pero mas o menos lo tengo encauzado y de momento esta haciendo la labor que queria, supongo que el programa que me recomendo @Alecs7k es mas avanzado y puede que mas adelante con el haga todo lo que quiero pero como es mas complejo y ahora mismo ando mal de tiempo para experimentos, el kantu me ha sacado del apuro.
Gracias [oki]
@daisakute si, es como una versión lite de selenium o algo así se podría definir.

Decirte que ahora con las recientes versiones 5.0.3 y 5.0.5 está fallando en firefox... tanto que es inutilizable.. incluso abrí un hilo en el soporte
https://forum.ui.vision/t/error-promise ... scope/2805

En cambio en chrome, éstas ultimas versiones no hay ningún error, incluso han arreglado el que te decía mas arriba, y ya no se detiene, al menos los comandos que uso (he tenido tareas funcionando casi 24h)

En definitiva, usa chrome xDD
@alvaro101 ya sufri los fallos, no podia usar la pausa y las repeticiones porque no se respetaba la pausa y se acumulaban los clicks aleatorios, al final lo solucione pasando a la version 5.0.1 que funciona mas o menos y sustituyendo las pausas por eventos y en lugar de usar los loop del programa me hago mis propios bucles y solo ejecuto el bot una vez, cuando tenga algo mas de tiempo libre mirare selenium a ver que tal.
@alvaro101 Te puedes creer que vi el hilo ese que pusiste buscando como solucionar el problema y fue el que me dio la idea de instalar la 5.0.1, ni me fije que era tuyo.

Te queria preguntar si sabes algo de un fallo que me pasa y si podrias preguntarlo en ese foro ya que fastidia bastante:

El problema es que el bot hace multiples clicks, es decir, cuando lo programo hago solo un click pero cuando lo ejecuto, cuando grabo el click me da 2 opciones o formato xpath, o formato css: root y una ruta larguisima, el xpath nunca funciona, dice com not found, el otro si clickea pero quiero que solo clickee una vez y lo hace 4 o 5 veces depende de lo que le de.

Lo he intentado con el xclick visual y funciona bien clickando solo una vez pero el problema es que los tios listos te dicen que si tu programa tiene mas de 25 xclicks tienes que pagar 90€ por el premium, lo que no dicen es que puedes tener 1 solo click como es mi caso pero si se repite 25 veces a la 26 se para el bot.

¿Alguna idea de donde viene el problema del multiclick?

Gracias.
Hola, pues ya repararon los errores y funciona sin pararse tanto en chrome como en firefox, al menos para los comandos que uso.

Lo del premium no tenía ni idea.. supongo que será lo de XModules.. por suerte nunca he necesitado esos comandos... ni siquiera se en que consisten.. jej, no puedo ayudarte con el xClick

Pero lo primero que se me viene a la cabeza, es que haya varios cuadros CSS con ese nombre, y los va clickeando todos ¿? Ni idea...

De click, siempre he usado xpath, no se, no he tenido problemas, de hecho una variable dentro del xpath que va iterando cada vez, y funciona, es decir, al menos para mi uso no se pone muy tikismikis.
A ver si puedes revisar lo del xpath, métele un verifyText o algo antes, para que solo haga click si está presente, y sino que pase de largo o intente otra cosa.. es por donde empezaría a mirar la solución.

A mi me pasa algo parecido con un click, que te puedes encontrar div[3] o div[6], y como aun no se el motivo de uno u otro (si es que lo hay) tengo ambos puestos, pero con un IF delante, para que solo entre si existe.

Supongo que esa web, requiere registro y todo el rollo, no? Lo digo para echarle un ojo si no necesito nada..

Saludos
No lo que pasa es que clickea el mismo boton varias veces, no es que clickee en distintos sitios, lo hace donde quiero, pero lo hace demasiadas veces.
Acabo de probar con chrome y me pasa lo mismo que con firefox, el xpath no funciona y el css clickea varias veces, por lo que volvere a firefox.
Lo del verifytext y un monton de if, los tengo, pero como digo el fallo no esta en que clickee donde no debe ni que no clicke en absoluto, sino que lo hacee donde debe pero le da el parkinson [qmparto] y clicka 5 veces seguidas
Pues es raro si.. mira a ver si puedes reproducir el fallo del click en otra web que no requiera registro, es lo primero que me van a pedir en el foro jej, jo tengo problema en abrir hilo.

Tambien puedes ver si puedes hacer click en otra zona del botón, ya sabes, normalmente llevan varios <div> clickeables, a ver si se comporta de distinta manera... no se
17 respuestas