Скрипт для перезагрузки Virgin SuperHub

330
Monstar316

В настоящее время я пытаюсь написать скрипт, который перезагрузит мой Virgin SuperHub, если он настроен как задание cron.

Тем не менее, он продолжает сбой со следующей ошибкой: «Нет формы с идентификатором« VmRgRebootRestoreDevice »в /home/ricky/Downloads/Ubuntu/Scripts/SuperHubReboot.pl строке 11».

Вот код в моем скрипте (используя WWW: Mechanize в Ubuntu 16.04):

use WWW::Mechanize; my $mech = WWW::Mechanize->new( autocheck => 0); #login $url="http://@ARGV[0]"; $mech->get( $url ); $mech->form_name('VmLogin'); $mech->field("VmLoginUsername","@ARGV[1]"); $mech->field("VmLoginPassword","@ARGV[2]"); $mech->submit_form(); #get settings page and reboot $url = "http://@ARGV[0]/VmRgRebootRestoreDevice.asp"; $mech->get( $url ); $mech->form_id("VmRgRebootRestoreDevice"); $mech->field("VmDeviceRestore",'0'); $mech->field("VmDeviceReboot",'1'); $mech->submit_form(); exit; 

Я проверил элементы в портале маршрутизатора, и «VmRgRebootRestoreDevice» является правильной ссылкой на страницу, на которую нужно перейти для перезагрузки.

У кого-нибудь есть опыт использования скрипта для перезагрузки своего SuperHub? Если так, как вы заставили его работать в Ubuntu / Linux?

0

1 ответ на вопрос

1
Jochen Lutz

Я не знаю Virgin SuperHub, но у меня достаточно опыта работы с Perl WWW :: Mechanize.

Первое, что я хотел бы сделать, это проверить вывод $mech->dump_forms(). dump_formsвыводит информацию о всех формах WWW :: Mechanize найти в STDOUT. Это то, что вы, вероятно, не допустили бы в конечном коде, но это отличная помощь при отладке.

Вместо того, чтобы добавить его в исходный код вашего скрипта, вы также можете использовать отладчик perl:

  • Запустите Perl-отладчик с perl -d /home/ricky/Downloads/Ubuntu/Scripts/SuperHubReboot.pl

  • Введите, c 11чтобы запустить сценарий до, прежде чем выполнение строки 11

  • Затем введите $mech->dump_forms(вы можете ввести любой оператор perl в отладчике perl, чтобы выполнить его в контексте текущей строки)

  • Проверьте вывод dump_forms: действительно ли веб-интерфейс Virgin SuperHub использует атрибут 'name' на странице входа в систему, но впоследствии атрибут 'id'?

Вы также можете использовать $mech->form_number($n)для выбора соответствующей формы (будьте осторожны: нумерация форм в WWW :: Mechanize начинается с 1!).

Куда выводит $ mech-> dump_forms ()? Извините, я только начал использовать WWW :: Mechanize, так что пока не совсем знаком с ним. Monstar316 6 лет назад 0