【问题标题】:How do I print XPath value?如何打印 XPath 值?
【发布时间】:2013-12-20 01:31:37
【问题描述】:

我想打印 XPath 节点的内容。这是我所拥有的:

require "mechanize"
agent = Mechanize.new
agent.get("http://store.steampowered.com/promotion/snowglobefaq")
puts agent.xpath("//*[@id='item_52b3985a70d58']/div[4]")

这会返回:<main>: undefined method xpath for #<Mechanize:0x2fa18c0> (NoMethodError)

我刚开始使用 Mechanize,不知道自己在做什么,但是,我使用了 Watir,并认为这会起作用,但它没有。

【问题讨论】:

  • 你可以像这样使用它:agent.page.at("//*[@id='item_52b3985a70d58']/div[4]")

标签: ruby xpath mechanize


【解决方案1】:

您可以在检索页面后使用 Nokogiri 解析页面。下面是示例代码:

m = Mechanize.new
result = m.get("http://google.com")

html = Nokogiri::HTML(result.body)
divs = html.xpath('//div').map { |div| div.content } # here you can do whatever is needed with the divs
                                                     # I've mapped their content into an array

【讨论】:

  • 好吧,它没有打印任何东西,但也没有给出任何错误。现在只是弄清楚 xpath 出了什么问题吗?
  • 你想完成什么?
  • 我只是想打印
    中的文本。我认为 XPath 将是一种简单的方法,因为我不知道如何使用 HTML 指定我正在寻找的确切内容。 XPath 对应于此图像中的第一个“X,XXX crafted”数字:i.imgur.com/RJnZ22s.png
  • 我已经在答案中编写了示例代码。我希望它对你有帮助。对不起,我现在得走了。我明天去看看。
【解决方案2】:

有两点不对:

  1. 该 ID 在该页面上不存在。试试这个来查看可用的标签 ID 列表:

    require "open-uri"
    require 'nokogiri'
    
    doc = Nokogiri::HTML(open("http://store.steampowered.com/promotion/snowglobefaq"))
    puts doc.search('[id*="item"]').map{ |n| n['id'] }.sort
    
  2. 正确的方法链是agent.page.xpath

因为没有示例 HTML 可以准确显示您想要的标签,所以我们帮不了您太多。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签