使用Perl和Mechanize登录网站

msi*_*d65 5 perl login www-mechanize

所以这让我发疯了.基本上,当我硬编码我的用户名和密码时,我可以登录没问题.但我想提示用户输入用户名和密码,因为我想与他人分享这个程序.(该程序应该登录我们的课程网站并下载我们的所有课程工作信息 - 讲座,hw等)

此代码有效:

use WWW::Mechanize;
use LWP;

my $username = 'user'; 
my $password = 'pass';

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get('log-in url');
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试提示用户输入登录信息时,它现在可以正常工作.打印内容返回登录页面的html,而不是以下页面(所述用户的课程页面)

use LWP;
use WWW::Mechanize;

my $login_url = 'log-in url';
print "\nUser name: ";
my $username = <>;
print "Password: ";
my $password = <>;

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get($login_url);
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();
Run Code Online (Sandbox Code Playgroud)

这真的没有意义,因为它们基本上是一回事.我甚至在提示中输入了用户名/密码的引号,但仍然无济于事.....(我也意识到,如果没有网站和登录信息,它将很容易检查,对不起)

Can*_*ice 12

您需要运行chomp()用户的输入:

my $username = <>;
chomp($username);
Run Code Online (Sandbox Code Playgroud)

用户提供的文本末尾有回车符,这会搞砸您的登录信息.

  • @ msikd65 Camel Book的第1章有一个Filehandles部分,它包含:"行读取操作不会自动从你的输入行中删除换行符(你的输入将是,例如,"9 \n"`)." (4认同)