joe chesak
2010-Jun-13 07:14 UTC
[Mechanize-users] populating & submitting a form with a ''node''
Hello, I am trying to populate a username and password, then submit the form. I''ll post the form object from mechanize and then show how I am doing. => #<Mechanize::Form {name "Form1"} {method "POST"} {action "default.aspx"} {fields #<Mechanize::Form::Hidden:0x103ae63a8 @name="__VIEWSTATE", @node #(Element:0x81d734a4 { name = "input", attributes = [ #(Attr:0x81d70498 { name = "type", value = "hidden" }), #(Attr:0x81d70484 { name = "name", value = "__VIEWSTATE" }), #(Attr:0x81d70470 { name = "id", value = "__VIEWSTATE" }), #(Attr:0x81d7045c { name = "value", value "/wEPDwUKLTk5MDMzOTQ2OA9kFgICAQ9kFgoCAQ8WAh4Fd2lkdGgFBTc2OXB4FgJmD2QWAmYPZBYCAgEPDxYCHgtOYXZpZ2F0ZVVybAUMZGVmYXVsdC5hc3B4ZGQCAw8WAh8ABQU3NjlweGQCBQ8WAh8ABQU3NjlweBYCZg9kFgICAg9kFgICAw9kFgICBw9kFhICAQ8PFgIeBFRleHQFCjEzLjA2LjIwMTBkZAIFDw8WAh8CBQg5MzfCoDEzOWRkAgkPDxYCHwIFCDM4NsKgNjk1ZGQCDg8PFgIeB1Zpc2libGVoZGQCEA8PFgIfAgUBMGRkAhMPDxYCHwNoZGQCFQ8PFgIfAgUBMGRkAhgPDxYCHwNoZGQCGg8PFgIfAgUBMGRkAgcPFgIfAAUFNzY5cHhkAgkPFgIfAAUFNzY5cHhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBRBfY3RsMTg6aWJ0bkxvZ2luBRNfY3RsMTg6Y2JSZW1lbWJlck1l0mXXF4LaeFCK0sHzC+ps+KkutyE=" })] }), @value "/wEPDwUKLTk5MDMzOTQ2OA9kFgICAQ9kFgoCAQ8WAh4Fd2lkdGgFBTc2OXB4FgJmD2QWAmYPZBYCAgEPDxYCHgtOYXZpZ2F0ZVVybAUMZGVmYXVsdC5hc3B4ZGQCAw8WAh8ABQU3NjlweGQCBQ8WAh8ABQU3NjlweBYCZg9kFgICAg9kFgICAw9kFgICBw9kFhICAQ8PFgIeBFRleHQFCjEzLjA2LjIwMTBkZAIFDw8WAh8CBQg5MzfCoDEzOWRkAgkPDxYCHwIFCDM4NsKgNjk1ZGQCDg8PFgIeB1Zpc2libGVoZGQCEA8PFgIfAgUBMGRkAhMPDxYCHwNoZGQCFQ8PFgIfAgUBMGRkAhgPDxYCHwNoZGQCGg8PFgIfAgUBMGRkAgcPFgIfAAUFNzY5cHhkAgkPFgIfAAUFNzY5cHhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBRBfY3RsMTg6aWJ0bkxvZ2luBRNfY3RsMTg6Y2JSZW1lbWJlck1l0mXXF4LaeFCK0sHzC+ps+KkutyE="> #<Mechanize::Form::Text:0x103ae5f48 @name="_ctl18:txtUsername", @node #(Element:0x81d732d8 { name = "input", attributes = [ #(Attr:0x81d6c244 { name = "name", value = "_ctl18:txtUsername" }), #(Attr:0x81d6c230 { name = "type", value = "text" }), #(Attr:0x81d6c21c { name = "id", value = "_ctl18_txtUsername" }), #(Attr:0x81d6c208 { name = "class", value = "Textbox_red" })] }), @value=""> #<Mechanize::Form::Field:0x103ae5b10 @name="_ctl18:txtPassword", @node #(Element:0x81d730d0 { name = "input", attributes = [ #(Attr:0x81d682ac { name = "name", value = "_ctl18:txtPassword" }), #(Attr:0x81d68298 { name = "type", value = "password" }), #(Attr:0x81d68284 { name = "id", value = "_ctl18_txtPassword" }), #(Attr:0x81d68270 { name = "class", value = "Textbox_red" })] }), @value="">} {radiobuttons} {checkboxes #<Mechanize::Form::CheckBox:0x103ae5160 @checked=false, @name="_ctl18:cbRememberMe", @value=nil>} {file_uploads} {buttons #<Mechanize::Form::Submit:0x103ae57f0 @name="_ctl18:Button1", @node #(Element:0x81d72ec8 { name = "input", attributes = [ #(Attr:0x81d60d2c { name = "type", value = "submit" }), #(Attr:0x81d60d18 { name = "name", value = "_ctl18:Button1" }), #(Attr:0x81d60d04 { name = "value", value = "Logg inn" }), #(Attr:0x81d60cf0 { name = "id", value = "_ctl18_Button1" }), #(Attr:0x81d60cdc { name = "class", value = "LoginButton" }), #(Attr:0x81d60cc8 { name = "onmouseover", value = "style.color=''#a3a3a3''" }), #(Attr:0x81d60cb4 { name = "onmouseout", value = "style.color=''White''" })] }), @value="Logg inn"> #<Mechanize::Form::ImageButton:0x103ae5458 @name="_ctl18:ibtnLogin", @node #(Element:0x81d72c98 { name = "input", attributes = [ #(Attr:0x81d5a8dc { name = "type", value = "image" }), #(Attr:0x81d5a8c8 { name = "name", value = "_ctl18:ibtnLogin" }), #(Attr:0x81d5a8b4 { name = "id", value = "_ctl18_ibtnLogin" }), #(Attr:0x81d5a8a0 { name = "src", value = "images/right_arrow.GIF" }), #(Attr:0x81d5a88c { name = "border", value = "0" })] }), @value=nil, @x=nil, @y=nil>}> First, I have trouble setting a values on "_ctl18:txtUsername" and "_ctl18:txtPassword", maybe because of the strange characters in there. So, the way I am doing this form is like this... form.fields[1] = "Roy" form.fields[2] = "Rogers" ...after I do that the portion of the form for the login and password look like this... #(Element:0x81d732d8 { name = "input", attributes = [ #(Attr:0x81d6c244 { name = "name", value = "_ctl18:txtUsername" }), #(Attr:0x81d6c230 { name = "type", value = "text" }), #(Attr:0x81d6c21c { name = "id", value = "_ctl18_txtUsername" }), #(Attr:0x81d6c208 { name = "class", value = "Textbox_red" })] }), @value=""> #<Mechanize::Form::Field:0x103ae5b10 @name="_ctl18:txtPassword", @node #(Element:0x81d730d0 { name = "input", attributes = [ #(Attr:0x81d682ac { name = "name", value = "_ctl18:txtPassword" }), #(Attr:0x81d68298 { name = "type", value = "password" }), #(Attr:0x81d68284 { name = "id", value = "_ctl18_txtPassword" }), #(Attr:0x81d68270 { name = "class", value = "Textbox_red" })] }), @value="">} ...It seems okay to me. I''m not sure about the ''node'' part but it seems to be prepopulated. So I then submit the form... form.submit ...but submitting this gives me the following error....>> form.submitNoMethodError: undefined method `node'' for "200628":String from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize/form/field.rb:29:in `<=>'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize/form.rb:171:in `sort'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize/form.rb:171:in `build_query'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize/form.rb:221:in `request_data'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:452:in `post_form'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:370:in `submit'' from /Users/joe/.gem/ruby/1.8/gems/mechanize-1.0.0/lib/mechanize/form.rb:141:in `submit'' from (irb):46 from :0 Am I not assigning the username and password to the correct variables?... perh Joe -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/mechanize-users/attachments/20100613/2ed7ebbe/attachment-0001.html>