我正在使用WWW::Mechanize
并HTML::TokeParser
解析网站以获取更新。我无法在网站上提供任何详细信息,因为它需要登录。该网站基本上有一个数据表。我只是解析 html 直到我到达表格的第一行,检查它是否是我最后一次抓取的值,如果没有发送邮件。当我在现有表条目上对其进行测试时,这非常有效,除非发生实际更新时,抓取不会在我最后一次抓取时停止。它一直发送邮件,直到表用完并无限期地重复。我无法弄清楚发生了什么。我知道没有网站,没有多少人可以验证,但无论如何我都会发布我的代码。我会很感激关于可能出错的想法。
代码:
sub func{
my ($comid, $mechlink) = @_;
my $mechanize = WWW::Mechanize->new(
noproxy => 0,
stack_depth => 5,
autocheck => 1
);
$mechanize->proxy( https => undef );
eval{
my $me = $mechanize->get($mechlink);
$me->is_success or die $me->status_line;
};
return $comid if ($@);
my $stream = HTML::TokeParser->new( \$mechanize->{content} ) or die $!;
while ( $tag = $stream->get_tag('td') ) {
if( $tag->[1]{class} eq 'dateStamp' ) {
$dt = $stream->get_trimmed_text('/td');
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$name = $stream->get_trimmed_text('/td') if( $tag->[1]{class} eq 'Name' );
return $comid unless( $tag->[1]{class} eq 'Name' );
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$info = $stream->get_trimmed_text('/td');
print "$name?\n";
return $retval if($info eq $comid);
print "You've Got Mail! $info $comid\n";
$tcount++;
$retval = $info if($tcount == 1);
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$link = "http://www.abc.com".$tag->[1]{href} if ($tag->[0] eq 'a' );
my $outlook = new Mail::Outlook();
my $message = $outlook->create();
$message->To('abc@def.com');
$message->Cc('abc@def.com;abc@def.com');
my $hd = "$name - $info";
$message->Subject($hd);
$message->Body(" ");
$message->Attach($link);
$message->send;
}
}
}