0

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

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

然后我尝试了:

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

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

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

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

1 回答 1

2

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

如果你想访问由 JavaScript 生成的 DOM 内容,你可能想尝试一个自动化的网页浏览工具,比如watirselenium。另请参阅“ Nokogiri 解析 ajax 加载的内容”。

更新:

如果您熟悉使用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"
于 2012-10-23T12:57:16.183 回答