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

时间:2012-08-01 21:42:19

标签: javascript perl mechanize www-mechanize

我不得不说我是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,所以也许这就是问题所在。

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

3 个答案:

答案 0 :(得分:1)

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}
}

答案 1 :(得分:0)

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

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

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

  3. 我建议使用Firefox的HTTPFox扩展名。所以你只需选择输入,在HTTPFox中启动会话并提交表单。接下来,检查哪些数据被POST(或GETed),只是复制相同的字段     在您的Mechanize脚本中。类似的东西:

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

答案 2 :(得分:-1)

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

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

这对我有用。