我试图在一个页面中找到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'
您的隐含前提,即无法找到类,因为它包含空格,这是不正确的。类名不包括空格。证明:
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,这个问题会更容易回答。
要查找所有具有以空白结尾的class属性的元素:
page.search('*').select{|e| e[:class] =~ /s$/}
如果您专门针对class属性,则可以包含空格。在我的例子中,类值有一个空格:
<p class="Event_CategoryTree category">
以下是我如何使用Nokogiri瞄准该元素:
page.at_css("[class='Event_CategoryTree category']")
您可以使用Xpath。以下代码将返回所有具有类a class with spaces
:的div容器
doc = Nokogiri::HTML(page)
result = doc.xpath('//div[@class="a class with spaces"]')