繁体   English   中英

Perl使用WWW :: Mechanize设置一个没有值的单选按钮

[英]Perl Using WWW::Mechanize to set a radio button that has no value

我不得不说我是Perl的新手,到目前为止可能有大约3或4个脚本,我发现Perl很容易理解和使用。

无论如何,我的当前脚本有问题。 我一直坚持这个问题一段时间,似乎无法找到它的修复。

在遍历某个网站后,我来到一个页面,让我点击两个单选按钮并点击下载按钮。

我需要让我的脚本选择按钮和点击下载,但是当使用WWW::Mechanize时,页面源不会给我一个值来设置单选按钮。

这是一些网页源代码。

<input type='radio' onclick="url('URL GOES HERE')">

对于这两个按钮来说几乎就是这样。 我注意到当我选择一个并查看源代码时,代码会变为

<input type='radio' checked onclick="url('URL GOES HERE')">

但我不能让WWW::Mechanize自动设置一个,因为我不知道该放入什么值。 我曾尝试oncheckedonclicktruechecked onclickselectselected ,但无济于事。

以下是与此相关的代码行

$mech->set_visible([radio => 'checked onclick']);

任何帮助将不胜感激,第一次也在这里。

我忘了提到我正在使用一台计算机,这项计算机目前有很多限制。 所以我无法在计算机上安装Firefox或Selenium Server。

编辑

我相信我可能遇到的问题是这些东西可能是在JavaScript中。 我对HTML没有太多的了解,但源代码看起来就像是在标题中的某个地方看到了JavaScript? 无论如何,我记得WWW::Mechanize并不真正支持JavaScript,所以也许这就是问题所在。

感谢回复人员,我真的很感激。 但经过大量的挖掘和仔细检查后,我的老板和我有点意识到所有下载链接都非常相似,我真正需要做的就是让脚本自定义创建链接到下载而不是通过捣乱多个网页的麻烦。 希望我早点看到这个。

HTML :: Form不提供激活未命名单选按钮的API。 您可以通过挖掘内部来阅读区别属性。 这应该工作(大多数未经测试):

use WWW::Mechanize qw();
my $w = WWW::Mechanize->new;
$w->get('file:///tmp/so11767998.html');
for my $input (($w->forms)[0]->inputs) {
    $input->check if q{url('URL GOES HERE')} eq $input->{onclick}
}

您需要在浏览器GUI中选择单选按钮后查找发生的情况。 有两种方法:

  1. 你可以检查url()Javascript子程序

  2. 或者您可以在提交目标表单后记录您的浏览器请求。

我建议使用Firefox的HTTPFox扩展。 所以你只需选择输入,在HTTPFox中启动会话并提交表单。 接下来,检查POSTed(或GETed)的数据,并在Mechanize脚本中复制相同的字段。 就像是:

$mech->submit_form(
    form_name => "form_name",
    fields => {
        input1_name => "value1",
        input2_name => "value2",
.....
    },
);

我也有这个问题,并通过调用Javascript单击单选按钮解决它。

$mech->eval_in_page('document.getElementById("id_radiobutton").checked = true;');

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM