Programación Web y Scripting > Perl

 Mechanize Click_button Error

<< < (2/2)

su -:
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 ---#!/usr/bin/env perl# Author: su - &#60;www.solocodigo.com&#62;# http://www.solocodigo.com#            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE #                    Version 2, December 2004 ## Copyright (C) 2004 Sam Hocevar#  22 rue de Plaisance, 75014 Paris, France # Everyone is permitted to copy and distribute verbatim or modified # copies of this license document, and changing it is allowed as long # as the name is changed. ##            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE #   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ##  0. You just DO WHAT THE FUCK YOU WANT TO. use LWP::RobotUA;use strict;        # Pragma usado para limitar los bugs que puedan existiruse Getopt::Long;  # Extended processing of command line options.use HTLM::Forms; sub usar {  print &#34;Como usar &#036;0 :&#092;n&#092;t-query palabra: Palabra a buscar&#092;n&#092;t-link link: link&#092;n&#34;;  exit;} my &#036;query;my &#036;link; GetOptions ('query=s' =&#62; &#092;&#036;query, 'link=s' &#092;&#036;link);die usar() unless defined &#036;link and defined &#036;query; my &#036;browser = LWP::RobotUA-&#62;new('su-robot/0.1');&#036;browser-&#62;delay(30/60); #Regla para robot, llama al servidor en un tiempo determinadomy &#036;test = 0;my &#036;respuesta = &#036;browser-&#62;get(&#036;link); if (&#036;response-&#62;is_success){  my @forms = HTML::Form-&#62;parse(&#036;response);  print &#34;Aqui haces algo con cada forms&#092;n&#34;;  print &#34;Mira la documentacion de HTML::Form para ver bien como se usa&#092;n&#34;;} else {  die &#036;response-&#62;status_line;}################################################ This program is free software. It comes without any warranty, to# the extent permitted by applicable law. You can redistribute it# and/or modify it under the terms of the Do What The Fuck You Want# To Public License, Version 2, as published by Sam Hocevar. See# http://sam.zoy.org/wtfpl/COPYING for more details.   :smartass:

RadicalEd:

--- Cita de: "su -" --- # Copyright © 2006 su - <www.solocodigo.com>
#  22 rue de Plaisance, 75014 Paris, France
--- Fin de la cita ---
su- perdona la intromision,  :unsure: Pero eres o vives en Francia??? :blink: , Yo pensé que eras Español.

su -:

--- Cita de: "RadicalEd" ---
--- Cita de: "su -" --- # Copyright © 2006 su - <www.solocodigo.com>
#  22 rue de Plaisance, 75014 Paris, France
--- Fin de la cita ---
su- perdona la intromision,  :unsure: Pero eres o vives en Francia??? :blink: , Yo pensé que eras Español.
--- Fin de la cita ---
No, el de la licensia es frances  :lol: fue el mismo que hizo libcaca
Es solo que lo puse donde no debo  :rolleyes:

explorer:
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 ---      133    # boton next 25      134    sleep(3);      135    &#036;test=0;      136    while(!&#036;test){      137      # Hay que colocarse en el formulario adecuado      138      my &#036;i_form = 1;      139      while ( 1 ) {      140        print &#34;Mirando formulario &#036;i_form&#34;;      141        my &#036;form  = &#036;browser2-&#62;form_number(&#036;i_form++);      142        my &#036;input = &#036;form-&#62;find_input( undef, &#34;submit&#34; );      143        next unless defined &#036;input;      144        last if &#036;input-&#62;value eq &#34;Next 25 records&#34;;      145      }      146      147        #&#036;content=&#036;browser2-&#62;submit_form(&#34;DBSELECT&#34;);      148        print &#34;justo antes de fallar&#34;;      149        &#036;browser2-&#62;click_button( value =&#62; &#34;Next 25 records&#34;); 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:
Muchas gracias!!
con esta estrategia que comentas funciona!!
Slds
F

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa