2014-03-26 49 views
5

我有這個簡單的HTML:如何使用水豚和poltergeist檢索innertextxt?

<div> Test <span> someting </span></div> 

我怎麼只能檢索的div innertext

使用text檢索來自DIV所有文字:

[1] pry(#<SandBox>)> first(:xpath, '//div').text 
=> "Test someting" 

用我的XPath查詢結果在下面的錯誤text()

[2] pry(#<SandBox>)> first(:xpath, '//div/text()') 
Capybara::Poltergeist::BrowserError: There was an error inside the PhantomJS portion of Poltergeist. This is probably a bug, so please report it. 
TypeError: 'null' is not an object (evaluating 'window.getComputedStyle(element).display') 

然而,使用相同的XPath與引入nokogiri工作:

[3] pry(#<SandBox>)> Nokogiri::HTML(page.html).xpath('//div/text()').text 
=> " Test " 

有沒有辦法使用它只有水豚沒有訴諸Nokogiri?

+0

作爲錯誤消息報告,這很可能是一個錯誤。你應該向開發者報告。真的沒有辦法使用'text()',如果這不起作用,我會認爲它是一個主要的錯誤。因此,您要麼等待修復,要麼使用另一種解決方案,如Nokogiri – dirkk

+0

我也搜索過了,現在似乎沒有辦法獲取內部HTML。我想我們必須等待更新或提出拉取請求。我認爲至少有一個水豚驅動程序支持innerHTML方法。 –

回答

0

你可以隨時使用Nokogiri和open-uri。

require 'nokogiri' 
require 'open-uri' 

2.2.0 :021 > html = Nokogiri::HTML::DocumentFragment.parse('<div> Test <span> someting  </span></div>').child 

=> #<Nokogiri::XML::Element:0x44a7082 name="div" children=[#<Nokogiri::XML::Text:0x44a63ee " Test ">, #<Nokogiri::XML::Element:0x44a62e0 name="span" children=[#<Nokogiri::XML::Text:0x44a3f04 " someting ">]>]> 

然後,您可以對其執行操作,具體取決於您想要抓取的內容。所以對於標籤內的文本:

2.2.0 :072 > html.children.first 

=> #<Nokogiri::XML::Text:0x45ea37c " Test "> 

2.2.0 :073 > html.children.first.text 

=> " Test " 

2.2.0 :215 > html.children.first.content 

=> " Test " 

祝你好運!

+0

我應該提一下,你使用#child:021的原因是你正在使用Nokogiri :: XML :: Element。 Element類繼承自Node類。 –

相關問題