如何在Nokogiri / Ruby解析期间检查页面上是否存在元素?

时间:2011-08-05 15:08:39

标签: ruby parsing nokogiri

如果在页面上存在一个元素(在本例中为div),如何在使用Nokogiri(Ruby gem)解析HTML页面时进行检查?

在我的测试页面上,它确实存在,因此pp产生了预期的Nokogiri输出。但if语句不起作用,== true似乎是错误的方法。有任何改进建议吗?干杯,克里斯

pp page.at('.//div[@class="errorMsg"]')

if page.at('.//div[@class="errorMsg"]') == true then
    puts "Error message found on page"
end 

1 个答案:

答案 0 :(得分:31)

true比较不是正确的方法。 at调用如果找不到任何内容,将返回nil

if page.at_css('div.errorMsg')
  puts 'Error message found on page'
else
  puts 'No error message found on page'
end

是一种方式,因为nil在布尔上下文中是假的,但Nokogiri::XML::Node不会。我也切换到CSS notation因为我觉得比XPath更清楚这样的简单事情,但你可以自由使用at_xpath或者如果你愿意的话,可以将XPath或CSS选择器提供给at更好。

此外,三个at方法返回第一个匹配元素或nil,因此如果您只是想检查存在,它们是不错的选择。