2014-01-03 4 views
1

У вас возникли проблемы с WWW :: Механизмом.Perl WWW :: Механизация и печенье

страница Я пытаюсь загрузить содержит Javascript, который ожидает в течение 30 секунд, а затем разобрать кнопку, что нужно нажать (чтобы подтвердить, что я согласен с правилами сайта :))

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

Эти куки-л, как это: согласились => 1, lastvisit => 1388753990, lastseen => 0

Как я могу получить нужную страницу с этим печеньем "на борту"?

Код:

my $cookie_jar = HTTP::Cookies->new; 
my $agent  = WWW::Mechanize->new(cookie_jar => $cookie_jar); 

$cookie_jar->set_cookie("agreed"=>1,"lastseen"=>0,"lastvisit"=>1388753990); 

$agent->get('http://www.example.com'); 

print $agent->content(); 

Спасибо за помощь!

+0

Вы можете использовать 'LWPx :: ParanoidAgent' для простых запросов и установить cookie_jar, вы можете найти обходной путь установка файла cookie вручную, но если вам нужно выполнить JS, вы можете использовать 'JavaScript :: SpiderMonkey' – Mugiwara

ответ

2

Если вы хотите реальный Mechanize перейти к WWW-Mechanize-Firefox Тогда вы получите реальный рабочую среду JS:

use WWW::Mechanize::Firefox; 
my $mech = WWW::Mechanize::Firefox->new(); 
$mech->get('http://ursite.com'); 

# The submit button is generated after the page has loaded 

my $retries = 10; 
while ($retries-- and ! $mech->is_visible(xpath => '//*[@id="submit"]')) { 
     sleep 1; 
}; 
die "Timeout" if 0 > $retries; 

# Now the element exists 
$mech->click({xpath => '//*[@id="submit"]'}); 
+0

Perfect! Спасибо :) Но у меня есть небольшая проблема с установкой WWW :: Mechanize :: Firefox на сервере без видеокарты :) Есть ли способ установить этот модуль из оболочки, не запустив Firefox и gettin MozRepl? – tester3

+0

Конечно. Используйте сервер VNC или фреймбуфер. –

Смежные вопросы