【发布时间】: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