Страница Ивана Рощина > Статьи >

© Иван Рощин, Москва

ZXNet: 500:95/462.53
E-mail: bestview@mtu-net.ru
WWW: http://www.ivr.da.ru

Автоматизация открытия документов в браузере Opera с помощью Perl-скрипта

Радиомир. Ваш компьютер» 9/2005)

Как-то мне надо было решить такую задачу: обеспечить, чтобы в указанное время автоматически запускался браузер (Opera 5.12) и в нём открывались окна с указанными документами — так, чтобы после открытия каждого окна была пауза определённой продолжительности. Последнее обусловлено тем, что при одновременном открытии нескольких документов они загружаются параллельно, так что скорость загрузки каждого из них невелика (у меня модем на 14400 бит/с). Как я не раз замечал, при этом некоторые документы так и не загружаются до конца (видимо, сервер, отдающий документ, досрочно разрывает соединение). А если загружать их по очереди, то всё нормально.

Для этого я написал простой скрипт на Perl. Возможно, он пригодится и вам для решения такой же или похожей задачи. Конечно, нужно будет внести в скрипт соответствующие изменения, если у вас ситуация не точь-в-точь такая же, как у меня.

Текст скрипта приведён ниже.

#!/usr/bin/perl

$run_time_h='12'; # Нужное время запуска (часы).
$run_time_m='00'; # Нужное время запуска (минуты).

@pages=(          # Список адресов открываемых страниц.
'http://example1/',
'http://example2/',
'http://example3/'
);

# Проверка: в адресах не должно быть символа '"', так как этим
# символом адреса ограничиваются, когда передаются "Опере"
# в командной строке.

foreach $page (@pages)
{
 if ($page=~m'"') {die ("Error: found '\"' in \"$page\"!\n")}
}

# Ждём указанного времени запуска.

print ("Waiting run time ($run_time_h:$run_time_m)...\n");
while (@time=localtime,
       $time[2]*60+$time[1] != $run_time_h*60+$run_time_m)
{
 sleep (20); # Интервал (в секундах) между проверками времени.
}

# Запускаем "Оперу" и ждём 60 секунд, чтобы она успела
# загрузиться.

print (scalar(localtime)."   Starting \"Opera\"...\n");
system ('start "C:\Program Files\Opera\Opera.exe"');
print ("Pause...\n");
sleep (60);

# По очереди открываем перечисленные в списке @pages страницы.
# После передачи "Опере" адреса страницы ждём 45 секунд.

foreach $page (@pages)
{
 print (scalar(localtime)."   Opening page \"$page\"...\n");

 $page=~s'%'%%'g; # Удваиваем "%" в адресе, чтобы командный
                  # интерпретатор Windows считал этот символ
                  # обычным символом.

 system ('start "C:\Program Files\Opera\Opera.exe" "'.$page.'"');
 print ("Pause...\n");
 sleep (45);
}

Время запуска «Оперы» задаётся в переменных $run_time_h и $run_time_m (соответственно часы и минуты). Адреса открываемых документов задаются в списке @pages. Само собой, адресов может быть не три, как для примера приведено в скрипте, а столько, сколько нужно. Адреса указываются в одиночных кавычках и перечисляются через запятую.

Если адрес длинный, его можно разделить на части удобной длины и записать каждую часть в отдельной строке, заключив в одиночные кавычки; между частями должна стоять точка (в Perl это оператор склейки строк). Вот пример:

'адрес 1',
'адрес 2 (часть 1)'.
'адрес 2 (часть 2)'.
'адрес 2 (часть 3)',
'адрес 3'

Адреса не должны содержать одиночных кавычек (так как сам адрес ограничивается ими) и двойных кавычек (они используются как ограничители при передаче адреса «Опере»). Вообще-то кавычки и так не входят в список символов, допустимых в web-адресах, но мало ли, вдруг вы, скажем, скопируете из какого-либо текста адрес, ограниченный кавычками, и случайно вместе с адресом скопируете кавычки.

Если вдруг в адресе попадётся одиночная кавычка, то, скорее всего, при запуске скрипта Perl выдаст сообщение об ошибке. Отсутствие двойных кавычек в адресах проверяется непосредственно в скрипте; если они будут обнаружены, выполнение скрипта прекратится с выдачей соответствующего сообщения.

