如何在类名中使用带有空格的CSS选择器

时间:2012-03-23 18:05:57

标签: ruby nokogiri mechanize

我试图在页面中找到CSS元素,在类名的末尾包含空格:

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

标签是:

<div class="Example ">

尝试时:

page.search('.Example')

找不到元素,尝试时:

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

Nokogiri提出了一个例外:

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

4 个答案:

答案 0 :(得分:2)

您隐含的前提是,由于包含空格而无法找到类,因此不正确。类名不包含空格。证明:

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,那么这个问题就更容易回答了。

答案 1 :(得分:0)

查找具有以空格结尾的class属性的所有元素:

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

答案 2 :(得分:0)

如果您专门定位class属性,则可以包含空格。在我的例子中,类值有一个空格:

<p class="Event_CategoryTree category">

以下是我使用Nokogiri瞄准该元素的方法:

page.at_css("[class='Event_CategoryTree category']")

答案 3 :(得分:0)

您可以改用Xpath。 以下代码将返回具有类a class with spaces的所有div容器:

doc = Nokogiri::HTML(page)
result = doc.xpath('//div[@class="a class with spaces"]')