2016-05-04 3 views
2

Я просто делаю тестирование с использованием модуля WWW::Mechanize на Facebook, когда я пытаюсь запустить код ниже, он возвращает мне ошибкуНевозможно вызвать метод «header» по неопределенному значению на WWW/Mechanize.pm line 2566

не удается вызвать метод "заголовок" на неопределенное значение в C: /Strawberry/perl/vendor/lib/WWW/Mechanize.pm линии 2566.

#!/usr/bin/perl -w 
use WWW::Mechanize; 
my $mech = WWW::Mechanize->new(); 
# Connect to server 
$mech->get("https://www.facebook.com"); 
$mech->success or die $mech->response->status_line; 

# Log into server 

$mech->field('email', '[email protected]'); 
$mech->field('pass', 'xxxxxxx'); 
$mech->click_button(value => 'Log In'); 
+0

Это прекрасно работает для меня. Проверьте, какая инструкция в коде вызывает ошибку. Каков вывод из 'perl -MLWP -E ', например $ LWP :: VERSION'' и' perl -MWWW :: Mechanize -E', например $ WWW :: Mechanize :: VERSION''? Обратите внимание, что вы всегда должны * использовать '' strict''' и 'использовать предупреждения' all'' в верхней части * каждой * Perl-программы, которую вы пишете. Нет смысла использовать 'my' вообще без' use strict' на месте, и не нужно '-w' на строке shebang – Borodin

+0

$ LWP :: VERSION дать мне« Невозможно найти метод объекта » «через пакет« 6.15 »(возможно, вы забыли загрузить« 6.15 »?» и Mechanize :: VERSION is 1.75 – Zachary

+0

У вас должна быть очень старая версия Perl? – Borodin

ответ

3

Ваша страница открывается на другом языке, кроме английского. Вот почему вы получаете эту ошибку. Если вы быстро откроете страницу на английском языке, ошибка исчезнет. Попробуйте ниже адрес:

$mech->get("https://en-gb.facebook.com/"); 

или вы можете нажать непосредственно на экземпляре HTML::Form::SubmitInput, полученного с помощью этого:

$mech->current_form()->find_input(undef, 'submit'); 

или, как есть только один щелчок кнопки в форме вы можете использовать click с не аргументы.

$mech->click() 

или как это было предложено @Borodin можно непосредственно использовать (как электронная почта и поле пароля не переведено):

$mech->submit_form(with_fields => { 
         email => '[email protected]', 
         pass => 'xxxxxxx' 
        } 
       ); 
+1

* «Ваша страница открывается в мне другой язык, кроме английского »*, как вы это диагностировали? – Borodin

+0

Я открыл эту страницу из Индии. Он был открыт в «Маратхи» (местный langauage в Индии), и я получал ту же ошибку, что и OP. –

+0

Так как это может вызывать * «Невозможно вызвать метод« header »по неопределенному значению» *? – Borodin