让我为我想要完成的事情奠定基础。在我正在学习的物理课上,我的老师总是喜欢吹嘘自己在课堂上作弊是多么不可能,因为她的所有作业都是通过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
如果有人真的有兴趣让这个工作,我会非常乐意给他们发一个有用的用户名和密码。
答案 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应用程序可能需要的任何标头。
如果这不是您遇到的问题,请发布更详细的确切信息。