2015-07-09 2 views
2

Я пытаюсь обновить статус на facebook с помощью Mechanize.I мочь войти в систему, используя скрипт, но не смог обновить. Я подтвердил, что id формы для обновления статуса - "u_0_w". Но выбор метода form_id говорит: «Нет формы с идентификатором« u_0_w «». Мой сценарий заключается в следующем:Обновление статуса Facebook с использованием WWW :: Mechanize

use WWW::Mechanize; 
use strict; 
use warnings; 
use Data::Dumper; 
use HTTP::Cookies::Netscape; 

my $cookiesfilename='/home/xxx/xxx/cookies.txt'; 
my $out; 
my $mech = WWW::Mechanize->new(cookie_jar => HTTP::Cookies::Netscape->new(file => $cookiesfilename)); 
$mech->get("https://www.facebook.com/login.php"); 
my $response=$mech->submit_form(
    fields => { 
     email => '[email protected]', 
     pass => 'xxxxx', 
    } 
); 
#my $array=$mech->forms(); 
#$mech->get('/home.php'); 
print Dumper($mech->forms()); 
#$mech->form_id("u_0_w"); 
$mech->submit_form(
    fields => { 
     xhpc_message_text=>'Why so serious' 
    } 
); 
print $response->status_line; 
open($out, ">", "output_page.html") or die "Can't open output_page.html: $!"; 
print $out $response->decoded_content; 

Затем я попытался напечатать все формы на странице с помощью Dumper вывода является:

$VAR1 = bless({ 
      'default_charset' => 'UTF-8', 
      'enctype' => 'application/x-www-form-urlencoded', 
      'accept_charset' => 'UNKNOWN', 
      'action' => bless(do{\(my $o = 'https://www.facebook.com/search/web/direct_search.php')}, 'URI::https'), 
      'method' => 'GET', 
      'attr' => { 
         'method' => 'get' 
         }, 
      'inputs' => [ 
          bless({ 
            'tabindex' => '-1', 
            'value' => '1', 
            'class' => '_42ft _42fu _4w98', 
            'type' => 'submit' 
            }, 'HTML::Form::SubmitInput'), 
          bless({ 
            '/' => '/', 
            'autocomplete' => 'off', 
            'tabindex' => '1', 
            'name' => 'q', 
            'aria-label' => 'Search Facebook', 
            'value_name' => '', 
            'class' => 'inputtext _586f', 
            'type' => 'text', 
            'id' => 'u_0_b', 
            'role' => 'combobox', 
            'placeholder' => 'Search Facebook' 
            }, 'HTML::Form::TextInput') 
         ] 
      }, 'HTML::Form'); 

Это означает, что он не обнаруживает форму обновления статуса его обнаружения только Facebook поиск форма.

  1. В чем может быть проблема для механизации не обнаруживать все элементы формы?
  2. Форма содержит <button type="submit">. Поддерживает ли это механизм?
+3

Может быть, вы должны смотреть в API, которые facebook предоставляет. Использование скриншотов/автоматизации, подобных этому, может быть против их ToS. – simbabque

+0

@simbabque да жаль, что это 'form_id'. Я не злоупотребляю им, просто любопытно, почему он не работает. –

+1

Не _might be_, это __is__ против их ToS. И они предпринимают активные меры против него, так что уже может быть, почему он «не работает». // Если вы хотите что-либо сделать «на» Facebook, используйте их API. – CBroe

ответ

0

Зачем использовать Механизацию для этого? Для CPAN уже доступен модуль.

Посмотрите на WWW::Facebook::API.

Также см связанный вопрос: How do I use Perl's WWW::Facebook::API to publish to a user's newsfeed?

Синопсис:

use WWW::Facebook::API; 
my $facebook = WWW::Facebook::API->new(
    desktop => 0, 
    api_key => $fb_api_key, 
    secret => $fb_secret, 
    session_key => $query->cookie($fb_api_key.'_session_key'), 
    session_expires => $query->cookie($fb_api_key.'_expires'), 
    session_uid => $query->cookie($fb_api_key.'_user') 
); 

my $response = $facebook->stream->publish(
message => qq|Test status message|, 
); 
Смежные вопросы