如何通过perl为Openwrt / LEDE提交该表单

时间:2017-11-03 12:26:37

标签: javascript perl openwrt www-mechanize

我有那个表格

<form method="post" action="index.lp" name="authform" id="authform">
<input type="password" name="password" id="password" onkeypress="return enter_submit(event);" />
<input name="enter" class="btn btn-primary" type="button" value="log in" onclick='auth()' />

我可以通过这种方式提交javascript

javascript:document.getElementById("password").value = "password";auth();

现在我需要编写perl脚本来自动执行它,当它登录时执行页面中的其他javascript函数。 我正在计算机上测试并遇到一些问题:

1)Perl需要一个c编译器...我可以在openwrt上安装它吗?

2)我可以尝试两种不同的方式:

第一个,更快的是使用WWW :: Scripter :: Plugin :: JavaScript但我无法安装模块,因为我无法安装mingw(我做了,在ppm-shell中,安装mingw并返回“ppm安装失败:无法找到任何提供mingw的软件包”)。此外,我没有在Perl package中看到WWW :: Scripter。 我写了那个脚本(可以吗?):

  use WWW::Scripter;
  $w = new WWW::Scripter;

  $w->use_plugin('JavaScript');
  $w->get('http://url');
  $w->get('javascript:document.getElementById("password").value = "password";auth();');
  sleep (1);
  $w->get('http://url');
  $w->get('javascript: function();');

第二个是使用WWW:Mechanize。我怎么看输出页面?以及如何将命令发送到第二页?现在使用该脚本我收到此错误:“D:/ Program Files / Perl / lib / HTTP / Response.pm第92行缺少基本参数”。 (可以吗?)

use WWW::Mechanize;
my $mech = WWW::Mechanize->new();

$mech->get( $url );

$mech->follow_link( url => 'http://url' );

$mech->submit_form(
    form_name => 'authform',
    fields    => { password  => 'password', },
    button    => 'log in'
);

1 个答案:

答案 0 :(得分:0)

我使用WWW :: Mechanize,解释依赖于DOM而没有真正的浏览器引擎的JS几乎是不可能的。

D:/Program Files/Perl/lib/HTTP/Response.pm将从WWW :: Mechanize的最后一页获取原始HTML。

如果您确实需要自动化JavaScript页面,并且想要使用perl,请使用Selenium的WebDriver来控制&#34;真实的&#34;浏览器(即使它像phantomjs一样无头)。

至于您获得的错误:确保您的步骤正常运行,并查看ITuple第92行中发生的情况以及它所期望的内容。