Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Buscar y seguir un link

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript
Mensaje Vie Dic 14, 2007 8:09 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Buscar y seguir un link Responder citando

Bueno aquí esta la duda, estoy haciendo un script para utilizar en el greasemonkey que explico a continuación:

Javascript:
function filter(){
        var log = document.getElementsByName('logedt');   // buscamos el form logedt
        var nuevo =  log[0].value;
        if (nuevo.match(/92.178.221.546/)) {    // si encontramos esta ip en la forma
                var log = document.getElementsByName('logedt');
                var nuevo =  log[0].value;
                var hola=nuevo.replace(/.*/g, ' ')// Borramos todo lo que contenga la forma en la variable auxiliar
                log[0].value = hola; //y se lo pasamos a la forma

                for(i=0;i<document.forms.length;i++){
                        if(document.forms[i].action == ""){
                                document.forms[i].submit()// para despues enviarla
                        }
                }
        }
}


Hasta ahí funciona a la perfección, pero yo quiero ir un poco mas allá, lo que quiero seria algo así (pseudocódigo):

Javascript:
function filter(){
        var log = document.getElementsByName('logedt');   // buscamos el form logedt
        var nuevo =  log[0].value;
        if (nuevo.match(/92.178.221.546/)) {    // si encontramos esta ip en la forma
                var log = document.getElementsByName('logedt');
                var nuevo =  log[0].value;
                var hola=nuevo.replace(/.*/g, ' ')// Borramos todo lo que contenga la forma en la variable auxiliar
                log[0].value = hola; //y se lo pasamos a la forma

                for(i=0;i<document.forms.length;i++){
                        if(document.forms[i].action == ""){
                                document.forms[i].submit()// para despues enviarla
                        }
                }
        }

buscar en el texto del documento;

Si (encontramos el texto /continuar/) {
     buscamos un link que cuyo texto contenga la palabra /Harware/;
     hacemos click en el link;
     llamamos a la función filter();
}


Y eso es todo, por ahora conseguí hacerlo prácticamente todo, bueno en realidad solo es la función que hice y añadir al pie document.find creo, tengo un lío bastante grande ahora...

Lo que no sé es cómo hacer que busque un link en la página por el texto de su nombre (o por el texto del link tal que http:\\www.buscar_en_este_texto_me_sirve.com) y hacer que el script haga click físicamente en el, de forma que yo vea mi propio navegador (firefox) seguir ese link.

Empecé con esto para hacer un script chorras y al final me piqué y llevo con el unos días leyendo libros y libros de Javascript para de paso aprenderlo y la verdad ya no sé qué hacer para conseguir que haga eso, muchas gracias por cualquier posible idea Razz
Mensaje Vie Dic 14, 2007 8:57 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Esto es lo que estoy probando ahora pero no funciona ni de lejos :S
Aun así os servirá para haceros una idea más precisa de lo que busco:

Javascript:
function filter(){
        var log = document.getElementsByName('logedt');
        var nuevo =  log[0].value;
        if (nuevo.match(/92.178.221.122/)) {
                var log = document.getElementsByName('logedt');
                var nuevo =  log[0].value;
                var hola=nuevo.replace(/.*/g, ' ');
                log[0].value = hola;

                for(i=0;i<document.forms.length;i++){
                        if(document.forms[i].action == ""){
                                document.forms[i].submit();
                        }
                }
        }
}


var e;

for(e=0; e<window.document.links.length; e++) {
        if(window.document.links[e] =~ /logs/i){
                window.document.links[e].submit();
                filter();
        }
}
Mensaje Vie Dic 14, 2007 8:10 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4130
Ubicación: Valladolid, España
Responder citando

Varias cosas...

No sé por qué razón asignas a las variables log y nuevo lo mismos valores dos veces (en la primera parte del código).

Si quieres borrar el valor de log[0], no hace falta ninguna expresión regular, ¿no?. Le asignas '' y ya está.

En la segunda parte, no puedes hacer un submit de un link. submit es para los forms.

Lo que sí puedes hacer es coger el href del link, y cargar la página... pero aquí viene el problema... ¿qué quieres decir con "hacer click" en el enlace?
Mensaje Vie Dic 14, 2007 11:06 pm
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

jaja ya avisé que es lo primero que he hecho en Javascript Razz

Es que vi por ahí gente que hacía algo parecido pero en realidad le pedían al programa que viera lo que había mas allá de ese enlace, yo lo que quiero es que el script "siga" ese enlace de forma que yo vea en mi navegador como lo sigue, literalmente que emule un click hecho por mi sobre ese enlace.

Lo de la expresión regular es por que en realidad son dos funciones iguales, una busca la IP y la cambia por una palabra y otra lo borro todo, así que sencillamente copié y pegué una función a otra y cambie /palabra/ por /.*/ Razz
Mensaje Sab Dic 15, 2007 12:14 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

¡¡¡¡¡¡Sigo haciendo progresos!!!!!!

Encontré la función window.open, de forma que haciendo
Javascript:
function abrirlogs() {
        alert(window.document.links[0].text);
        window.open(window.document.links[3] , "Logs" , "width=800,height=800,scrollbars=YES");
        filter();
}

function filter(){
        var log = document.getElementsByName('logedt');
        var nuevo =  log[0].value;
        if (nuevo.match(/92.178.221.122/)) {
                var log = document.getElementsByName('logedt');
                var nuevo =  log[0].value;
                var hola=nuevo.replace(/.*/g, ' ');
                log[0].value = hola;

                for(i=0;i<document.forms.length;i++){
                        if(document.forms[i].action == ""){
                                document.forms[i].submit();
                        }
                }
        }
}

abrirlogs();


Me abre tal [i]link en una ventana nueva. Dos problemas:

1- Lo que yo busco es que abra ese link en la misma ventana, no en una nueva.

2- Al abrir la ventana se pone a abrirla en un bucle infinito, como si la abriese y la refrescase constantemente, seguramente sea por estar usándolo en el GreaseMonkey, pero no sé me ocurre solución...

No sé muy bien si me voy acercando a lo que busco pero al menos espero que me vayas entendiendo mejor lo que quiero conseguir Smile ¡Buenas noches!
Mensaje Sab Dic 15, 2007 10:53 pm
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Bueno ya tengo el código más o menos final, solucioné el hecho de que Grease Monkey carga continuamente los script añadiendo una simple condición, y que abra la nueva página con document.open().

Así que ahora solo me queda una duda, pero que ya puedo afirmar que busqué en todas partes y no encontré nada. ¿Cómo hago para que me abra el link en la misma página? Porque con document.open abre el link en una nueva ventana y todos contentos, pero no es eso lo que busco... :S

Os dejo el código (sin revisar ni optimizar aún) para ver si a alguien se le ocurre algo..

Javascript:

        function abrirventana() {
                document.open(window.document.links[4] , "Logs" , "status=yes resizable=yes");
        }


       
        function limpiar(){
                var log = document.getElementsByName('editlog');
                var nuevo =  log[0].value;

                if (nuevo.match(/103.78.249.232/)) {
                        var log = document.getElementsByName('editlog');
                        var nuevo =  log[0].value;
                        var hola=nuevo.replace(/.*/g, ' ');
                        log[0].value = hola;

                        for(i=0;i<document.forms.length;i++){
                                if(document.forms[i].action == ""){
                                        document.forms[i].submit();
                                }
                        }
                }       
        }

        var test = window.document.links[4];

        if(document.location.href != test && window.find("Best Software")) {
                abrirventana();
        } else {
                limpiar();
        }


---------------EDIT----------------
La solución era un simple window.location... me uno al grupo de los que se autocontestan.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group