我有这个简单的 HTML:
<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')
但是,在 Nokogiri 中使用相同的 XPath 是可行的:
[3] pry(#<SandBox>)> Nokogiri::HTML(page.html).xpath('//div/text()').text
=> " Test "
有没有办法只使用 capybara 而不求助于 Nokogiri?
最佳答案
您始终可以使用 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 "
祝你好运!
关于ruby - 如何使用 capybara 和 poltergeist 检索 innertext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661741/