• Lunes 18 de Noviembre de 2024, 18:38

Autor Tema:  Mechanize Click_button Error  (Leído 5405 veces)

frijolita

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Mechanize Click_button Error
« en: Miércoles 27 de Diciembre de 2006, 16:36 »
0
Hola!
Tengo un script a traves del cual accedo a un listado de registros con paginacion.
Utilizo la instruccion
$browser2->click_button( value => "Next 25 records");
       para ir pasando por todas las paginas pero solo funciona para pasar de la primera a la segunda pero no de la segunda a la tercera a pesar de que he comprobado que dicho boton existe!
¿Se os ocurre que puede estar pasando?

Dejo aqui el script por si quereis probarlo


El error q obtengo es Can't call method header on an undefined value

Muchas gracias!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #1 en: Miércoles 27 de Diciembre de 2006, 19:07 »
0
#1 usa el pragma strict
no uses eso de
Código: Text
  1. $test=0;
  2. while(!$test){...}
  3.  
  4.  
Mejor usa
Código: Text
  1. do {...} unless $test != 0
  2.  
Código: Text
  1. whle($test ne 0){...}
  2.  

usa el pragma ya dicho y veras todos los errores  ;)
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #2 en: Jueves 28 de Diciembre de 2006, 01:33 »
0
Sabes frijolita, mire un poco la pagina y creo que es mejor usar LWP y buscar en esta pagina:
http://www.wipo.int/pctdb/en/browse.jsp

 :rolleyes:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

frijolita

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #3 en: Jueves 28 de Diciembre de 2006, 09:32 »
0
Muchas gracias por tus respuestas!
Ya he cambiado lo del while ...
Con respecto a la pagina q me mandas el problema es que esa pagina no permite buscar registros con un criterio dado sino que te muestras todos los de un periodo determinado...

Aun sigo con el expediente X de que funcione el boton al pasar de la pagina 1 a la 2 pero no de la 2 a la 3 ... No sé , mi intuicion me dice que hay algun problema con el browser2 y la variable content .... pero no sé exactamente cual ni como arreglarlo...

Se siguen aceptando sugerencias ...

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #4 en: Jueves 28 de Diciembre de 2006, 15:45 »
0
Aun asi me gusta mas la idea de LWP, este tiene un modulo llamado HTML::Form
http://search.cpan.org/~gaas/libwww-perl-5...ib/HTML/Form.pm
A ver si puedo hacer algo  :comp:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #5 en: Jueves 28 de Diciembre de 2006, 16:09 »
0
Bien, frijolita, hay algo mas, tu programa no ve si la pagina funciona, tampoco sabe si existe y eso es un bug  ;)

Mira este codigo, no esta completo pero te puede dar una idea:
[EDIT] gracias Radical
Código: Text
  1. #!/usr/bin/env perl
  2. # Author: su - <www.solocodigo.com>
  3. # http://www.solocodigo.com
  4. #            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
  5. #                    Version 2, December 2004
  6. #
  7. # Copyright (C) 2004 Sam Hocevar
  8. #  22 rue de Plaisance, 75014 Paris, France
  9. # Everyone is permitted to copy and distribute verbatim or modified
  10. # copies of this license document, and changing it is allowed as long
  11. # as the name is changed.
  12. #
  13. #            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
  14. #   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  15. #
  16. #  0. You just DO WHAT THE FUCK YOU WANT TO.
  17.  
  18. use LWP::RobotUA;
  19. use strict;        # Pragma usado para limitar los bugs que puedan existir
  20. use Getopt::Long;  # Extended processing of command line options.
  21. use HTLM::Forms;
  22.  
  23. sub usar {
  24.   print "Como usar $0 :\n\t-query palabra: Palabra a buscar\n\t-link link: link\n";
  25.   exit;
  26. }
  27.  
  28. my $query;
  29. my $link;
  30.  
  31. GetOptions ('query=s' => \$query, 'link=s' \$link);
  32. die usar() unless defined $link and defined $query;
  33.  
  34. my $browser = LWP::RobotUA->new('su-robot/0.1');
  35. $browser->delay(30/60); #Regla para robot, llama al servidor en un tiempo determinado
  36. my $test = 0;
  37. my $respuesta = $browser->get($link);
  38.  
  39. if ($response->is_success){
  40.   my @forms = HTML::Form->parse($response);
  41.   print "Aqui haces algo con cada forms\n";
  42.   print "Mira la documentacion de HTML::Form para ver bien como se usa\n";
  43. }
  44.  
  45. else {
  46.   die $response->status_line;
  47. }
  48. ###############################################
  49. # This program is free software. It comes without any warranty, to
  50. # the extent permitted by applicable law. You can redistribute it
  51. # and/or modify it under the terms of the Do What The Fuck You Want
  52. # To Public License, Version 2, as published by Sam Hocevar. See
  53. # http://sam.zoy.org/wtfpl/COPYING for more details.
  54.  
  55.  
