2013-03-08 69 views
0

当使用WWW::Mechanize::Firefox选择一个项目时,是否可以迭代多个具有相同名称的选择器?WWW :: Mechanize :: Firefox CSS选择器有多个元素?

我使用以下代码:

my $un = $mech->selector('input.normal', single => 1); 

的响应是2 elements found for CSS selector。有没有办法使用XPath或更好的方法,还是有可能循环遍历结果?

奖励点:输入到输入,即使它不是表单元素(即使用JavaScript)

+0

我不明白你的“加分”。请解释 – Borodin 2013-03-08 09:36:14

+0

我不确定如何将数据输入到输入中(这不是表单),因此我无法使用“submit_form”。但我使用了文档,并且看到你可以使用 - > field([selector],value => x)。所以奖励点消失了。感谢鲍罗廷,我感谢你的协助。现在有一个问题,我不能选择页面上的第二个输入,使用“two => 1”...所以我将不得不使用数组,除非你说不同。 – surfer190 2013-03-08 09:47:43

+0

您仍然误解了选项参数的用途。方法* always *返回匹配选择器的所有元素。该选项指定根据找到的匹配数量抛出异常的条件。 “one”表示必须至少有一次匹配,“single”表示必须只有一个匹配,“maybe”可能不需要匹配或匹配:多个匹配是错误。没有'two'。要访问第二个''元素,只需在我的示例中使用'$ inputs [1]''。 – Borodin 2013-03-08 10:25:04

回答

2

与已指定,应该有一个元素的选择相匹配的single选项。这就是为什么当它找到两个匹配时会收到错误消息。

该方法将返回匹配列表,并且您可以使用one => 1代替single => 1,如果没有至少一个匹配项,将抛出面包车错误,或者您可以将该选项全部退出将简单地返回它找到的所有内容。

my @inputs = $mech->selector('input.normal') 

将填充阵列@inputs具有匹配<input>元素的列表,然而,许多有。

1

模块文档包含这些例子:

my $link = $mech->xpath('//a[id="clickme"]', one => 1); 
# croaks if there is no link or more than one link found 

my @para = $mech->xpath('//p'); 
# Collects all paragraphs