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 

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

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

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

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

尝试设置用户代理:

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

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

你的问题似乎有点模棱两可,说你没有运气? 究竟是什么问题? 您是否完全得到与在浏览器中查看页面时不同的响应? 如果是这样,那么执行@cam所说的并对分析器进行分析,你可以通过扩展在Firefox中进行,或者你可以在Chrome中本地进行。 无论哪种方式,尝试模仿您在机械化用户代理中执行的任何浏览器中看到的标头。 这是一个脚本,当我对app store进行数据挖掘时,我用它来模仿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应用程序可能需要的任何标头。

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