我尝试使用WWW:Mechanize登录到Youtube,并在登录后使用Forms()在页面上打印出所有表单。我的脚本成功登录,并且还成功导航至Youtube.com/inbox;但是,由于某些原因,Mechanize在Youtube.com/inbox上看不到任何表格。它只是返回空白。这是我的代码:
#!"C:\Perl64\bin\perl.exe" -T
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use WWW::Mechanize;
use Data::Dumper;
my $q = CGI->new;
$q->header();
my $url = 'https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http://www.youtube.com/signin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252Findex&hl=en_US<mpl=sso';
my $mechanize = WWW::Mechanize->new(autocheck => 1);
$mechanize->agent_alias( 'Windows Mozilla' );
$mechanize->get($url);
$mechanize->submit_form(
form_id => 'gaia_loginform',
fields => { Email => 'myemail',Passwd => 'mypassword' },
);
die unless ($mechanize->success);
$url = 'http://www.youtube.com/inbox';
$mechanize->get($url);
$mechanize->form_id('comeposeform');
my $page = $mechanize->content();
print Dumper($mechanize->forms());
Mechanize无法在youtube.com/inbox上看到任何表格,但是,就像我说的那样,无论我将其更改为什么,我都可以从初始链接中打印所有表格。
提前致谢。
最佳答案
与往常一样,最好的调试方法之一是print
获得的内容,并检查它是否符合您的期望。这也适用于您的问题。
对于您的情况,如果您使用print $mechanize->content()
,则会看到您没有获得期望的页面。 YouTube希望您遵循JavaScript重定向,以完成跨域登录操作。您在这里有多种选择:
/location\.replace\("(.+?)"/
关于perl - WWW:机械化表格选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893625/