у меня есть это очень простой Mojolicious Lite сценарий:WWW :: Механизируйте :: PhantomJS код в скрипте Mojolicious Lite не работает, когда работает в фоновом режиме
#!/usr/bin/env perl
use v5.10;
use WWW::Mechanize::PhantomJS;
use Mojolicious::Lite;
my $mech = WWW::Mechanize::PhantomJS->new();
$mech->get('http://stackoverflow.com/');
get '/test' => sub {
my $c = shift;
$mech->get("https://stackoverflow.com/questions");
$c->render(template => 'activity');
};
app->secrets(['test secret']);
app->start;
__DATA__
@@ activity.html.ep
<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body><h2>Test</h2></body>
</html>
Когда я запустить его с помощью Hypnotoad в режиме переднего плана (hypnotoad -f ./script.pl
), а также доступ /test
URL - Я получаю тестовую страницу и очистить журналы:
[Fri Dec 11 18:00:23 2015] [info] Listening at "http://*:8080"
[Fri Dec 11 18:00:23 2015] [info] Manager 3011 started
[Fri Dec 11 18:00:23 2015] [info] Creating process id file "/home/username/pc_activity/demo_site/hypnotoad.pid"
Когда я начинаю его с помощью фонового режима (hypnotoad ./script.pl
), и получить доступ к /test
URL - я получаю «что-то пошло совсем не так " ошибка страницы с метанием хищника.
[Fri Dec 11 17:58:07 2015] [info] Listening at "http://*:8080"
[Fri Dec 11 17:58:07 2015] [info] Manager 2964 started
[Fri Dec 11 17:58:07 2015] [info] Creating process id file "/home/username/pc_activity/demo_site/hypnotoad.pid"
[Fri Dec 11 17:58:14 2015] [error] Error while executing command: get: Server returned error message Can't connect to localhost:8910
Connection refused at /usr/local/share/perl/5.18.2/LWP/Protocol/http.pm line 47, <DATA> line 49.
instead of data at /usr/local/share/perl/5.18.2/Selenium/Remote/Driver.pm line 310.
Оказывается localhost:8910
это настройки по умолчанию для PhanomJS работать на в режиме WebDriver. Что это не на моей машине. Но даже если я начну, а затем получить доступ к URL, я все еще получаю ошибку:
[Fri Dec 11 18:41:01 2015] [error] Error while executing command: get: Server returned error message Variable Resource Not Found - {"headers":{"Accept":"application/json","Connection":"TE, close","Content-Length":"45","Content-Type":"application/json; charset=utf-8","Host":"localhost:8910","TE":"deflate,gzip;q=0.3","User-Agent":"libwww-perl/6.15"},"httpVersion":"1.1","method":"POST","post":"{\"url\":\"https://stackoverflow.com/questions\"}","url":"/session/98799e80-a060-11e5-8907-0b365878087d/url","urlParsed":{"anchor":"","query":"","file":"url","directory":"/session/98799e80-a060-11e5-8907-0b365878087d/","path":"/session/98799e80-a060-11e5-8907-0b365878087d/url","relative":"/session/98799e80-a060-11e5-8907-0b365878087d/url","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/session/98799e80-a060-11e5-8907-0b365878087d/url","queryKey":{},"chunks":["session","98799e80-a060-11e5-8907-0b365878087d","url"]}} instead of data at /usr/local/share/perl/5.18.2/Selenium/Remote/Driver.pm line 310.
Я думаю, я не понимаю, почему она работает в режиме переднего плана, а не в фоновом режиме Режим. И затем, что я могу сделать, чтобы запустить его в фоновом режиме?
Спасибо! Я попробую это, так как этот сценарий не ожидает много хитов. Причина, по которой я хотел этого заявить, заключалась в том, чтобы иметь возможность входа на сайт (не S.O.) «внешние» запросы, а затем на запросы анализировать вещи на страницах моей учетной записи. Если я инициализирую каждый запрос, мне нужно будет каждый раз заходить в систему. Но тогда, возможно, нет, если я включу сохранение файлов cookie. Я буду играть с ним .... Больше кода для простой вещи, которую я хотел :) – flamey
Вы можете попытаться сделать переменную, которая инициализируется при первом запросе этому ребенку. Это может сделать трюк. то есть '$ mech || = initialize_mech();', а затем 'my $ mech;' без инициализации там, где он есть. – bolav