【发布时间】:2016-11-22 23:34:30
【问题描述】:
在下面的 HTML 示例中,我试图获取外部 span.price 元素中的 $16.95 文本,并从内部 span.sale 元素中排除文本。
<div class="price">
<span class="sale">
<span class="sale-text">"Low price!"</span>
"$16.95"
</span>
</div>
如果我使用 Nokogiri,这不会太难。
price = doc.css('sale')
price.search('.sale-text').remove
price.text
然而,Capybara 导航而不是删除节点。我知道像 price.text 这样的东西会从所有子元素中获取文本,所以我尝试使用 xpath 来更具体。 p.find(:xpath, "//span[@class='sale']", :match => :first).text。但是,这也会从内部元素中获取文本。
最后,我尝试循环遍历所有跨度以查看是否可以分离结果,但我得到了一个不明确的错误。
p.find(:css, 'span').each { |result| puts result.text }
Capybara::Ambiguous: Ambiguous match, found 2 elements matching css "span"
我正在使用 Capybara/Selenium,因为这是一个具有身份验证复杂性的网络抓取项目。
【问题讨论】:
标签: ruby selenium xpath capybara nokogiri