Script para reiniciar o Virgin SuperHub

0

No momento, estou tentando escrever um script que reinicie o Virgin SuperHub quando configurado como um trabalho cron.

No entanto, ele continua falhando com o seguinte erro: "Não há formulário com o ID" VmRgRebootRestoreDevice "em /home/ricky/Downloads/Ubuntu/Scripts/SuperHubReboot.pl line 11."

Este é o código dentro do script que eu tenho (usando WWW: Mechanize no 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;

Eu verifiquei os elementos no portal do roteador e "VmRgRebootRestoreDevice" é a referência correta para a página que ele precisa para reiniciar.

Alguém tem alguma experiência em usar um script para reiniciar o SuperHub? Se sim, como você conseguiu que ele funcionasse no Ubuntu / Linux?

Monstar316
fonte

Respostas:

1

Não conheço o Virgin SuperHub, mas tenho muita experiência com o WWW :: Mechanize do perl.

A primeira coisa que eu faria é verificar a saída de $mech->dump_forms(). dump_formsdespeja informações em todos os formulários WWW :: Mechanize find to STDOUT. Isso é algo que você provavelmente não deixaria entrar no código final, mas é um ótimo auxílio para depuração.

Em vez de adicioná-lo à fonte do seu script, você também pode usar o depurador perl:

  • Inicie o depurador perl com perl -d /home/ricky/Downloads/Ubuntu/Scripts/SuperHubReboot.pl

  • Enter c 11para executar o script até antes de executar a linha 11

  • Em seguida, digite $mech->dump_forms(você pode inserir qualquer instrução perl no depurador perl para executá-la no contexto da linha atual)

  • Verifique a saída de dump_forms: A interface da web do Virgin SuperHub realmente usa o atributo 'name' na página de login, mas depois o atributo 'id'?

Você também pode usar $mech->form_number($n)para selecionar o formulário apropriado (cuidado: a numeração do formulário em WWW :: Mechanize começa em 1!).

Jochen Lutz
fonte
Para onde a saída $ mech-> dump_forms () é enviada? Desculpe, apenas comecei a usar o WWW :: Mechanize, por isso ainda não estou completamente familiarizado.
Monstar316