Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » JavaScript » Buscar y seguir un link Responder al tema
Nuevo tema


Página 1 de 1  [ 6 mensajes ] 
 
Nota 2007-12-14 09:09 @422

Perlero Frecuente
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias
Mensajes: 117
Buscar y seguir un link
Bueno aquí esta la duda, estoy haciendo un script para utilizar en el greasemonkey que explico a continuación:

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
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):

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
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 :P


Nota 2007-12-14 09:57 @456

Perlero Frecuente
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias
Mensajes: 117
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:

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
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();
        }
}


Nota 2007-12-14 21:10 @923
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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?

_________________
JF^D Perl programming


Nota 2007-12-15 00:06 @046

Perlero Frecuente
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias
Mensajes: 117
jaja ya avisé que es lo primero que he hecho en Javascript :P

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 /.*/ :P


Nota 2007-12-15 01:14 @093

Perlero Frecuente
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias
Mensajes: 117
¡¡¡¡¡¡Sigo haciendo progresos!!!!!!

Encontré la función window.open, de forma que haciendo
Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
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<em>.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 :) ¡Buenas noches!


Nota 2007-12-15 23:53 @036

Perlero Frecuente
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias
Mensajes: 117
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..

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
        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.


Responder al tema  [ 6 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO