2011-01-11 103 views
1

让我为我正在努力完成的任务设定舞台。在我参加的一个物理课上,我的老师总是喜欢吹嘘在班上作弊是不可能的,因为她的所有作业都是通过WebAssign完成的。 WebAssign的工作方式是这样的:每个人都会得到相同的问题,但问题中使用的数字是随机变量,因此每个学生都有不同的数字,因此是不同的答案。所以我一直在写ruby脚本来解决人们的问题,只需输入你的具体数字即可。Ruby机械化登录不起作用

我想使用机械化来自动化这个过程。我之前使用过很多次机械化,但我无法登录到该网站。我会提交表单,它会返回我刚才的页面。你可以看看网站的源代码,在http://webassign.net,我也尝试使用登录http://webassign.net/login.html没有运气。

让我跟着这一切了一些Ruby代码是没有做什么,我希望它:

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 

page = agent.get("http://www.webassign.net/login.html") 
form = page.forms.last 
puts "Enter your username" 
form.WebAssignUsername = gets.chomp 
puts "Enter your password (Don't worry, we don't save this)" 
form.WebAssignPassword = gets.chomp 
form.WebAssignInstitution = "trinityvalley.tx" 

form.submit #=> Returns original page 

如果有人真的需要在得到这个有兴趣的工作,我会超过很高兴向他们发送一个可用的用户名和密码。

+0

你确定这是个好主意吗? – 2011-01-12 00:00:41

+0

@Isaac我没有看到任何错误向老师证明设置是不安全的。这就是他似乎在做的事情。 – marcog 2011-01-12 00:02:36

+1

当我遇到这样的问题时,我使用firefox登录并使用Live Headers扩展名记录所有标题。然后我将结果与机械化进行比较。 – cam 2011-01-12 00:36:00

回答

3

该网站可能正在检查Login帖子变量是否已设置(请参阅登录按钮)。尝试加入form.Login = "Login"

1

尝试将用户代理:

agent = Mechanize.new do |a| 
    a.user_agent_alias = 'Mac Safari' 
end 

有些网站似乎要求。

1

你的问题似乎有点含糊,说你没有运气?究竟是什么问题?您是否完全获得与在浏览器中查看页面时不同的响应?如果是这样,然后做@cam所说的和分析标题,你可以通过扩展名在Firefox中完成,或者你可以在Chrome本地生成。无论采用哪种方式,都可以尝试模仿您在使用自定义用户代理的浏览器中看到的标题。这里是我用来模仿iTunes的请求头时,我是数据挖掘应用程序商店的脚本:

def mimic_itunes(mech_agent) 
    mech_agent.pre_connect_hooks << lambda {|headers| 
    headers[:request]['X-Apple-Store-Front'] = X_APPLE_STOREFRONT; 
    headers[:request]['X-Apple-Tz'] = X_APPLE_TZ; 
    headers[:request]['X-Apple-Validation'] = X_APPLE_VALIDATION; 
    } 
    mech_agent.user_agent = 'iTunes/9.1.1 (Windows; Microsoft Windows 7 x64 Business Edition (Build 7600)) AppleWebKit/531.22.7' 
    mech_agent 
end 

注:在本例中的常数都只是字符串...不是真的那么重要了什么他们是,只要你知道你可以添加任何字符串

使用这种方法,你应该能够改变/添加Web应用程序可能需要的任何标题。

如果这不是您遇到的问题,那么请发布更深入的详细信息。

3

您是否尝试过使用agent.submit(form, form.buttons.first)而不是form.submit

当我尝试提交表单时,这对我有用。我首先尝试使用form.submit,并且它一直返回原始页面。