Javascript Perl使用WWW::Mechanize设置没有值的单选按钮
我必须说我是Perl新手,到目前为止可能编写了3到4个脚本,我发现Perl非常容易理解和使用 不管怎么说,我现在的剧本有问题。我已经在这个问题上纠缠了一段时间,似乎找不到解决办法 在浏览某个网站后,我来到一个页面,在两个单选按钮之间单击并点击下载按钮 我需要让我的脚本选择其中一个按钮并点击下载,但是页面的源代码没有给我一个值来设置单选按钮 下面是一点网页的源代码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')"> 任何帮助都将不胜
<input type='radio' onclick="url('URL GOES HERE')">
任何帮助都将不胜感激,第一次在这里也是如此
我忘了提到我现在工作时使用的电脑有很多限制。所以我无法在计算机上安装Firefox或Selenium服务器
编辑
我相信我可能遇到的问题是,这些东西可能是JavaScript。我对HTML没有太多的了解,但在标题中的某个地方看到JavaScript之前,源代码看起来就是这样?无论如何,我记得WWW::Mechanize
并不真正支持JavaScript,所以这可能就是问题所在
谢谢你们的回复,我真的很感激。但是经过大量的挖掘和仔细的检查,我的老板和我意识到所有的下载链接都非常相似,我真正需要做的就是让脚本自定义创建下载链接,而不是经历多个网页版本转换的麻烦。希望我能早点看到这一点。在浏览器GUI中选择单选按钮后,您需要找到发生了什么。这有两种方法:
$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;');