【问题标题】:WWW::Mechanize::Firefox CSS Selector with multiple elements?具有多个元素的 WWW::Mechanize::Firefox CSS 选择器?
【发布时间】:2013-03-08 17:37:01
【问题描述】:

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

我使用以下代码:

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

回复是2 elements found for CSS selector。有没有办法使用 XPath 或更好的方法,或者是否可以循环遍历结果?

加分项:输入输入,即使它不在表单元素中(即使用 JavaScript)

【问题讨论】:

  • 我不明白你的“奖励点”。请解释
  • 我不确定如何将数据输入到输入中(不在表单中),所以我不能使用“submit_form”。但是我使用了文档,发现您可以使用 ->field([selector], value => x)。所以奖励积分没了。谢谢鲍罗丁,感谢您的帮助。现在有一个问题,我无法选择页面上的第二个输入,使用“two => 1”......所以除非你说不同,否则我将不得不使用数组。
  • 你还是误解了option参数的用途。 always 方法返回所有匹配选择器的元素。该选项根据找到的匹配数指定引发异常的条件。 one 表示必须至少有一个匹配,single 表示必须恰好有一个匹配,maybe 要求没有匹配或只有一个匹配:多于一个匹配是错误的。没有two。要访问第二个 <input class="normal"> 元素,只需在我的示例中使用 $inputs[1]
  • 好的,谢谢它现在更有意义了。哈,这个例子直接引用要好得多......我使用的是 foreach

标签: perl www-mechanize-firefox


【解决方案1】:

使用single 选项,您已指定应该只有一个元素与选择器匹配。这就是当它找到两个匹配项时您会收到错误消息的原因。

该方法将返回一个匹配列表,您可以使用one => 1 代替single => 1,如果没有至少一个匹配,则会抛出 van 错误,或者您可以完全不使用该选项, 什么时候它会简单地返回它找到的所有东西。

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

将用匹配的<input> 元素列表填充数组@inputs,不管有多少。

【讨论】:

    【解决方案2】:

    模块文档包含以下示例:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多