Pregunta

Estoy tratando de averiguar si mecanizar envía consulta de publicación correcta.

Quiero iniciar sesión en un foro (consulte fuente html, mecanizar registro en mi otra pregunta) pero solo aparece nuevamente la página de inicio de sesión.Al mirarlo, puedo ver que Firefox envía publicaciones con parámetros como

auth_username=myusername&auth_password=mypassword&auth_login=Login pero mi script envía

auth_username=radek&auth_password=mypassword ¿Está bien o el &auth_login=Login parte debe estar presente?

Cuando intenté agregarlo usando login_form['auth_login'] = 'Login' Recibí un error gems/mechanize-0.9.3/lib/www/mechanize/page.rb:13 inmeta':método indefinido search' for nil:NilClass (NoMethodError)

Me parece que auth_login es un botón de formulario, no un campo (no sé si importa)

[#<WWW::Mechanize::Form
 {name nil}
 {method "POST"}
 {action
  "http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1"}
 {fields
  #<WWW::Mechanize::Form::Field:0x36946c0 @name="auth_username", @value="">
  #<WWW::Mechanize::Form::Field:0x369451c @name="auth_password", @value="">}
 {radiobuttons}
 {checkboxes}
 {file_uploads}
 {buttons
  #<WWW::Mechanize::Form::Button:0x36943b4
   @name="auth_login",
   @value="Login">}>
]

Mi guión es el siguiente.

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

  agent = WWW::Mechanize.new {|a| a.log = Logger.new("loginYOTA.log") }

agent.follow_meta_refresh = true #Mechanize does not follow meta refreshes by default, we need to set that option.

page = agent.get("http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1")

login_form = page.form_with(:method => 'POST')  #works

puts login_form.buttons.inspect
puts page.forms.inspect
STDIN.gets

  login_form.fields.each { |f| puts "#{f.name} : #{f.value}" }  
#STDIN.gets
login_form['auth_username'] = 'myusername'
login_form['auth_password'] = 'mypassword'
  login_form['auth_login'] = 'Login'
STDIN.gets  
page = agent.submit login_form
#Display message if logged in

puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div/strong").xpath('text()').to_s.strip
  puts
puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div").xpath('text()').to_s.strip

output = File.open("login.html", "w") {|f| f.write(page.parser.to_html) }

Puedes encontrar más código, html, inicia sesión en mi otra pregunta relacionada. ¿Inicia sesión con el navegador y luego Ruby/mechanize se hace cargo?

¿Fue útil?

Solución

A falta de un parámetro de comparación a Firefox en la post causó mecanizar no identificarse. Añadiendo nuevo parámetro resuelto este problema. Así que me parece que el servidor web requiere parámetro &auth_login=Login estar en POST.

Usted puede leer cómo agregar nuevo campo de mecanizar formulario en otra pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top