URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4950
[ Назад ]

Исходное сообщение
"Здравствуйте! возможна ли циклическая загрузка страниц в браузере"

Отправлено Dmitriy , 10-Май-07 17:47 
Если кто сталкивался подскажите пожалуйста - хочу в написать CGI(Perl)-скрипт при открытии браузером, который бы с определённой периодичностью загрузал бы по очереди несколько web-страниц. Пробовал модуль LWP::Simple он все указанные мной страницы загружает в одно окно браузера и останавливается, т.е. все пять страниц размещаются в одном окне, а мне нужно симитировать пользователя который ходит поочерёдно по пяти страницам с определённым периодом времени. Заранее благодарю.

Содержание

Сообщения в этом обсуждении
"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено andy , 11-Май-07 06:22 
То есть, одна страница должна сменять другую через некоторое время?
Тогда организовать массив нужных ссылок, в заголовки вставлять refresh, в урле как параметр передавать индекс необходимого элемента массива. Что-то типа

@urls=(
       "http://site.ru/page1", "http://site.ru/page2",
       "http://site.ru/page3", "http://site.ru/page4"
       );
# сколько секунд показывать страницу пользователю
$timeout = 5;
# получаем индекс запрошенной страницы (0,1,2 или 3)
$current_url_num = $ENV{QUERY_STRING};
# что грузить в следующий раз (мотаем по кругу)
$next_url_num = $current_url_num == scalar(@urls) ? 0 : $current_url_num++;
# формируем новую ссылку
$next_url = $ENV{SCRIPT_NAME} .'?'. $next_url_num;

print "Refresh: $timeout; url=$urls[$next_url_num]\n";
print "Pragma: no-cache\n";                      # ибо нефиг
print "Cache-Control: no-cache\n";               # эти
print "Expires: Fri, 30 Oct 1998 14:19:41 GMT\n" # документы кэшировать
print "Content-Type: text/html\n";
print "\n";

get_page_and_print_it( $urls[$current_url_num] );


sub get_page_and_print_it($)  {
  my $url = shift;
  # закачка и печать документа $url
  # ...
}

__END__


писалось быстро, без проверок, чтобы просто показать идею


"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено Dmitriy , 11-Май-07 09:40 
спасибо огромное запомощь,
только вот получается такая штука - при открытии браузером делается пауза 5 сек потом идём к первому элементу массива (первый url) соответственно управление передаётся этой странице и основной скрипт уже теряет управление, а загрузившаяся страница не знает (да и не должна знать) что нужно через пять секунд грузить другую. Вобщем в итоге - грузиться перваяя страница и на этом всё останавливается.



"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено andy , 11-Май-07 09:58 
нет.
Допустим, наш скрипт доступен по http://myownsite.ru/cgi-bin/rollover.cgi
Строка
  $next_url = $ENV{SCRIPT_NAME} .'?'. $next_url_num;
сформирует url вида /cgi-bin/rollover.cgi?1
число на конце - индекс эл-та массива, где хранится нужный урл. То есть будет запрошен тот же rollover.cgi, но уже с другим параметром. А уж rollover в функции get_page_and_print_it должен скачать урл, находящийся в массиве под индексом $current_url_num, убрать из ответа http`шные заголовки и отправить страницу в stdout (print`ом ). Заголовки мы подставляем свои перед вызовом функции, так как мы хотим иметь рефреш.

Кстати, чтобы первый раз нормально отработало, надо бы поменять
$current_url_num = $ENV{QUERY_STRING};
на
$current_url_num = $ENV{QUERY_STRING} || 0;
при отсутствии параметра в запросе принять, что пользователь хочет первую по списку страницу

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


"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено andy , 11-Май-07 10:01 
>Вызывается один и тот же скрипт, но с
>разными параметрами. На основе полученного параметра скрипт решает, какую страницу грузить
подставляя свои заголовки, где указан рефреш через энцать секунд на самого себя



"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено Dmitriy , 11-Май-07 11:05 
Всё! Понял Вашу идею, наверное так длжно работать, сейчас буду доводить до ума :), кстати у  Вас завидный стиль программирования я пока так не умею или не привык. Спасибо большое за помощь!


"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено andy , 11-Май-07 11:26 
>кстати у  Вас завидный стиль программирования
спасибо за комплимент, если честно, никогда так не думал :)
Просто стараюсь сначала сформулировать порядок действий на человеческом языке, а потом описать то же самое в терминах машинного языка, начиная с самого высокого уровня абстракции и постепенно спускаясь вглубь, описывая более детальные вещи.
Приходит со временем, после того, как пару раз попадется непонятный запутанный код без комментариев и ты долго материшь кодера, а потом оказывается, что это писал ты сам с год назад.

>Спасибо большое за помощь!
а пожалуйста :)


"Здравствуйте! возможна ли циклическая загрузка страниц в бра..."
Отправлено Dmitriy , 11-Май-07 15:45 
В общем получилось так (за простоватый стиль прошу простить - учусь)

use LWP::Simple;

@urls=("http://www.server.ru/index1.html",
       "http://www.server.ru/index2.html",
       "http://www.server.ru/index3.html",
       "http://www.server.ru/index4.html");

$x=scalar(@urls)-1;
# сколько секунд показывать страницу пользователю
$timeout = 5;
# получаем индекс запрошенной страницы (0,1,2 или 3)
$current_url_num = $ENV{QUERY_STRING} || 0;
# что грузить в следующий раз (мотаем по кругу)
if ($current_url_num>=$x) {$current_url_num="-1";}
  $current_url_num = $current_url_num+1;
  $next_url_num=$current_url_num;
# формируем новую ссылку
$next_url = $ENV{SCRIPT_NAME} ."?".$next_url_num;

print "Refresh: $timeout; url=$next_url\n";
print "Pragma: no-cache\n";                      # ибо нефиг
print "Cache-Control: no-cache\n";               # эти
print "Expires: Fri, 30 Oct 1998 14:19:41 GMT\n"; # документы кэшировать
print "Content-Type: text/html\n\n";

$content = get($urls[$next_url_num]); # получаем док по ссылке
die "Couldn't get it!" unless defined $content;
print $content; # и выводим на нашу страничку