Simple problem w/ WWW::Mechanize

Hi all, I'm fairly new to Ruby, and, as an exercise, I'm writing some
code for webforms. However, I can't seem to get the following code to
work - instead, I get the following error:
wikitesting.rb:8:in `get': undefined method `myform' for
#<WWW::Mechanize::Page:0xb7996738> (NoMethodError)
        from wikitesting.rb:10

Probably pretty simple, and I can see it's something wrong with the
way I called the function, however, I've spent some time on it and
can't figure it out. Here's the code:
require 'rubygems'
require 'mechanize'
def get(pagename)
  agent = WWW::Mechanize.new
  agent.user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1)'
  page = agent.get('http://en.wikipedia.org/w/index.php?title=' +
pagename + '&action=edit')
  myform = page.form('editform')
  return page.myform.fields.form('wpTextbox1')
end
text = get('Computer')
pp text

Thanks,

Tim

Hi Tim,

Hi all, I'm fairly new to Ruby, and, as an exercise, I'm writing some
code for webforms. However, I can't seem to get the following code to
work - instead, I get the following error:
wikitesting.rb:8:in `get': undefined method `myform' for
#<WWW::Mechanize::Page:0xb7996738> (NoMethodError)
        from wikitesting.rb:10

Probably pretty simple, and I can see it's something wrong with the
way I called the function, however, I've spent some time on it and
can't figure it out. Here's the code:
require 'rubygems'
require 'mechanize'
def get(pagename)
  agent = WWW::Mechanize.new
  agent.user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1)'
  page = agent.get('http://en.wikipedia.org/w/index.php?title=' +
pagename + '&action=edit')
  myform = page.form('editform')

Try replacing this line:

  return page.myform.fields.form('wpTextbox1')

With this:

  return myform.wpTextbox1

You've already found the form and stored it in the 'myform' variable.

end
text = get('Computer')
pp text

Also, if you have more questions, be sure to join the mechanize mailing
list:

  http://rubyforge.org/mailman/listinfo/mechanize-users

···

On Tue, Apr 03, 2007 at 08:00:15AM +0900, tim.bounceback@gmail.com wrote:

--
Aaron Patterson
http://tenderlovemaking.com/

Thanks for replying. I still get a similar error, though:
wikitesting.rb:8:in `get': undefined method `wpTextbox1' for
nil:NilClass (NoMethodError)
        from wikitesting.rb:10

Any ideas? By the way, I've joined the mailing list, and any future
questions I might have will probably be directed there.

Thanks,

Tim

···

On Apr 2, 7:25 pm, Aaron Patterson <a...@tenderlovemaking.com> wrote:

Hi Tim,

On Tue, Apr 03, 2007 at 08:00:15AM +0900, tim.bounceb...@gmail.com wrote:
> Hi all, I'm fairly new to Ruby, and, as an exercise, I'm writing some
> code for webforms. However, I can't seem to get the following code to
> work - instead, I get the following error:
> wikitesting.rb:8:in `get': undefined method `myform' for
> #<WWW::Mechanize::Page:0xb7996738> (NoMethodError)
> from wikitesting.rb:10

> Probably pretty simple, and I can see it’s something wrong with the
> way I called the function, however, I’ve spent some time on it and
> can’t figure it out. Here’s the code:
> require ‘rubygems’
> require ‘mechanize’
> def get(pagename)
> agent = WWW::Mechanize.new
> agent.user_agent = ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
> 5.1)’
> page = agent.get('http://en.wikipedia.org/w/index.php?title=’+
> pagename + ‘&action=edit’)
> myform = page.form(‘editform’)

Try replacing this line:

> return page.myform.fields.form('wpTextbox1')

With this:

  return myform.wpTextbox1

You've already found the form and stored it in the 'myform' variable.

> end
> text = get('Computer')
> pp text

Also, if you have more questions, be sure to join the mechanize mailing
list:

http://rubyforge.org/mailman/listinfo/mechanize-users

--
Aaron Pattersonhttp://tenderlovemaking.com/

It looks like Wikipidia may not like that parameter in the URL. When I
change 'Computer' to 'Main', it seems to work:

  require 'rubygems'
  require 'mechanize'
  
  def get(pagename)
    agent = WWW::Mechanize.new
    agent.user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
    page = agent.get('http://en.wikipedia.org/w/index.php?title=' +
      pagename + '&action=edit')
  
    myform = page.form('editform')
    return myform.wpTextbox1
  end
  text = get('Main')
  pp text

···

On Tue, Apr 03, 2007 at 08:50:04AM +0900, tim.bounceback@gmail.com wrote:

Thanks for replying. I still get a similar error, though:
wikitesting.rb:8:in `get': undefined method `wpTextbox1' for
nil:NilClass (NoMethodError)
        from wikitesting.rb:10

Any ideas? By the way, I've joined the mailing list, and any future
questions I might have will probably be directed there.

--
Aaron Patterson
http://tenderlovemaking.com/

OK, thanks, that seems to work!

Tim

···

On Apr 3, 1:36 am, Aaron Patterson <a...@tenderlovemaking.com> wrote:

On Tue, Apr 03, 2007 at 08:50:04AM +0900, tim.bounceb...@gmail.com wrote:
> Thanks for replying. I still get a similar error, though:
> wikitesting.rb:8:in `get': undefined method `wpTextbox1' for
> nil:NilClass (NoMethodError)
> from wikitesting.rb:10

> Any ideas? By the way, I've joined the mailing list, and any future
> questions I might have will probably be directed there.

It looks like Wikipidia may not like that parameter in the URL. When I
change 'Computer' to 'Main', it seems to work:

  require 'rubygems'
  require 'mechanize'

  def get(pagename)
    agent = WWW::Mechanize.new
    agent.user_agent = ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)’
    page = agent.get('http://en.wikipedia.org/w/index.php?title=’+
      pagename + ‘&action=edit’)

    myform = page.form('editform')
    return myform.wpTextbox1
  end
  text = get('Main')
  pp text

--
Aaron Pattersonhttp://tenderlovemaking.com/