Programación Web y Scripting > Perl
Mechanize Click_button Error
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 - <www.solocodigo.com># 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 "Como usar $0 :\n\t-query palabra: Palabra a buscar\n\t-link link: link\n"; exit;} my $query;my $link; GetOptions ('query=s' => \$query, 'link=s' \$link);die usar() unless defined $link and defined $query; my $browser = LWP::RobotUA->new('su-robot/0.1');$browser->delay(30/60); #Regla para robot, llama al servidor en un tiempo determinadomy $test = 0;my $respuesta = $browser->get($link); if ($response->is_success){ my @forms = HTML::Form->parse($response); print "Aqui haces algo con cada forms\n"; print "Mira la documentacion de HTML::Form para ver bien como se usa\n";} else { die $response->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 $test=0; 136 while(!$test){ 137 # Hay que colocarse en el formulario adecuado 138 my $i_form = 1; 139 while ( 1 ) { 140 print "Mirando formulario $i_form"; 141 my $form = $browser2->form_number($i_form++); 142 my $input = $form->find_input( undef, "submit" ); 143 next unless defined $input; 144 last if $input->value eq "Next 25 records"; 145 } 146 147 #$content=$browser2->submit_form("DBSELECT"); 148 print "justo antes de fallar"; 149 $browser2->click_button( value => "Next 25 records"); 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
[*] Página Anterior
Ir a la versión completa