Подтвердить что ты не робот

Как проверить во время анализа 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 
4b9b3361

Ответ 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 false в булевом контексте, но Nokogiri::XML::Node не будет. Я также переключился на нотацию CSS, поскольку я нахожу это более ясным, чем XPath, для простых вещей, подобных этому, но вы можете использовать at_xpath или загрузите XPath или селектор CSS в at, если вам это нравится.

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