ruby - 如何使用 capybara 和 poltergeist 检索 innertext?

标签 ruby xpath capybara nokogiri poltergeist

我有这个简单的 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/

相关文章:

php - 使用 xpath 和 DOMDocument 检索元素

ruby - 什么能防止 capybara / Selenium 悬停在可见元素上?

xml - XPath 查找具有特定子节点的所有元素

java - 找不到按钮元素 SELENIUM

ruby-on-rails - 你如何在 Capybara 中 POST 到一个 URL?

jquery - 如何检查Ajax请求是否在Capybara Rspec中发送?

ruby-on-rails - 如何在我的 Rails 应用程序中测试 ActiveRecord::RecordNotFound?

javascript - 将图像传递到 Bootstrap 模式

ruby - 在 Ruby 中删除 "@"符号及其后的所有内容

ruby-on-rails - rspec capybara 测试仅在 chrome 中显示 "data:,"然后因 EOFError 而失败