В настоящее время я пытаюсь написать скрипт, который перезагрузит мой 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?

1 ответ1

1

Я не знаю 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!).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .