在irb中运行多个命令

时间:2013-01-09 15:54:21

标签: ruby irb mechanize-ruby

我正在使用Mechanize来抓取需要登录的网站。以下代码将我登录。

require 'mechanize'

agent = Mechanize.new
agent.get 'http://www.specialsite.com'

agent.page.form.txtEmail = 'myemail@email.com'
agent.page.form.txtPassword = 'myPassword'
agent.page.form.add_field! "__EVENTTARGET","btnLogin"
agent.page.form.add_field! "__EVENTARGUMENT",""
agent.page.form.submit


agent.page.link_with(:text => "Special Link").click

agent.page.form.txtSearch = "Search Text"
agent.page.form.add_field! "__EVENTTARGET","lbtnSearch"
agent.page.form.add_field! "__EVENTARGUMENT","" 
agent.page.form.submit

我的问题是,如何在ruby IRB中运行此代码,以便我可以访问它定义的对象,如'agent'来试验并生成我需要的其余代码?

我试过'加载'。它运行命令但不会使“代理”之类的对象可用。

4 个答案:

答案 0 :(得分:3)

将这些东西原样写入文本文件中,打开IRB并输入:

File.open("your_file","r").readlines.each{|line| eval(line)}

这有帮助吗?

编辑:文本文件必须存在于您触发IRB的同一目录中。一般优势:在文本文件中修改某些东西比在巨大的IRB单行中进行修改更容易。

答案 1 :(得分:2)

使用pry:

require 'pry'
... your code
binding.pry

当您运行脚本时,它将停在binding.pry并且您有一个类似irb的repl(但更好),您可以在其中评估对象。使用exit继续或exit-program退出。

答案 2 :(得分:0)

因为这是所有可重复的代码,你应该尽可能地尝试实现DRY(不要重复自己)。我会在一个类中完成所有这些并且有一个返回代理的方法。然后在irb中你需要该类并将你的irb变量设置为类getmethod。通过这种方式,您已经拥有了将用于项目lator的课程开始

答案 3 :(得分:0)

我同意@pguardiaro使用Pry

但这是你在IRB中的表现:

binding.eval(File.read("your_file.rb"), "your_file.rb"