Как проверить во время синтаксического анализа Nokogiri / Ruby, существует ли элемент на странице?

как я могу проверить во время синтаксического анализа HTML-страницы с помощью Nokogiri (Ruby gem), существует ли на странице элемент, в данном случае div?

На моей тестовой странице он действительно существует, поэтому 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 

person Chris    schedule 05.08.2011    source источник


Ответы (1)


Сравнивать с 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, так как считаю это более понятным, чем XPath для подобных простых вещей, но вы можете использовать at_xpath или подайте XPath или селектор CSS в at, если вам так больше нравится.

Кроме того, три метода at возвращают первый совпадающий элемент или nil, поэтому они являются хорошим выбором, если вы просто хотите проверить существование.

person mu is too short    schedule 05.08.2011