Perl 使用WWW::Mechanize拉取经过身份验证的html页面获取javascript错误

Perl 使用WWW::Mechanize拉取经过身份验证的html页面获取javascript错误,perl,Perl,去年我写了一个perl脚本,它连接到cbsports.com,经过身份验证,然后为我们的梦幻足球联赛拉下了所有的分数。即使它使用javascript,我也能够直接拉取正确的html页面来获得所需的内容。但有些事情发生了变化,现在我得到的只是“你需要启用JavaScript来运行这个应用程序”。我正在使用WWW::Mechanize,但我也尝试使用LWP::UserAgent。当我使用后者时,我可以看到身份验证是有效的,它列出了指向文档的“302找到”链接。但是如果我在这个链接上做了一个get,它

去年我写了一个perl脚本,它连接到cbsports.com,经过身份验证,然后为我们的梦幻足球联赛拉下了所有的分数。即使它使用javascript,我也能够直接拉取正确的html页面来获得所需的内容。但有些事情发生了变化,现在我得到的只是“你需要启用JavaScript来运行这个应用程序”。我正在使用WWW::Mechanize,但我也尝试使用LWP::UserAgent。当我使用后者时,我可以看到身份验证是有效的,它列出了指向文档的“302找到”链接。但是如果我在这个链接上做了一个get,它就会返回到javascript错误。但真正奇怪的是,在身份验证完成后使用LWP useragent检查时,我会跳过302 found链接,如果我转到live scores页面,它会工作,如果我转到schedule页面(我更喜欢的地方),它会得到javascript错误。不知道为什么。不管怎样,还有什么我可以补充的来帮助诊断的吗。下面是到目前为止的小代码

use strict;
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;

my $url = "https://www.cbssports.com/login?xurl=http%3A%2F%2Fmyleague.football.cbssports.com%2Fschedule%2Ffull";
my $username = "myuser";
my $password = "mypass";
my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->agent_alias('Linux Mozilla');
$mech->get($url);
$mech->form_id('login_form');
$mech->field("userid", $username);
$mech->field("password", $password);
$mech->click;

<body><noscript>You need to enable JavaScript to run this app.</noscript>
使用严格;
使用警告;
使用WWW::Mechanize;
使用HTTP::Cookies;
我的$url=”https://www.cbssports.com/login?xurl=http%3A%2F%2Fmyleague.football.cbssports.com%2Fschedule%2Ffull";
我的$username=“myuser”;
my$password=“mypass”;
my$mech=WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->agent_别名('Linux-Mozilla');
$mech->get($url);
$mech->form_id('login_form');
$mech->field(“userid”,$username);
$mech->字段(“密码”,$password);
$mech->单击;
您需要启用JavaScript才能运行此应用程序。
现在,如果我使用LWP::UserAgent方法,这就是我看到的。它似乎没有执行重定向

my $urllive = "http://myleague.football.cbssports.com/scoring/live";
my $urlfull = "http://myleague.football.cbssports.com/schedule/full";

my $ua = LWP::UserAgent->new();
$ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });
$ua->agent('Mozilla/5.0');
$ua->credentials("$url", "realm-name", '$username','$password');
my $max = $ua->max_redirect;
$ua->max_redirect( 7 );
my $resp = $ua->post("$url",
   { "form_id" => "login_form",
     "userid" => "$username",
     "password" => "$password",
   });
print $resp->content;


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="https://www.cbssports.com/registration?master_product=150&amp;user_action=user_signin&amp;end=http%3A%2F%2Fmyleague.football.cbssports.com%2Fschedule%2Ffull%3Ftid%3D1600180459%26login%3Dconfirmed">here</A>.<P>
my$urllive=”http://myleague.football.cbssports.com/scoring/live";
我的$urlfull=”http://myleague.football.cbssports.com/schedule/full";
my$ua=LWP::UserAgent->new();
$ua->cookie_jar({file=>“$ENV{HOME}/.cookies.txt”});
$ua->agent('Mozilla/5.0');
$ua->凭证($url、$realm name、$username、$password);
我的$max=$ua->max\U重定向;
$ua->max_重定向(7);
我的$resp=$ua->post($url),
{“表单id”=>“登录表单”,
“userid”=>“$username”,
“密码”=>“$password”,
});
打印$resp->content;
302发现
建立
文档已移动。


在这一点上,如果我为$urllive执行get,它会工作,如果我为$urlfull执行get,它会出现javascript错误。我知道这是一条很长的线索,但如果有任何帮助,我们将不胜感激。

他们很有可能已经更新到一个更现代化的网站,其中包含客户端前端应用程序和API调用。在浏览器中登录网站,并查看开发人员工具的“网络”选项卡以获取API调用。有一个很好的机会,一旦你有了会话令牌,你就可以直接拉他们的API来查询数据。同时检查他们的条款和服务,看看他们是否允许这样做。他们很有可能已经通过客户端前端应用程序和API调用更新到更现代化的网站。在浏览器中登录网站,并查看开发人员工具的“网络”选项卡以获取API调用。有一个很好的机会,一旦你有了会话令牌,你就可以直接拉他们的API来查询数据。还要检查他们的条款和服务,看看他们是否允许这样做。