• Publicidad

Buscar y seguir un link

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Buscar y seguir un link

Notapor Norther » 2007-12-14 09:09 @422

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

Sintáxis: [ Descargar ] [ Ocultar ]
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
                        }
                }
        }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Sintáxis: [ Descargar ] [ Ocultar ]
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();
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Publicidad

Notapor Norther » 2007-12-14 09:57 @456

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:

Sintáxis: [ Descargar ] [ Ocultar ]
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();
        }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias

Notapor explorer » 2007-12-14 21:10 @923

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Norther » 2007-12-15 00:06 @046

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

Notapor Norther » 2007-12-15 01:14 @093

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

Encontré la función window.open, de forma que haciendo
Sintáxis: [ Descargar ] [ Ocultar ]
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<span style="font-style: italic">.action == ""){
                                document.forms[i].submit();
                        }
                }
        }
}

abrirlogs();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Notapor Norther » 2007-12-15 23:53 @036

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..

Sintáxis: [ Descargar ] [ Ocultar ]
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();
        }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


---------------EDIT----------------
La solución era un simple window.location... me uno al grupo de los que se autocontestan.
Norther
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2007-07-24 13:47 @616
Ubicación: Asturias


Volver a JavaScript

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

cron