#!/usr/bin/perl
use WWW::Mechanize;
use Compress::Zlib;
my $mech = WWW::Mechanize->new();
my $username = ""; #fill in username here
my $keyword = ""; #fill in password here
my $mobile = $ARGV[0];
my $text = $ARGV[1];
$deb = 1;
print length($text)."\n" if($deb);
$text = $text."\n\n\n\n\n" if(length($text) < 135);
$mech->get("http://wwwl.way2sms.com/content/index.html");
unless($mech->success())
{
exit;
}
$dest = $mech->response->content;
print "Fetching...\n" if($deb);
if($mech->response->header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech->update_html($dest);
}
$dest =~ s/<form name="loginForm"/<form action='..\/auth.cl' name="loginForm"/g;
$mech->update_html($dest);
$mech->form_with_fields(("username","password"));
$mech->field("username",$username);
$mech->field("password",$keyword);
print "Loggin...\n" if($deb);
$mech->submit_form();
$dest= $mech->response->content;
if($mech->response->header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech->update_html($dest);
}
$mech->get("http://wwwl.way2sms.com//jsp/InstantSMS.jsp?val=0");
$dest= $mech->response->content;
if($mech->response->header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech->update_html($dest);
}
print "Sending ... \n" if($deb);
$mech->form_with_fields(("MobNo","textArea"));
$mech->field("MobNo",$mobile);
$mech->field("textArea",$text);
$mech->submit_form();
if($mech->success())
{
print "Done \n" if($deb);
}
else
{
print "Failed \n" if($deb);
exit;
}
$dest = $mech->response->content;
if($mech->response->header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
#print $dest if($deb);
}
if($dest =~ m/successfully/sig)
{
print "Message sent successfully" if($deb);
}
exit;
运行时,此代码会停止并显示错误消息:
./sms.pl第65行中没有请求字段的表格 无法在/usr/share/perl5/vendor_perl/WWW/Mechanize.pm第1348行的未定义值上调用方法“value”。
答案 0 :(得分:3)
我猜是没有form with the fields“MobNo”&amp; http://wwwl.way2sms.com//jsp/InstantSMS.jsp?val=0
中的“textArea”确实没有,因为该网址的网页甚至没有<body>
标记。
答案 1 :(得分:1)
$dest =~ s/<form name="loginForm"/<form action='..\/auth.cl' name="loginForm"/g;
在脚本中找到上面的行并将其替换为以下
$dest =~ s/<form name="loginForm"/<form action='..\/Login1.action' name="loginForm"/ig;
这是必需的,因为最近way2sms重组了其主页,因此auth.cl
表单已重命名为Login1.action
答案 2 :(得分:0)
当我遇到这些问题时,我会打印整个HTML页面,以便我可以查看它。你期待的形式可能不存在。我怀疑你没有得到你认为自己的页面。
第一页提供了相当多的JavaScript处理来提交表单。由于WWW::Mechanize不会为您处理任何这些内容,我猜测您的第一个表单提交在某种程度上是不完整或无效的,因此您获得的下一页是某种错误页面。这是动态网站的常见问题。
您还可以比较Mech与支持JavaScript的浏览器的功能。使用某种HTTP嗅探工具来监视事务。交互式浏览器是否做了Mech不具备的额外功能?