Ruby Mechanize登录无法正常工作

时间:2011-01-11 23:46:11

标签: ruby mechanize

让我为我想要完成的事情奠定基础。在我正在学习的物理课上,我的老师总是喜欢吹嘘自己在课堂上作弊是多么不可能,因为她的所有作业都是通过WebAssign完成的。 WebAssign的工作方式是:每个人都得到相同的问题,但问题中使用的数字是随机变量,因此每个学生都有不同的数字,因此答案不同。因此,我一直在编写ruby脚本来解决人们的问题,只需输入你的特定数字。

我想使用mechanize自动执行此过程。之前我曾多次使用过机械,但是我无法登录该网站。我将提交表单并返回我刚才所在的页面。您可以在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 

如果有人真的有兴趣让这个工作,我会非常乐意给他们发一个有用的用户名和密码。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

您是否尝试使用agent.submit(form, form.buttons.first)代替form.submit

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

答案 2 :(得分:1)

尝试设置用户代理:

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

有些网站似乎要求这样做。

答案 3 :(得分: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应用程序可能需要的任何标头。

如果这不是您遇到的问题,请发布更详细的确切信息。