2010-02-14 10 views
7

Tengo problemas con mi programa Perl. Este programa inicia sesión en una página web específica y rellena el área de texto para el mensaje y un cuadro de entrada para números móviles. Al hacer clic en el botón 'Enviar', el mensaje se enviará al número especificado. Ya lo tengo para trabajar para enviar mensajes. Pero el problema es que no puedo hacer que funcione para recibir mensajes/respuestas. Estoy usando el módulo WWW::Mechanize en Perl. Aquí hay una parte de mi código (para recibir mensajes):¿Cómo puedo acceder a formularios sin nombre o ID con Perl's WWW :: Mechanize?

$username = 'suezy'; 
$password = '123'; 
$url = 'http://..sample.cgi'; 

# ... 

$mech->credentials($username, $password); 
$mech->get($url); 

$mech->submit(); 

Mi problema es que los formularios no muestran nombres. Hay dos botones en este formulario, pero no puedo seleccionar en qué botón hacer clic, ya que no hay un nombre especificado y los ids contienen un espacio (por ejemplo, nombre del formulario = 'recibir msg' ..). Necesito hacer clic en el segundo botón, 'Recibir'.

La pregunta es, ¿cómo podré acceder a los formularios y botones usando el módulo mecanizado sin usar nombres?

Respuesta

4

Puede pasar un argumento form_number al método submit_form.

O llame al método form_number para modificar qué formulario utilizan las llamadas posteriores para hacer clic o en el campo.

+0

¡Gracias! Pero ¿qué tal para acceder a los botones? – Suezy

+1

¿Cómo estás? su ejemplo mostró submit, por lo que sugerí submit_form (form_number => xxx); si usa clic o clic en el botón, sugerí llamar al método form_number de antemano. – ysth

4

¿Ha intentado utilizar HTTP Recorder?
Eche un vistazo a la documentación y pruébela para ver si le da un resultado razonable.

+0

¡Gracias! lo comprobaré. :) – Suezy

+0

Tengo una pregunta nuevamente, ¿cómo habilito un botón de radio con Mechanize? – Suezy

+0

La idea de utilizar HTTP Recorder es mirar el script resultante, entonces puede ver lo que realmente se envía.
Supongo que debería ser algo así como $ mech-> set_visible ([radio => 'KCRW']); dentro de tu código grabado – weismat

3

Al ver que solo hay dos botones en su formulario, la sugerencia de ysth debe ser fácil de implementar.

use strict; 
use warnings; 
use WWW::Mechanize; 

my $username = "suezy"; 
my $password = "123"; 
my $url = 'http://.../sample.cgi'; 
my $mech = WWW::Mechanize->new(); 

$mech->get($url); 
$mech->credentials($username,$password); 

Y luego:

$mech->click_button({number => 1});  # if the 'Receive' button is 1 

O:

$mech->click_button({number => 2});  # if the 'Receive' button is 2 

un caso de prueba y error es más que suficiente para que usted pueda determinar qué botón que está haciendo clic.

EDITAR

Estoy asumiendo que el formulario correspondiente ya ha sido seleccionado. Si no es así:

$mech->form_number($formNumber); 

donde $formNumber es el número del formulario en la página en cuestión.

+0

los números de click_button son (de acuerdo con el documento, de todos modos) relativos a la forma actual; tendrías que llamar a form_number primero. – ysth

+0

@ysth: debidamente anotado, respuesta actualizada – Zaid

+0

¡Entendido! ¡Gracias! :) – Suezy

1

$mech->form_with_fields('username');

seleccionará el formulario que contiene un campo denominado nombre de usuario. hth

Cuestiones relacionadas