Я играю с Win32 :: IE :: Mechanize. Я пытаюсь сценарий для автоматического доступа к шести из моих учетных записей электронной почты в Интернете. Сценарий в основном работает, но Perl выдает своего рода загадочную ошибку «Не удается найти метод объекта» warn »через пакет« sssself »(возможно, вы забыли загрузить« sssself) ». Несмотря на ошибку, скрипт все еще может выполнить свою работу Но я хочу избавиться от этого и понять, почему это происходит. Ниже приведен сценарий. Пожалуйста, прокомментируйте, где я могу улучшить код. Спасибо, как всегда.
use strict;
use Win32::IE::Mechanize;
my @accounts = (
'http://mail.21cn.com',
'frmmail1',
{
'Username' => 'myusername',
'passwd' => 'mypassword',
},
'http://mail.126.com',
'form',
{
'user' => 'myusername',
'password' => 'mypassword',
},
......
......
......
);
sub arg{
shift (@accounts);
}
while(@accounts){
my $mech = Win32::IE::Mechanize->new(visible=>1);
my $url = arg;
my $form = arg;
my $account = arg;
$mech->get($url);
$mech->form_name($form);
eval {$mech->set_fields(%$account);};
warn $@ if $@;
$mech->click();
}
Я знаю, что-то не так с линией
$mech->set_fields(%$account);
Но как я могу это исправить? или я должен просто удалить
warn $@ if $@;
и делать вид, что в этом нет ничего плохого?
Любые комментарии приветствуются:)
UPDATE
Спасибо, @daotoad, за очистку моего уродливого кода :) Я думаю, что вложенная структура гораздо удобнее в обслуживании и приятна на глаз.
и спасибо, @Eric, за указание на лучшую версию рассматриваемого модуля:)
Хорошо, дело в том, что Win32 :: IE: Mechanize 0.009 выдает следующее загадочное сообщение об ошибке
Не удается найти метод объекта "warn" через
пакет "sssself" (возможно, вы забыли
чтобы я "sssself"?) в
C: /Perl/site/lib/Win32/IE/Mechanize.pm
линия 971.
релиз разработчика 0.009_17 дает мне очень и очень значимое сообщение:
Нет ввода управления по имени «Имя пользователя»
по E: \ mailme.pl, строка 33
Имея это в виду сообщение об ошибке, я проверил исходный файл страницы входа в систему и оказалось, что идентификатор поля должен быть «Имя пользователя», а не «Имя пользователя».
Так что я исправил свою проблему :)
Спасибо, ребята!