Я все еще изучаю Perl, поэтому извиняюсь за отсутствие технических знаний и общего новичка.
Я пытаюсь написать скрипт для входа в мою учетную запись работ курса и загрузки всех файлов. Я могу оставаться там только около часа, пока мне не придется повторно войти в систему, поэтому я хочу выполнить процедуру входа в подпрограмму таким образом, чтобы в зависимости от времени я мог просто позвонить, войти в систему и продолжить ползет. Моя проблема в том, что я хочу иметь возможность передавать браузер (по терминологии, см. Пример ниже, в котором будет больше смысла) между подпрограммой и основным кодом.
Это то, что у меня пока и не работает:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $browser = WWW::Mechanize->new();
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url,$browser) = @_;
$browser -> get($url);
$browser -> form_name('theform');
$browser -> field ('username' => $user);
$browser -> field ('password' => $pass);
$browser -> click ('log in');
return $browser;
}
Это говорит о том, что я не могу "вызвать метод 'get' для неопределенного значения" на $browser -> get($url);
. Поэтому я предполагаю, что инициализация браузера в основном коде не сработала (так как он не был передан подпрограмме) Да / Нет ??
Хорошо, круто, тогда я попытался сделать это в самой подпрограмме следующим образом:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url) = @_;
my $browser = WWW::Mechanize->new();
$browser -> get($url);
$browser -> form_name('theform');
$browser -> field ('username' => $user);
$browser -> field ('password' => $pass);
$browser -> click ('log in');
return $browser;
}
На этот раз я получаю следующее сообщение об ошибке: «Отсутствует базовый аргумент в C: /Perl64/lib/HTTP/Response.pm line 93»
Итак, я удалил строки в подпрограмме, пока она не заработала, и обнаружил, что она компилируется, когда выглядит следующим образом:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url) = @_;
my $browser = WWW::Mechanize->new();
# $browser -> get($url);
# $browser -> form_name('theform');
# $browser -> field ('username' => $user);
# $browser -> field ('password' => $pass);
# $browser -> click ('log in');
return $browser;
}
но он, очевидно, просто возвращает мусор.
Я думаю, что проблема, как я уже сказал, заключается в попытке передать объект браузера в подпрограмму, поскольку я не думаю, что это просто скаляр (потому что я могу получить из него такие вещи, как "контент"), но я ' м на самом деле действительно не уверен. Я также смущен, потому что, когда я инициализирую это в подпрограмме, я все еще получаю проблему !! ????? Я также пытался сделать $ browser глобальной переменной, но я получаю одинаковые ошибки в обоих кодах. Очевидно, я что-то здесь упускаю.
Заранее спасибо всем, кто прошел через это, я знаю, что это немного скучно, возможно, за действительно простой ответ, который поражает мою неопытность.