WWW: механизировать выбор формы

Я пытаюсь войти в Youtube с помощью WWW: Механизировать и использовать формы (), чтобы распечатать все формы на странице после входа в систему. Мой сценарий входит в систему успешно, а также успешно переходит на 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&ltmpl=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, однако, как я уже сказал, я могу распечатать все формы по исходной ссылке, независимо от того, что я изменяю на...

Заранее спасибо.

1 ответ

Решение

Как всегда, одним из лучших подходов к отладке является print что вы получаете, и проверьте, если это то, что вы ожидали. Это относится и к вашей проблеме.

В вашем случае, если вы print $mechanize->content() вы увидите, что вы не получили ожидаемую страницу. YouTube хочет, чтобы вы выполнили редирект JavaScript, чтобы выполнить междоменный вход в систему. У вас есть несколько вариантов здесь:

  • разобрать возвращенный контент вручную - т.е. /location\.replace\("(.+?)"/
  • попробуй, чтобы твой код анализировал JavaScript (взгляни на WWW:: Scripter)
  • [рекомендуется] использовать API YouTube для управления почтовыми ящиками
Другие вопросы по тегам