Как я могу получить доступ к формам без имени или идентификатора с помощью Perl WWW :: Mechanize? - PullRequest
7 голосов
/ 14 февраля 2010

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

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

# ...

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

$mech->submit(); 

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

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

Ответы [ 4 ]

4 голосов
/ 14 февраля 2010

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

4 голосов
/ 14 февраля 2010

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

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

3 голосов
/ 14 февраля 2010

Поскольку в вашей форме всего две кнопки, предложение 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 - номер формы на рассматриваемой странице.

1 голос
/ 12 мая 2010

$mech->form_with_fields('username');

выберет форму, содержащую поле с именем пользователя. НТН

...