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.submit
NoMethodError: 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>