Mit Ruby und Mechanize zu füllen, in einer remote-login-Formular Rätsel
Ich versuche zur Implementierung eines Ruby-Skripts, das wird nehmen Sie einen username und Passwort, dann gehen Sie zum ausfüllen der Kontodaten auf ein login-Formular auf einer anderen website und zurück, das dann einem link Folgen, und rufen Sie die Konto-Geschichte. Dazu bin ich mit dem Mechanize gem.
Habe ich nach dem Beispiele hier
aber ich kann nicht scheinen, um es zu arbeiten. Ich habe diese vereinfacht stark gesunken, um zu versuchen, get it to work in teilen aber auch der vermeintlich einfache ausfüllen eines Formulars hält mich auf.
Hier ist mein code:
# script gets called with a username and password for the site
require 'mechanize'
#create a mechanize instant
agent = Mechanize.new
agent.get('https://mysite/Login.aspx') do |login_page|
#fill in the login form on the login page
loggedin_page = login_page.form_with(:id => 'form1') do |form|
username_field = form.field_with(:id => 'ContentPlaceHolder1_UserName')
username_field.value = ARGV[0]
password_field = form.field_with(:id => 'ContentPlaceHolder1_Password')
password_field.value = ARGV[1]
button = form.button_with(:id => 'ContentPlaceHolder1_btnlogin')
end.submit(form , button)
#click the View my history link
#account_history_page = loggedin_page.click(home_page.link_with(:text => "View My History"))
####TEST to see if i am actually making it past the login page
#### and that the View My History link is now visible amongst the other links on the page
loggedin_page.links.each do |link|
text = link.text.strip
next unless text.length > 0
puts text if text == "View My History"
end
##TEST
end
Terminal Fehlermeldung:
stackqv2.rb:19:in `block in <main>': undefined local variable or method `form' for main:Object (NameError)
from /usr/local/lib/ruby/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize.rb:409:in `get'
from stackqv2.rb:8:in `<main>'
- Sind Sie sicher, dass Sie bekommen, dass der Fehler mit dem code, den du gepostet hast? Es gibt keine
form_with
auf Linie 14. Es sieht aus wie Sie bekommen würde, die Fehler-wenn Sie möchten, genanntagent.form_with
- Korrigiert habe ich die Fehlermeldung die ich erhalte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu pass
form
als argument zusubmit
. Diebutton
ist ebenfalls optional. Versuchen Sie, die folgenden:Wenn Sie wirklich brauchen, um festzulegen, welche Taste wird verwendet, um das Formular senden können, versuchen Sie dies:
Es ist eine Frage des Umfangs:
ramblex s Vorschlag ist nicht zu verwenden, einen block mit der form und ich bin damit einverstanden, es ist weniger verwirrend, die Art und Weise.