我需要从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
答案 0 :(得分:1)
问题在于,您尝试访问的.photoContainer
div不在页面的实际HTML中,而是通过JavaScript插入到DOM中,因此Nokogiri无法看到它。 Nokogiri只能解析静态HTML和XML。
如果您想访问由JavaScript生成的DOM内容,您可能需要尝试自动网络浏览工具,例如watir或selenium。另请参阅" 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"