Механизация и приложение Facebook

#perl #www-mechanize

#perl #www-механизировать

Вопрос:

Я нашел один скрипт для доступа к информации о приложении с этого форума. В принципе, я получаю доступ к facebook apps и могу установить его автоматически.

Я попытался посмотреть, получу ли я страницу диалога разрешений, выполнив следующий код, но он возвращает не страницу разрешений, а первую страницу.

что делает facebook, так это несколько перенаправлений или meta или отправляет несколько других запросов, а затем отправляет пользователя на страницу разрешений, где мне нужно нажать кнопку разрешить. Но я не могу получить эту страницу окончательного разрешения для многих приложений. Вот код,

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

my $url = "http://www.facebook.com";

my $appurl = "http://apps.facebook.com/funmoods/";

my $username = 'mail';
my $password = 'pass';

my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);
$mech->form_name('menubar_login');
$mech->field(email => $username);
$mech->field(pass => $password);
$mech->click();
my $facebook_content = $mech->content();
# go to an app url
$mech->get($appurl);
my $app_content = $mech->content();
print "$app_contentn";
  

Я не знаю, почему mechanize не получает доступ к окончательной загруженной странице. потребовалось некоторое время для загрузки страницы разрешений, но mechanize всегда возвращает первую исходную страницу. Как я могу сказать mechanize подождать, пока он загрузит все страницы?

Нужна помощь, спасибо

Ответ №1:

Я думаю, вам следует использовать progress подраздел, унаследованный от LWP::UserAgent

 $ua->progress( $status, $request_or_response ) 
  

из документов:

Это вызывается часто, поскольку ответ получен независимо от того, как обрабатывается контент. Метод вызывается со статусом $ «begin» в начале обработки запроса и с состоянием $ «end» перед возвратом метода запроса. Между этими $ status будет доля полученного в данный момент ответа или строка «tick», если доля не может быть вычислена.

Когда $status равен «begin», вторым аргументом является объект запроса, в противном случае это объект ответа.