【问题标题】:Ruby Mechanize gem, restore Mechanize::Page object from local html copyRuby Mechanize gem,从本地 html 副本恢复 Mechanize::Page 对象
【发布时间】:2012-05-26 01:55:55
【问题描述】:

这是我的代码:

agent = Mechanize.new
page = agent.get 'http://google.com'
page.save 'google_index.htm'

如何将 google_index.htm 恢复为 Mechanize::Page 对象并继续使用该页面,例如。提交、解析等?

我尝试过YAML::dump()Marshal::dump(),但似乎不可能:

irb(main):024:0> page.class
=> Mechanize::Page

然后:

irb(main):013:0> YAML::dump(page) 
TypeError: can't dump anonymous class Class 

和:

irb(main):023:0> Marshal::dump(page)
TypeError: no marshal_dump is defined for class Nokogiri::XML::Element

【问题讨论】:

  • 我认为您使用#save 方法的方式并没有达到预期的目的。从mechanize.rubyforge.org/Mechanize/File.html#method-c-new 开始,它似乎旨在以已知格式(.jpg、.pdf 等)保存文件,而不是用于编组机械化对象。你想做什么?
  • 我有一个授权站点,我需要使用这个表单,在我可以使用这个表单之前,我需要通过一些 url,提交 auth 表单,点击一些链接,最后我得到了表单我需要提交。为了省略所有这些无聊的步骤,我想保存这个表单和站点 cookie,以便能够从我的本地计算机提交它。
  • 所以你只想把它保存到你的机器上一次?如果是这样,我想我可能会建议您手动保存表单,或者使用 curl 或 wget 然后使用我在下面显示的方法读取它。我在下面使用的方法不适用于 google_index.htm 文件,因为“page.save”包含 Mechanize cruft。
  • 是的,我想把它保存到我的本地机器上,然后用 Mechanize 提交这个保存的表单。我不需要用 nokogiri 解析它。我需要从这个本地保存的表单中获得Mechanize::Page 对象。

标签: ruby gem copy mechanize local


【解决方案1】:

也许你可以只恢复 cookie:

agent.cookie_jar.save_as('cookies')
agent.cookie_jar.load('cookies')

您的会话很有可能会过期。

【讨论】:

  • 是的,我正在保存 cookie,但我想保存该页面实例,以免再次获取它。但这不是真的,所以现在我正在保存 cookie,然后在请求我需要的页面之前加载它。所以我认为你的回答是正确的:)
【解决方案2】:
    f = File.open("google_index.htm")
    doc = Nokogiri::HTML(f)
    # do stuff with f

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2015-08-28
    • 1970-01-01
    • 2012-06-11
    • 2019-07-01
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多