【问题标题】:Nokogiri find image srcNokogiri找到图像src
【发布时间】:2012-10-27 15:26:04
【问题描述】:

我需要从 Facebook 获取头像的 src 属性。

doc = Nokogiri::HTML(open('http://www.facebook.com/zuck'))

然后我尝试了:

 avatar = doc.css('.photoContainer img')

但收到一个空结果。我应该怎么做才能获得 img src?为什么我的方法不起作用?

我也尝试通过 XPath 查找所有 imgs,但仍然收到空结果:

Nokogiri::HTML(open('http://www.facebook.com/zuck')).xpath("//img/@src").each do |src|
  puts src                                                  
end

【问题讨论】:

    标签: ruby-on-rails nokogiri


    【解决方案1】:

    问题在于您尝试访问的 .photoContainer div 不在页面的实际 HTML 中,它是通过 JavaScript 插入到 DOM 中的,因此 Nokogiri 看不到它。 Nokogiri 只能解析静态 HTML 和 XML。

    如果您想访问由 JavaScript 生成的 DOM 内容,您可能需要尝试使用自动网页浏览工具,例如 watirselenium。另见“Nokogiri parse ajax-loaded content”。

    更新:

    如果您熟悉使用 capybara 进行集成测试,您还可以将其选择器用作 selenium 等浏览工具的包装器,直接使用可能有点棘手。

    例如,在控制台中:

    require 'capybara'
    require 'capybara/dsl'
    
    include Capybara::DSL
    Capybara.default_driver = :selenium
    

    然后就可以获取元素了,先关闭弹窗,再通过CSS访问元素:

    visit('http://www.facebook.com/zuck')
    find('a.layerCancel').click
    find('.photoContainer img')['src']
    #=> "http://profile.ak.fbcdn.net/hprofile-ak-ash3/c23.1.285.285/s160x160/73273_773684942011_2125564_n.jpg"
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多