私は Win32::IE::Mechanize で遊んでいます。6 つの Web ベースの電子メール アカウントに自動的にアクセスするスクリプトを試しています。スクリプトは基本的に機能しますが、perl は一種の不可解な「パッケージ "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 $@;
何事もなかったふりをする?
どんなコメントも大歓迎です:)
アップデート
私の醜いコードをクリーンアップしてくれてありがとう、@daotoad :) ネストされた構造ははるかに保守しやすく、目に優しいと思います。
そして、問題のモジュールのより良いバージョンを教えてくれた@Ericに感謝します:)
問題は、Win32::IE:Mechanize 0.009 が次の不可解なエラー メッセージを表示する場合です。
C:/Perl/site/lib/Win32/IE/Mechanize.pm の 971 行目で、パッケージ "sssself" を介してオブジェクト メソッド "warn" を見つけることができません (おそらく "sssself" をロードするのを忘れていましたか?)。
0.009_17 Dev リリースは、非常に意味のあるメッセージを私に与えてくれます。
E:\mailme.pl 行 33 に「Username」という名前による入力制御がありません
このエラー メッセージを念頭に置いて、ログイン ページのソース ファイルを確認したところ、フィールド ID は「Username」ではなく「UserName」であることが判明しました。
だから私は私の問題を修正しました:)みんなありがとう!