Как использовать селектор CSS с пробелом в имени класса - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь найти элементы CSS на странице, содержащей пробел в конце имени класса:

@agent = Mechanize.new
page = @agent.get(somepage)

Где тег:

<div class="Example ">

При попытке:

page.search('.Example')

элемент не найден и при попытке:

page.search('.Example ') <- space following the name

Нокогири выдвигает исключение:

Nokogiri::CSS::SyntaxError: unexpected '$' after 'DESCENDANT_SELECTOR' 

Ответы [ 4 ]

2 голосов
/ 25 марта 2012

Ваша подразумеваемая предпосылка о том, что класс не может быть найден, поскольку содержит пробел, неверна.Имена классов не включают пробелы.Доказательство:

require 'nokogiri'
html = <<End
  <html>
    <span class="Example ">One</span>
    <span class="Example foo">Two</span>
  </html>
End

doc = Nokogiri::HTML(html)

puts doc.search('.Example')

Вывод:

<span class="Example ">One</span>
<span class="Example foo">Two</span>

Так что я думаю, что в вашем HTML-документе просто нет класса, содержащего Example.Если бы вы предоставили образец HTML, на этот вопрос было бы легче ответить.

0 голосов
/ 12 октября 2016

Вместо этого вы можете использовать Xpath.Следующий код вернет все контейнеры div с классом a class with spaces:

doc = Nokogiri::HTML(page)
result = doc.xpath('//div[@class="a class with spaces"]')
0 голосов
/ 12 ноября 2015

Если вы специально указали атрибут класса, вы можете включить пробелы. В моем случае значение класса было пробелом:

<p class="Event_CategoryTree category">

Вот как я нацелился на этот элемент с помощью Nokogiri:

page.at_css("[class='Event_CategoryTree category']")
0 голосов
/ 24 марта 2012

Чтобы найти все элементы, имеющие атрибут класса, заканчивающийся пробелом:

page.search('*').select{|e| e[:class] =~ /\s$/}
...