WWW: механизировать выбор формы - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь войти в 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());

Механизм не может видеть никаких форм на youtube.com/inbox, однако, как я уже сказал, я могу распечатать все формы по исходной ссылке, независимо от того, что яизмените его на ...

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

1 Ответ

2 голосов
/ 04 февраля 2011

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

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

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