我正在使用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中运行此代码,以便我可以访问它定义的对象,如"代理"来实验并生成我需要的其余代码?
我试过'load'。它运行命令,但它不使像'agent'这样的对象可用。
将这些内容原样写入文本文件中,打开IRB并键入:
File.open("your_file","r").readlines.each{|line| eval(line)}
这有帮助吗?
编辑:文本文件必须存在于你启动IRB的同一个目录中。总体优势:在文本文件中修改某些内容要比在一个巨大的IRB一行代码中瞎折腾容易得多。
Use pry:
require 'pry'
... your code
binding.pry
当您运行脚本时,它将在binding.pry
处停止,并且您有一个类似irb的repl(但更好),您可以在其中计算对象。使用exit
继续或使用exit-program
退出
因为这些都是可重复的代码,所以你应该尽可能地尝试实现DRY(Don't Repeat Yourself)。我将在一个类中完成所有这些并有一个返回代理的方法。然后在irb中需要该类并将irb变量设置为类getmethod。这样你就有了以后项目中要用到的类的开头了
我同意@pguardiaro使用Pry
但是在IRB中是这样做的:
binding.eval(File.read("your_file.rb"), "your_file.rb"