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

Ruby 如何在类名中使用带有空格的CSS选择器,ruby,nokogiri,mechanize,Ruby,Nokogiri,Mechanize,我试图在页面中查找CSS元素,在类名末尾包含空格: @agent = Mechanize.new page = @agent.get(somepage) 其中标签为: <div class="Example "> 找不到元素,尝试时: page.search('.Example') page.search('.Example ') <- space following the name 要查找class属性以空格结尾的所有元素,请执行以下操作: page.search(

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

@agent = Mechanize.new
page = @agent.get(somepage)
其中标签为:

<div class="Example ">
找不到元素,尝试时:

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

要查找class属性以空格结尾的所有元素,请执行以下操作:

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

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

require 'nokogiri'

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

<p class="Event_CategoryTree category">
您可以改用Xpath。 以下代码将返回所有带有类
的div容器以及带有空格的类

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

css类不能有空格,因为这些空格用于子代选择器“在尝试:page.search('.Example')时找不到元素”:这意味着该元素在HTML中不存在。@alf css类不能有空格,但它们在野外存在。不是每个HTML文档都是正确的,但我们仍然需要使用它们。类名不能包含空格,因为空格是分隔符,例如
class=“red-green-blue”
是三个不同的类。@Mark Thomas-同意,但元素的class属性可以以空格结尾,我想这就是他想要识别的。正确生成的HTML在类中没有空格,除非定义了多个类。在野外的HTML可能有它们,即使它是错误的。我们还得和他们一起工作。因此,虽然从技术上讲它们不可能存在,但它们确实存在,因为浏览器与它们一起工作,而生成页面的人并不关心。尽管如此,这是有效的。这在Nokogiri真的是一个bug。
page.at_css("[class='Event_CategoryTree category']")
doc = Nokogiri::HTML(page)
result = doc.xpath('//div[@class="a class with spaces"]')