En este pequeño tutorial voy a dejar el esquema básico para abrir varias instancias de navegación en UBot (threads).
Antes de comenzar, necesitaremos una lista con las direcciones web que vayamos a visitar para poder ir accediendo a ellas de forma ordenada.
Posiblemente ya tenemos estas rutas en un fichero, así que solo tenemos que cargarlas en una variable a la que he llamado %rutas.
Para controlar el límite máximo de hilos de ejecución puedes modificar a tu gusto la variable #HilosMax. En este caso voy a permitir 5 threads simultáneos
Ten en cuenta que no estamos usando rotación de proxies y si realizas muchas peticiones simultaneas a una misma web puedes tener problemas.
También necesitamos llevar cuenta del número de instancias que hay en ejecución y para ello crearemos una variable: #HilosEnUso.
A continuación te muestro la parte principal del algoritmo donde tenemos un bucle principal donde llamamos a la función AbrirInstancia y otro bucle interno que impide que se abran múltiples hilos de ejecución de forma descontrolada (semáforo).
Cuando los #HilosEnUso hayan alcanzado los #HilosMax que hemos definido al inicio del programa, nos mantendremos a la espera hasta que alguno termine.
En ese momento llamamos al comando AbrirInstancia y le pasamos la siguiente ruta de la lista.
Observa que hacemos una pequeña pausa al final (un par de décimas de segundo). Es una peculiaridad que incluiremos en UBot para que todo vaya bien.
Y solo nos queda codificar la rutina AbrirInstancia en la que creamos una nueva instancia del navegador con la url que le hemos indicado como parámetro.
Puedes utilizar este código como base para tus proyectos.
clear list(%rutas) add list to list(%rutas,$list from file("{$special folder("Desktop")}/rutas.txt"),"Don\'t Delete","Global") set(#HilosMax,5,"Global") set(#HilosEnUso,0,"Global") loop($list total(%rutas)) { loop while($comparison(#HilosEnUso,">= Greater than or equal to",#HilosMax)) { wait(1) } increment(#HilosEnUso) AbrirInstancia($next list item(%rutas)) wait("0,2") } define AbrirInstancia(#_url) { thread { in new browser { navigate(#_url,"Wait") } decrement(#HilosEnUso) } }