Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I was able to get the results of a javascript call by using Firefox headers as suggested in this thread. These fileds (EVENTTARGET, EVENTARGUMENT, and VIEWSTATE) are hidden fields in the page. The result is posted below:
POST /Modules/ViewFriends/FriendsView.aspx?friendID=14632 __EVENTTARGE +T=ctl00%24cpMain%24pagerTop&__EVENTARGUMENT=2&__VIEWSTATE=%2FwEPDwUJM +zU0NjExMTQ3D2QWAmYPZBYEAgMPZBYCAgYPFgIeA2FsdAURUG93ZXJlZCBieSBHb29nbG +VkAgUPZBYCAgEPZBYCAgIPZBYCZg9kFg4CAQ8WAh4HVmlzaWJsZWgWAgIFDxYCHgV2YWx +1ZWRkAgMPDxYKHgtyZWNvcmRDb3VudAKCFh4IcGFnZVNpemUCKB4GcGFnZU5vAgEeD2Zp +cnN0SWRQcmV2UGFnZQIOHg5sYXN0SWRQcmV2UGFnZQK8NmRkAgUPFgIeBFRleHQFEVBhd +WwncyBGcmllbmRzLi4uZAIHDxYCHwgFBTIsODE4ZAILDxYCHgtfIUl0ZW1Db3VudAIkFk +hmD2QWBGYPFgIfAWdkAgQPFQECMTRkAgEPZBYCAgQPFQEEMTAwMWQCAg9kFgICBA8VAQQ +xMTQ5ZAIDD2QWAgIEDxUBBDEyNzNkAgQPZBYCAgQPFQEEMTQzM2QCBQ9kFgICBA8VAQQy +Mzg1ZAIGD2QWAgIEDxUBBDI3NjVkAgcPZBYEAgQPFQEEMzAxNWQCBQ8WAh8BZ2QCCA9kF +gRmDxYCHwFnZAIEDxUBBDMwNzVkAgkPZBYCAgQPFQEEMzA3OWQCCg9kFgICBA8VAQQzMT +A2ZAILD2QWAgIEDxUBBDMxODBkAgwPZBYCAgQPFQEEMzIwMWQCDQ9kFgICBA8VAQQzMjU +xZAIOD2QWAgIEDxUBBDM1NzFkAg8PZBYEAgQPFQEEMzY3NGQCBQ8WAh8BZ2QCEA9kFgRm +DxYCHwFnZAIEDxUBBDM3NTBkAhEPZBYCAgQPFQEEMzc2MGQCEg9kFgICBA8VAQQzNzg5Z +AITD2QWAgIEDxUBBDQwMjhkAhQPZBYCAgQPFQEENDA0N2QCFQ9kFgICBA8VAQQ0MTY3ZA +IWD2QWAgIEDxUBBDQ2MTlkAhcPZBYEAgQPFQEENDYzNmQCBQ8WAh8BZ2QCGA9kFgRmDxY +CHwFnZAIEDxUBBDQ3NDBkAhkPZBYCAgQPFQEENDc0N2QCGg9kFgICBA8VAQQ1MDY5ZAIb +D2QWAgIEDxUBBDU1MTZkAhwPZBYCAgQPFQEENTY1OWQCHQ9kFgICBA8VAQQ1OTE4ZAIeD +2QWAgIEDxUBBDYyMjFkAh8PZBYEAgQPFQEENjMzNmQCBQ8WAh8BZ2QCIA9kFgRmDxYCHw +FnZAIEDxUBBDY2MDRkAiEPZBYCAgQPFQEENjcwMGQCIg9kFgICBA8VAQQ2ODI3ZAIjD2Q +WAgIEDxUBBDY4OTVkAg0PFgIfCAVBPHRkPiZuYnNwOzwvdGQ%2BPHRkPiZuYnNwOzwvdG +Q%2BPHRkPiZuYnNwOzwvdGQ%2BPHRkPiZuYnNwOzwvdGQ%2BPC90cj5kAg8PDxYKHwMCg +hYfBAIoHwUCAR8GAg4fBwK8NmRkGAEFD2N0bDAwJGNwTWFpbiRtdg8PZGZk
Any idea how I would issue this call with WWW::Mechanize?
Thanks

Replies are listed 'Best First'.
Re: Headers and WWW::Mechanize
by perrin (Chancellor) on Jan 29, 2007 at 15:22 UTC
    As others said, these aren't special JavaScript things. They're just standard form fields that get submitted. Probably the JavaScript is setting some of them and submitting the form. You can set them like any other form field using WWW::Mechanize.
Re: Headers and WWW::Mechanize
by Corion (Patriarch) on Jan 29, 2007 at 14:42 UTC

    As these fields are already hidden fields in your current form, all you need to do is to set them to the values you want and then submit that form. What is your code? Most likely $ie->form->submit should Just Work.

      Here is my code I'm testing with, but it complains that fields_ref is unknown and using fields results in another error. I'm lost...
      use warnings; use strict; use WWW::Mechanize; my $mech = WWW::Mechanize->new(); my $id = '14632'; my $url = "http://home.myspace.com/index.cfm?". "fuseaction=user.viewfriends&". "friendID=" . $id; $mech->get( $url ); my ($viewstate) = $mech->content =~ m/name="__VIEWSTATE".+value="([^"] ++)"/io; # print "VIEWSTATE: $viewstate\n"; # Submit an dmove to page 2 $mech->submit_form( #page => $url, form_name => 'aspnetForm', fields_ref => { '__EVENTTARGET' => 'ctl00$cpMain$pagerTop' +, '__EVENTARGUMENT' => 2, '__VIEWSTATE' => $viewstate, } ); #print $mech->content;
      Any idea what I'm doing wrong?

        As long as you don't tell us what that "other error" with using ->fields is, we can't help you. The WWW::Mechanize documentation says to use fields:

        $mech->submit_form( form_number => 3, fields => { username => 'mungo', password => 'lost-and-alone', } );

        Personally, I would set the fields in the HTML form and then simply submit the form:

        my $form = $mech->form_name('aspnetForm'); $form->value('__EVENTTARGET' => 'ctl00$cpMain$pagerTop'); ... and so on $mech->submit();
    A reply falls below the community's threshold of quality. You may see it by logging in.
Re: Headers and WWW::Mechanize
by davorg (Chancellor) on Jan 29, 2007 at 14:42 UTC