После запуска скрипт выводит строку с указанием времени, когда он должен начать работу, и ждёт этого времени. Когда оно наступит, происходит запуск «Оперы» (обратите внимание: в скрипте указан полный путь к исполняемому файлу «Оперы»; если у вас он не такой, то надо указать в скрипте свой путь). Затем следует 60-секундная пауза, чтобы «Опера» успела загрузиться (продолжительность этой паузы при необходимости можно изменить).

Далее в цикле по очереди открываются окна с документами. Чтобы открыть окно с некоторым документом в браузере Opera 5.12, достаточно просто запустить этот браузер, указав в командной строке адрес этого документа. Именно это действие и выполняется в скрипте. При этом не будет запущен новый экземпляр браузера, а в уже запущенном откроется новое окно с указанным документом. Не знаю, так же или нет ведут себя другие браузеры. После открытия окна следует 45-секундная пауза (её продолжительность также можно изменить).

В процессе работы скрипт выводит информацию о том, когда и что он делает, как в нижеприведённом примере.

Waiting run time (12:00)...
Mon Apr 25 12:00:11 2005   Starting "Opera"...
Pause...
Mon Apr 25 12:01:15 2005   Opening page "http://example1/"...
Pause...
Mon Apr 25 12:02:02 2005   Opening page "http://example2/"...
Pause...
Mon Apr 25 12:02:50 2005   Opening page "http://example3/"...
Pause...

Если вы решите использовать описанный скрипт (возможно, внеся в него какие-либо изменения), то рекомендую сначала протестировать его (установив в нём время запуска, скажем, через минуту после текущего времени). Плохо, если скрипт будет запущен для решения серьёзной задачи, а потом вдруг окажется, что он не сработал так, как нужно.

Осталось рассказать о некоторых проблемах, обнаруженных в процессе регулярного использования данного скрипта (под Windows 95 OSR 2.1 RUS; версия Perl — ActivePerl 5.8.6.811).

Во-первых, если какой-либо из адресов, указанных в списке, слишком длинный, то «Опера» не открывает окно с соответствующим документом (открывается пустое окно). Видимо, это связано с ограничением на длину командной строки в Windows. Экспериментально было установлено, что не открываются документы с адресами длиннее примерно 240 символов.

Во-вторых, если при запуске скрипта дописать в командной строке «>имя_файла» (или поместить в начале скрипта команду «open (STDOUT,'>','имя_файла');»), чтобы перенаправить вывод скрипта в файл с указанным именем, то при открытии некоторых документов, в тот момент, когда скрипт запускает «Оперу», передавая ей в командной строке адрес документа, командный интерпретатор Windows почему-то выдаёт сообщение:

Каталог поиска для COMMAND задан неверно
Слишком много параметров

После этого командный интерпретатор не возвращает управление скрипту, так что все следующие документы также не будут открыты. Эта проблема возникает, по моим наблюдениям, когда адрес документа содержит символы «%» (хотя, быть может, это лишь совпадение). Если отказаться от перенаправления вывода, то этот же документ открывается нормально.

В-третьих, если запустить скрипт с дискеты, то, когда наступает указанное время и скрипт запускает «Оперу», почему-то происходит обращение к дискете, и если дискета отсутствует (например, вынута после запуска скрипта), то «Опера» не запустится.

В-четвёртых, если предыдущий сеанс работы с «Оперой» был завершён некорректно (например, нажатием Reset), то при запуске «Опера» выводит окно с сообщением: «Предыдущий сеанс работы Opera был прерван» — и ждёт, что пользователь выберет один из трёх вариантов продолжения работы («Продолжить с места разъединения», «Загрузить сохранённые окна при запуске», «Не открывать окна при запуске»). А если пользователя нет (а ведь скрипт как раз и предназначен для открытия документов в автоматическом режиме, без участия пользователя), то, естественно, «Опера» так и будет ждать, и открытия документов не произойдёт.

В-пятых, при открытии большого числа документов, особенно содержащих изображения, может не хватить памяти. Тогда вполне вероятно появление окна с сообщением: «Программа выполнила недопустимую операцию и будет закрыта». Причём, возможно, вы даже увидите в окне «Оперы», что большая часть документов загружена — но, увы, недоступна… Хотя, может, что-то и удастся извлечь из кэша.

Другие мои статьи о браузере Opera:

1. 

«Браузер Opera: несколько советов». «Радиомир. Ваш компьютер» 3/2003.

2. 

«Браузер Opera: ещё несколько советов». «Радиомир. Ваш компьютер» 12/2003.

Страница Ивана Рощина > Статьи >