gpt4 book ai didi

perl - 如何通过 IE::Mechanize 中的包 "Can' 错误摆脱 "warn"t 定位对象方法 "sssself"?

转载 作者:行者123 更新时间:2023-12-01 11:08:56 24 4
gpt4 key购买 nike

我在玩 Win32::IE::Mechanize。我正在尝试一个脚本来自动访问我的六个基于 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 给出以下神秘错误消息时

Can't locate object method "warn" via package "sssself" (perhaps you forgot to l oad "sssself"?) at C:/Perl/site/lib/Win32/IE/Mechanize.pm line 971.

0.009_17 开发版给了我一些非常非常有意义的信息:

No inputcontrol by the name 'Username' at E:\mailme.pl line 33

带着这个错误信息,我查看了登录页面的源文件,发现字段id应该是“UserName”,而不是“Username”。

所以我解决了我的问题:)谢谢大家!

最佳答案

Win32::IE::Mechanize 版本 0.009 似乎有错误。有一个 developer release 0.009_17这可能会更好。我还没有测试过,但至少“sssself”是固定的。如果不需要 IE,还有 WWW::Mechanize::FirefoxWWW::Mechanize 如果不需要浏览器。

关于perl - 如何通过 IE::Mechanize 中的包 "Can' 错误摆脱 "warn"t 定位对象方法 "sssself"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com