我试图在页面中找到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'
答案 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"]')