У меня есть простой сценарий входа в систему, использующий Perl WWW::Mechanize. Я пишу сценарии для входа в Moodle. Когда я просто выполняю шаги входа в систему как процедурные шаги, это работает. Например (предположим, что "$site_url", USERNAME и PASSWORD установлены правильно):
#THIS WORKS
$updater->get("http://".$site_url."/login/index.php");
$updater->form_id("login");
$updater->field('username', USERNAME);
$updater->field('password', PASSWORD);
$updater->click();
$updater->get("http://".$site_url."/");
print $updater->content();
Когда я пытаюсь инкапсулировать эти шаги в дочернем классе WWW:Mechanize, методы get() и content() и другие работают, но вход на сайт не работает. У меня есть ощущение, что это связано с переменной областью видимости, но я не знаю, как это решить.
Пример (не удается):
my $updater = new AutoUpdater( $site_url, USERNAME, PASSWORD );
$updater->do_login();
{
package AutoUpdater;
use base qw( WWW::Mechanize );
sub new {
my $class = shift;
my $self = {
site_url => shift,
USERNAME => shift,
PASSWORD => shift,
};
bless $self, $class;
return $self;
}
sub do_login {
my $self = shift;
$self->get("http://".$site_url."/");
$self->get("http://".$site_url."/login/index.php");
$self->form_id("login");
$self->field("username", $self->{USERNAME});
$self->field("password", $self->{PASSWORD});
$self->click();
$self->get("http://".$site_url."/");
print $self->content();
}
}
Это не удается. «Ошибка» означает, что он не входит в систему. Однако он захватывает веб-страницу, и я могу манипулировать данными HTML. Он просто не входит в систему. Яр! (Да, "ярг" был нужен)
Спасибо!