Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Perl使用WWW::Mechanize设置没有值的单选按钮_Javascript_Perl_Mechanize_Www Mechanize - Fatal编程技术网

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

Javascript Perl使用WWW::Mechanize设置没有值的单选按钮,javascript,perl,mechanize,www-mechanize,Javascript,Perl,Mechanize,Www Mechanize,我必须说我是Perl新手,到目前为止可能编写了3到4个脚本,我发现Perl非常容易理解和使用 不管怎么说,我现在的剧本有问题。我已经在这个问题上纠缠了一段时间,似乎找不到解决办法 在浏览某个网站后,我来到一个页面,在两个单选按钮之间单击并点击下载按钮 我需要让我的脚本选择其中一个按钮并点击下载,但是页面的源代码没有给我一个值来设置单选按钮 下面是一点网页的源代码 <input type='radio' onclick="url('URL GOES HERE')"> 任何帮助都将不胜

我必须说我是Perl新手,到目前为止可能编写了3到4个脚本,我发现Perl非常容易理解和使用

不管怎么说,我现在的剧本有问题。我已经在这个问题上纠缠了一段时间,似乎找不到解决办法

在浏览某个网站后,我来到一个页面,在两个单选按钮之间单击并点击下载按钮

我需要让我的脚本选择其中一个按钮并点击下载,但是页面的源代码没有给我一个值来设置单选按钮

下面是一点网页的源代码

<input type='radio' onclick="url('URL GOES HERE')">
任何帮助都将不胜感激,第一次在这里也是如此

我忘了提到我现在工作时使用的电脑有很多限制。所以我无法在计算机上安装Firefox或Selenium服务器

编辑

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


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

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

  • 您可以检查url()Javascript子例程

  • 或者,您可以在提交目标表单后记录浏览器请求

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

    $mech->submit_form(
        form_name => "form_name",
        fields => {
            input1_name => "value1",
            input2_name => "value2",
    .....
        },
    );
    
    不提供用于激活未命名单选按钮的API。您可以通过挖掘内部来读取区分属性。这应该有效(大部分未经测试):


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

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

    这对我很有用。

    我非常喜欢Perl的WWW::Mechanize,但在本例中,我认为使用Python Mechanize可能会更幸运。查看此相关。您的单选按钮是否没有
    name
    属性?@Borodin单选按钮通常使用相同的名称,因此它们是互斥的。也就是说,当您选择一个时,将取消选择具有相同名称的所有其他名称。因此,为了检查每个单选按钮的设置,您需要使用某种索引来引用它们,因为它们都有相同的名称。Python mechanize支持这一点,但Perl的WWW::mechanize不支持。感谢您的快速回复,我将研究Python mechanize@博罗丁,不,我在源代码中没有看到名字。
    $mech->submit_form(
        form_name => "form_name",
        fields => {
            input1_name => "value1",
            input2_name => "value2",
    .....
        },
    );
    
    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}
    }
    
    $mech->eval_in_page('document.getElementById("id_radiobutton").checked = true;');