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

20

我如何在解析HTML页面时使用Nokogiri(Ruby gem)检查页面上是否存在元素,例如div?

在我的测试页面上,它确实存在,因此pp输出了预期的Nokogiri结果。但是if语句无法正常工作,== true似乎不是正确的方法。有什么改进建议吗?谢谢,Chris

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

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

36

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 为falsey,因此是一种方法,但是一个Nokogiri::XML::Node不会。我还切换到CSS符号,因为我觉得对于像这样的简单事情,它比XPath更清晰,但是如果您喜欢可以自由使用at_xpath或将XPath或CSS选择器提供给at

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接