2010-02-14 3 views
7

У меня проблемы с моей программой Perl. Эта программа регистрируется на определенной веб-странице и заполняет текстовую область для сообщения и поле ввода для мобильных номеров. После нажатия кнопки «Отправить» сообщение будет отправлено на указанный номер. Я уже получил его для отправки сообщений. Но проблема в том, что я не могу заставить ее работать для получения сообщений/ответов. Я использую модуль WWW::Mechanize в Perl. Вот часть моего кода (для получения сообщений):Как я могу получить доступ к формам без имени или идентификатора с помощью Perl WWW :: Mechanize?

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

# ... 

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

$mech->submit(); 

Моя проблема заключается в том, что формы не имеют имен. В этой форме есть две кнопки, но я не могу выбрать, какую кнопку нажать, поскольку имя не указано, и идентификаторы содержат пробел (например, имя формы = принимают сообщение '..). Мне нужно нажать на вторую кнопку «Получить».

Вопрос в том, как я смогу получить доступ к формам и кнопкам с помощью модуля механизации без использования имен?

ответ

4

Вы можете передать аргумент form_number методу submit_form.

Или вызовите метод form_number, чтобы повлиять на то, какая форма используется более поздними вызовами для щелчка или поля.

+0

Спасибо! Но как насчет доступа к кнопкам? – Suezy

+1

Как вы это делаете? ваш пример показал submit, поэтому я предложил submit_form (form_number => xxx); если вы используете click или click_button, я предложил заранее вызвать метод form_number. – ysth

4

Вы пытались использовать HTTP Recorder?
Посмотрите документацию и попробуйте посмотреть, дает ли она вам разумный результат.

+0

Спасибо! Я проверю это. :) – Suezy

+0

У меня есть еще один вопрос, пожалуйста, как мне включить переключатель с помощью Mechanize? – Suezy

+0

Идея использования HTTP-рекордера заключается в том, чтобы посмотреть на полученный скрипт - тогда вы можете увидеть, что действительно отправлено.
Я думаю, это должно быть так же, как $ mech-> set_visible ([radio => 'KCRW]); внутри записанного кода. – weismat

3

Увидев, что в вашей форме есть только две кнопки, предложение ysth должно быть легко реализовано.

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

И потом:

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

Или:

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

Случай проб и ошибок более чем достаточно для вас, чтобы выяснить, какую кнопку вы щелкаете.

EDIT

Я предполагаю, что соответствующая форма уже выбрана. Если нет:

$mech->form_number($formNumber); 

где $formNumber является номер формы на странице в вопросе.

+0

Нажатие кнопки (в соответствии с документом) в любом случае по отношению к текущей форме; вам нужно сначала вызвать form_number. – ysth

+0

@ysth: Duly отметил, ответьте обновлено – Zaid

+0

Получил! благодаря! :) – Suezy

1

$mech->form_with_fields('username');

будет выбрать форму, которая содержит поле с именем имя пользователя. hth