3

我正在使用 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 中运行此代码,以便我可以访问它定义的对象,如“代理”来试验并生成我需要的其余代码?

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

4

4 回答 4

3

将这些内容按原样写入文本文件,打开 IRB 并键入:

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

这有帮助吗?

编辑:文本文件必须存在于您启动 IRB 的同一目录中。一般优势:修改文本文件中的某些内容比摆弄一个巨大的 IRB 单行代码要容易得多。

于 2013-01-09T15:58:09.547 回答
2

使用撬:

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

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

于 2013-01-09T23:23:11.373 回答
0

我同意@pguardiaro 使用Pry

但这是您在 IRB 中的操作方式:

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

于 2013-01-10T01:09:12.060 回答
0

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

于 2013-01-09T16:18:14.687 回答