Как проверить при разборе Nokogiri / Ruby, существует ли элемент на странице? - PullRequest
18 голосов
/ 05 августа 2011

как я могу проверить при разборе 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 

1 Ответ

31 голосов
/ 05 августа 2011

Сравнение с 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, поэтому они являются хорошим выбором, если вы просто хотите проверить существование.

...