:smartass:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #6 en: Jueves 28 de Diciembre de 2006, 16:48 »
0
Cita de: "su -"
# Copyright © 2006 su - <www.solocodigo.com>
#  22 rue de Plaisance, 75014 Paris, France
su- perdona la intromision,  :unsure: Pero eres o vives en Francia??? :blink: , Yo pensé que eras Español.
El pasado son solo recuerdos, el futuro son solo sueños

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #7 en: Jueves 28 de Diciembre de 2006, 19:01 »
0
Cita de: "RadicalEd"
Cita de: "su -"
# Copyright © 2006 su - <www.solocodigo.com>
#  22 rue de Plaisance, 75014 Paris, France
su- perdona la intromision,  :unsure: Pero eres o vives en Francia??? :blink: , Yo pensé que eras Español.
No, el de la licensia es frances  :lol: fue el mismo que hizo libcaca
Es solo que lo puse donde no debo  :rolleyes:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

explorer

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #8 en: Viernes 5 de Enero de 2007, 03:59 »
0
El problema es el siguiente: cuando haces un click_button, WWW::Mechanize lo hace sobre el formulario en que se encuentra, que, normalmente, es el primero, y efectivamente, así es en la primera página. Pero no en las siguientes, donde el botón que quieres pulsar está en el segundo formulario.

Puedes hacer varias cosas: posicionarte incondicionalmente en el segundo formulario después de la segunda vuelta o buscar aquel formulario que tenga ese botón.

Aquí te pongo el trozo de código que he usado con el segundo método para ver todas las páginas:
Código: Text
  1.       133    # boton next 25
  2.       134    sleep(3);
  3.       135    &#036;test=0;
  4.       136    while(!&#036;test){
  5.       137      # Hay que colocarse en el formulario adecuado
  6.       138      my &#036;i_form = 1;
  7.       139      while ( 1 ) {
  8.       140        print &#34;Mirando formulario &#036;i_form&#34;;
  9.       141        my &#036;form  = &#036;browser2-&#62;form_number(&#036;i_form++);
  10.       142        my &#036;input = &#036;form-&#62;find_input( undef, &#34;submit&#34; );
  11.       143        next unless defined &#036;input;
  12.       144        last if &#036;input-&#62;value eq &#34;Next 25 records&#34;;
  13.       145      }
  14.       146
  15.       147        #&#036;content=&#036;browser2-&#62;submit_form(&#34;DBSELECT&#34;);
  16.       148        print &#34;justo antes de fallar&#34;;
  17.       149        &#036;browser2-&#62;click_button( value =&#62; &#34;Next 25 records&#34;);
  18.  
Como ves, antes de pulsar el botón hago un bucle donde me voy colocando en el formulario 1, 2, 3... Miro a ver si tiene un botón tipo "submit" con lo que busco y si es así, termino el bucle.

frijolita

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Mechanize Click_button Error
« Respuesta #9 en: Viernes 5 de Enero de 2007, 08:18 »
0
Muchas gracias!!
con esta estrategia que comentas funciona!!
Slds
F