2010-02-14 5 views
7

Ho problemi con il mio programma Perl. Questo programma accede a una pagina Web specifica e riempie l'area di testo per il messaggio e una casella di immissione per i numeri di cellulare. Facendo clic sul pulsante "Invia", il messaggio verrà inviato al numero specificato. L'ho già fatto funzionare per l'invio di messaggi. Ma il problema è che non riesco a farlo funzionare per ricevere messaggi/risposte. Sto usando il modulo WWW::Mechanize in Perl. Ecco una parte del mio codice (per la ricezione msg):Come posso accedere ai moduli senza un nome o un ID con Perl WWW :: Mechanize?

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

# ... 

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

$mech->submit(); 

Il mio problema è, le forme non mostra i nomi. Ci sono due pulsanti in questo modulo, ma non riesco a selezionare quale pulsante fare clic, poiché non è stato specificato alcun nome e gli ID contengono uno spazio (ad esempio nome modulo = 'messaggio ricezione' ..). Devo fare clic sul secondo pulsante, "Ricevi".

La domanda è: in che modo sarà possibile accedere ai moduli e ai pulsanti utilizzando il modulo mechanize senza utilizzare i nomi?

risposta

4

È possibile passare un argomento form_number al metodo submit_form.

Oppure chiamare il metodo form_number per modificare il modulo utilizzato dalle chiamate successive per fare clic o campo.

+0

Grazie! Ma per quanto riguarda l'accesso ai pulsanti? – Suezy

+1

Come stai? il tuo esempio ha mostrato submit, quindi ho suggerito submit_form (form_number => xxx); se stai usando click o click_button, ho suggerito di chiamare in anticipo il metodo form_number. – ysth

4

Hai provato a utilizzare HTTP Recorder?
Dai un'occhiata alla documentazione e provala per vedere se ti dà un risultato ragionevole.

+0

Grazie! Lo guarderò. :) – Suezy

+0

Ho ancora una domanda per favore, come posso abilitare un pulsante radio usando Mechanize? – Suezy

+0

L'idea di utilizzare il Registratore HTTP è di guardare lo script risultante - quindi è possibile vedere ciò che viene effettivamente inviato.
Immagino che dovrebbe essere come $ mech-> set_visible ([radio => 'KCRW']); all'interno del tuo codice registrato. – weismat

3

Visto che ci sono solo due pulsanti sul modulo, il suggerimento di ysth dovrebbe essere facile da implementare.

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); 

E poi:

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

Oppure:

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

un caso di tentativi ed errori è più che sufficiente per voi di capire quale pulsante si sta facendo clic.

EDIT

Sto assumendo che è già stata selezionata l'apposito modulo. In caso contrario:

$mech->form_number($formNumber); 

dove $formNumber è il numero di modulo nella pagina in questione.

+0

I numeri click_button sono (in base al documento, comunque) relativi al modulo corrente; dovresti chiamare prima il numero del modulo. – ysth

+0

@ysth: correttamente annotato, risposta aggiornata – Zaid

+0

Grazie! :) – Suezy

1

$mech->form_with_fields('username');

selezionerà la forma che contiene un campo denominato nome utente. hth