Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么Mechanize登录总是失败?_Ruby_Mechanize - Fatal编程技术网

Ruby 为什么Mechanize登录总是失败?

Ruby 为什么Mechanize登录总是失败?,ruby,mechanize,Ruby,Mechanize,我试图登录到一个班级网站,但每次我提交表单时,我都会看到登录页面 我使用了两种方式提交表格,结果都是一样的。在提交表格之前,我已经打印了表格,以检查并确保所有值都正确填写。有没有关于为什么这会失败的建议 #!/home/webadmin/.rvm/rubies/ruby-1.9.3-p0/bin/ruby require 'rubygems' require 'mechanize' require 'logger' passwd = gets.chomp a = Mechanize.new

我试图登录到一个班级网站,但每次我提交表单时,我都会看到登录页面

我使用了两种方式提交表格,结果都是一样的。在提交表格之前,我已经打印了表格,以检查并确保所有值都正确填写。有没有关于为什么这会失败的建议

#!/home/webadmin/.rvm/rubies/ruby-1.9.3-p0/bin/ruby

require 'rubygems'
require 'mechanize'
require 'logger'

passwd = gets.chomp

a = Mechanize.new do |agent|
   agent.user_agent_alias = 'Windows Mozilla'
   agent.log = Logger.new(STDOUT)
end

page = a.get('https://it210.it.et.byu.edu/accounts/login/?next=/')
puts "\n=== Login Page ==="
pp page
form = page.forms.first
form['username'] = 'user'
form['password'] = passwd
#pp form
page = a.submit(form, form.buttons.first)
#page = form.submit

puts "\n\n\n=== Next Page (should be homepage) ==="
pp page

我遇到了一个类似的问题。这对我有用

$browser.get("something")
login_page = $browser.page.links.find { |l| l.text == 'Login' }.click

username_field = login_page.form.field_with(:name => "username")
username_field.value = $username
password_field = login_page.form.field_with(:name => "password")
password_field.value = $password

login_page.form.submit
而不是
page=a.submit(表单,表单按钮。第一)

试试看

page=form。单击_按钮

它是2.1,我运行的是Ruby 1.9.3,正如您可能在脚本中看到的那样。lol.2.1的问题太多,无法使用IMHO。我会尝试1.0.0是的,我听说了,尝试了2.0.1.0.0,都有同样的问题。这很时髦。我不知道它为什么这么做。唯一要做的就是通过fiddler或charles代理,这样你就可以将你的请求与真正的浏览器请求进行比较。没关系,我放弃了Ruby,决定用perl来做(花了15分钟来做我想做的事情)。有这么多语言可供使用真是太好了。谢谢,但我将使用get()直接进入登录页面,因此我不需要额外的行来单击登录页面。表格填写正确,只是提交有问题。