我目前正在尝试编写一个脚本,当将其设置为 cron 作业时,它将重新启动我的 Virgin SuperHub。
但是,它一直失败并出现以下错误:“/home/ricky/Downloads/Ubuntu/Scripts/SuperHubReboot.pl 第 11 行没有 ID 为“VmRgRebootRestoreDevice”的表单。”
这是我拥有的脚本中的代码(在 Ubuntu 16.04 上使用 WWW:Mechanize):
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
我不了解 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 开始!)。