我试图用WWW登录到Youtube:登录后机械化并使用窗体()打印出页面上的所有表单。我的脚本正在成功登录,并且成功导航到Youtube的.com /收件箱;但是,由于某种原因,Mechanize在Youtube.com/inbox上看不到任何表单。它只是返回空白。这里是我的代码:WWW:机械化表单选择
#!"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());
机械化是无法看到任何youtube.com/inbox形式,但是,就像我说的,我可以打印所有的形式从最初的环节,不管是什么我改变以...
在此先感谢。
我没有Youtube帐户,所以我无法测试运行您的程序。我想这是JavaScript生成表单的常见问题;当你打印`$ page`时,你不会在HTML中看到它们。如果确实如此,可以使用三个支持JS的机械化类中的一个,或者更好的是,放弃屏幕抓取并使用API:请参阅http://youtube.com/dev和[WebService :: GData :: YouTube上(http://p3rl.org/WebService::GData::YouTube)。 – daxim 2011-02-04 09:16:19