【问题标题】:How can I find ComputedStyle elements in Nokogiri?如何在 Nokogiri 中找到 ComputedStyle 元素?
【发布时间】:2012-04-21 21:43:59
【问题描述】:

我正在使用 Ruby 和 Nokogiri 来解析 HTML 文档,我想选择与 CSS 类匹配的所有节点,我事先并不知道,但有 display: none 样式属性。

示例:

<html>
  <body>
    <p class="visibleTopics">Visible Topic Content</p>
    <p class="invisibleTopics">Invisible Topic Content</p>    
  </body
</html>

并在其他文件中定义:

.invisibleTopic {
    display: none
} 

我想按其样式display: none 选择具有invisibleTopics 内容的节点。有什么建议吗?

【问题讨论】:

  • Nokogiri 不会看到它们,除非您可以在页面中调整节点后捕获 HTML。在这种情况下,请查看 WATIR 项目和 gem。
  • 不错的项目,但不幸的是,我不知道如何将它与 nokogiri 集成。感谢您的提示:-)
  • 您通过提取由 WATIR 控制的浏览器呈现的 HTML 并告诉 Nokogiri 解析该内容来集成它。此时您将拥有最终的 HTML,就像您使用浏览器查看页面一样。
  • 为什么不抓取所有主题,无论是否可见?

标签: css ruby nokogiri


【解决方案1】:

Nokogiri 不计算样式。为此,您需要一个浏览器。使用 Watir-Webdriver 你可以:

browser.ps.reject{|p| p.visible?}

【讨论】:

    【解决方案2】:

    不要寻找 CSS 属性,而是寻找标签内的 CSS 类:

    require 'nokogiri'
    
    html = <<EOT
    <html>
      <body>
        <p class="visibleTopics">Visible Topic Content</p>
        <p class="invisibleTopics">Invisible Topic Content</p>    
      </body
    </html>
    EOT
    
    doc = Nokogiri::HTML(html)
    
    doc.search('.invisibleTopics').each do |n|
      puts n.text
    end
    

    运行时输出:

    Invisible Topic Content
    

    【讨论】:

    • 问题是我试图找出不可见的元素,但我不知道类的名称 :-) 谢谢!
    猜你喜欢
    • 2022-03-26
    • 2021-12-05
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2015-06-02
    • 2011-08-15
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多