3

我不得不说我是 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自动设置一个,因为我不知道该输入什么值。我试过on, checked, onclick, true, checked onclick, select, selected, 但无济于事。

这是与此相关的代码行

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

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

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

编辑

我相信我可能遇到的问题是这些东西可能在 JavaScript 中。我对 HTML 知之甚少,但在我在标题的某处看到 JavaScript 之前,源代码看起来就像是这样?无论如何,我记得它WWW::Mechanize并不真正支持 JavaScript,所以也许这就是问题所在。

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

4

3 回答 3

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}
}
于 2012-08-02T12:31:53.977 回答
0

您需要了解在浏览器 GUI 中选择单选按钮后会发生什么。有两种方法:

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

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

我建议为此使用 Firefox 的 HTTPFox 扩展。因此,您只需选择您的输入,在 HTTPFox 中启动会话并提交表单。接下来,您检查已发布(或获取)哪些数据,并在您的 Mechanize 脚本中复制相同的字段。就像是:

$mech->submit_form(
    form_name => "form_name",
    fields => {
        input1_name => "value1",
        input2_name => "value2",
.....
    },
);
于 2012-08-02T05:31:07.773 回答
-1

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

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

这对我有用。

于 2016-10-28T02:34:36.613 回答