我需要从Facebook获取Avatar的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
问题是您要访问的.photoContainer
DIV不在页面的实际HTML中,它通过JavaScript插入DOM,因此Nokogiri看不到它。Nokogiri只能解析静态HTML和XML。
如果要访问JavaScript生成的DOM内容,则可能需要尝试使用Watir或Selenium等自动化的Web浏览工具。另请参阅" Nokogiri Parse 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"