From tcbeld at gmail.com Mon Nov 2 22:31:48 2009 From: tcbeld at gmail.com (Tony Beld) Date: Mon, 2 Nov 2009 22:31:48 -0500 Subject: [Mechanize-users] trouble with second form on page Message-ID: <8CB86465-3CF1-4A3F-9ACF-7DB8C4EFC568@gmail.com> Hi all, First encounter with Ruby/Mechanize. I'm trying to write a script to auto-fill a trac new ticket. I need to target the second form (with the action "/trac/newticket#preview). I can target the first form o.k. but not the second. I googled and found: form = page.forms[2] Here's what I'm trying: a = WWW::Mechanize.new { |agent| agent.follow_meta_refresh = true agent.basic_auth(TRAC_USERNAME, TRAC_PASSWORD) } a.get('http://noname.org/trac/login') do |home_page| page = a.get('http://noname.org/trac/newticket') form = page.forms[2] # form = page.forms.first works with ticket field form.summary = 'test ticket' pp page end but that isn't working. Here's what pp page gives me when I target the first form and the "ticket" field: #} {meta} {title "New Ticket - Dev Trac"} {iframes} {frames} {links # # # # # # # # # # # # # # # # # # #} {forms # # # #} {radiobuttons} {checkboxes} {file_uploads} {buttons #}> # # # # # # # # #, @selected=true, @text="defect", @value="defect">, #, @selected=false, @text="enhancement", @value="enhancement">, #, @selected=false, @text="task", @value="task">], @value=[]> #, @selected=false, @text="critical", @value="critical">, #, @selected=true, @text="major", @value="major">, #, @selected=false, @text="minor", @value="minor">], @value=[]> #, @selected=false, @text="", @value="">, #, @selected=false, @text="ISLET Branch", @value="ISLET Branch">, #, @selected=true, @text="Sprint 4", @value="Sprint 4">], @value=[]>} {radiobuttons} {checkboxes #} {file_uploads} {buttons # #}>}> I also installed LiveHTTPheaders and get this... __FORM_TOKEN=65739413a411f580eade5c6d&summary=test +ticket&type=defect&description=test +ticket&action=create&status=new&priority=major&milestone=Sprint +4&keywords=&owner=tbeld&cc= Thanks in advance. -Tony From tcbeld at gmail.com Tue Nov 3 00:01:56 2009 From: tcbeld at gmail.com (Tony Beld) Date: Tue, 3 Nov 2009 00:01:56 -0500 Subject: [Mechanize-users] trouble with second form on page In-Reply-To: <8CB86465-3CF1-4A3F-9ACF-7DB8C4EFC568@gmail.com> References: <8CB86465-3CF1-4A3F-9ACF-7DB8C4EFC568@gmail.com> Message-ID: <246EA8AD-26EB-4B3E-A6CB-E502D71996F8@gmail.com> After some more testing I found that form = page.forms[1] works but not form = page.forms.first. Why is that? On Nov 2, 2009, at 10:31 PM, Tony Beld wrote: > Hi all, > First encounter with Ruby/Mechanize. I'm trying to write a script to > auto-fill a trac new ticket. I need to target the second form (with > the action "/trac/newticket#preview). I can target the first form > o.k. but not the second. I googled and found: > > form = page.forms[2] > > Here's what I'm trying: > > a = WWW::Mechanize.new { |agent| > agent.follow_meta_refresh = true > agent.basic_auth(TRAC_USERNAME, TRAC_PASSWORD) > } > a.get('http://noname.org/trac/login') do |home_page| > page = a.get('http://noname.org/trac/newticket') > form = page.forms[2] # form = page.forms.first works with ticket field > form.summary = 'test ticket' > pp page > end > > but that isn't working. Here's what pp page gives me when I target > the first form and the "ticket" field: > > # {url #} > {meta} > {title "New Ticket - Dev Trac"} > {iframes} > {frames} > {links > # > # > # > # TracGuide"> > # > # > # > # > # > # > # > # > # > # "WikiFormatting" > "/trac/wiki/WikiFormatting"> > # > # "> > # > # "> > # "http://trac.edgewall.org/" > "http://trac.edgewall.org/">} > {forms > # {name nil} > {method "GET"} > {action "/trac/search"} > {fields > # > # @value="on"> > # @value="on"> > # @name="ticket", > @value="test ticket">} > {radiobuttons} > {checkboxes} > {file_uploads} > {buttons > # @value="Search">}> > # {name nil} > {method "POST"} > {action "/trac/newticket#preview"} > {fields > # @name="__FORM_TOKEN", > @value="58c01dd36925b540cf115fc4"> > # @value=""> > # @value="create"> > # @value="new"> > # @value=""> > # > # > # @value=""> > # @name="type", > @options= > [# @select_list=# 0x1017aed18 ...>, > @selected=true, > @text="defect", > @value="defect">, > # @select_list=# 0x1017aed18 ...>, > @selected=false, > @text="enhancement", > @value="enhancement">, > # @select_list=# 0x1017aed18 ...>, > @selected=false, > @text="task", > @value="task">], > @value=[]> > # @name="priority", > @options= > [# @select_list=# 0x1017ad878 ...>, > @selected=false, > @text="critical", > @value="critical">, > # @select_list=# 0x1017ad878 ...>, > @selected=true, > @text="major", > @value="major">, > # @select_list=# 0x1017ad878 ...>, > @selected=false, > @text="minor", > @value="minor">], > @value=[]> > # @name="milestone", > @options= > [# @select_list=# 0x1017acd10 ...>, > @selected=false, > @text="", > @value="">, > # @select_list=# 0x1017acd10 ...>, > @selected=false, > @text="ISLET Branch", > @value="ISLET Branch">, > # @select_list=# 0x1017acd10 ...>, > @selected=true, > @text="Sprint 4", > @value="Sprint 4">], > @value=[]>} > {radiobuttons} > {checkboxes > # @checked=false, > @name="attachment", > @value=nil>} > {file_uploads} > {buttons > # @name="preview", > @value="Preview"> > # @name=nil, > @value="Submit ticket">}>}> > > I also installed LiveHTTPheaders and get this... > > __FORM_TOKEN=65739413a411f580eade5c6d&summary=test > +ticket&type=defect&description=test > +ticket&action=create&status=new&priority=major&milestone=Sprint > +4&keywords=&owner=tbeld&cc= > > Thanks in advance. > > -Tony > From astarr at wiredquote.com Tue Nov 3 02:23:36 2009 From: astarr at wiredquote.com (Aaron Starr) Date: Mon, 2 Nov 2009 23:23:36 -0800 Subject: [Mechanize-users] trouble with second form on page In-Reply-To: <246EA8AD-26EB-4B3E-A6CB-E502D71996F8@gmail.com> References: <8CB86465-3CF1-4A3F-9ACF-7DB8C4EFC568@gmail.com> <246EA8AD-26EB-4B3E-A6CB-E502D71996F8@gmail.com> Message-ID: <669cc1ca0911022323u18c60f3bq9a904541ac5c0033@mail.gmail.com> Unless I've missed something, it's because page.forms[0] == page.forms.first and page.forms[1] == page.forms.second (if there were a "second" method on arrays). Aaron On Mon, Nov 2, 2009 at 9:01 PM, Tony Beld wrote: > After some more testing I found that form = page.forms[1] works but not > form = page.forms.first. Why is that? > > > On Nov 2, 2009, at 10:31 PM, Tony Beld wrote: > > Hi all, >> First encounter with Ruby/Mechanize. I'm trying to write a script to >> auto-fill a trac new ticket. I need to target the second form (with the >> action "/trac/newticket#preview). I can target the first form o.k. but not >> the second. I googled and found: >> >> form = page.forms[2] >> >> Here's what I'm trying: >> >> a = WWW::Mechanize.new { |agent| >> agent.follow_meta_refresh = true >> agent.basic_auth(TRAC_USERNAME, TRAC_PASSWORD) >> } >> a.get('http://noname.org/trac/login') do |home_page| >> page = a.get('http://noname.org/trac/newticket') >> form = page.forms[2] # form = page.forms.first works with ticket field >> form.summary = 'test ticket' >> pp page >> end >> >> but that isn't working. Here's what pp page gives me when I target the >> first form and the "ticket" field: >> >> #> {url #} >> {meta} >> {title "New Ticket - Dev Trac"} >> {iframes} >> {frames} >> {links >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> #> "WikiFormatting" >> "/trac/wiki/WikiFormatting"> >> # >> # >> # >> #> http://www.edgewall.org/"> >> #> "http://trac.edgewall.org/" >> "http://trac.edgewall.org/">} >> {forms >> #> {name nil} >> {method "GET"} >> {action "/trac/search"} >> {fields >> # >> # >> #> @value="on"> >> #> @name="ticket", >> @value="test ticket">} >> {radiobuttons} >> {checkboxes} >> {file_uploads} >> {buttons >> #}> >> #> {name nil} >> {method "POST"} >> {action "/trac/newticket#preview"} >> {fields >> #> @name="__FORM_TOKEN", >> @value="58c01dd36925b540cf115fc4"> >> # >> #> @value="create"> >> # >> # >> # >> # >> #> @value=""> >> #> @name="type", >> @options= >> [#> @select_list=#, >> @selected=true, >> @text="defect", >> @value="defect">, >> #> @select_list=#, >> @selected=false, >> @text="enhancement", >> @value="enhancement">, >> #> @select_list=#, >> @selected=false, >> @text="task", >> @value="task">], >> @value=[]> >> #> @name="priority", >> @options= >> [#> @select_list=#, >> @selected=false, >> @text="critical", >> @value="critical">, >> #> @select_list=#, >> @selected=true, >> @text="major", >> @value="major">, >> #> @select_list=#, >> @selected=false, >> @text="minor", >> @value="minor">], >> @value=[]> >> #> @name="milestone", >> @options= >> [#> @select_list=#, >> @selected=false, >> @text="", >> @value="">, >> #> @select_list=#, >> @selected=false, >> @text="ISLET Branch", >> @value="ISLET Branch">, >> #> @select_list=#, >> @selected=true, >> @text="Sprint 4", >> @value="Sprint 4">], >> @value=[]>} >> {radiobuttons} >> {checkboxes >> #> @checked=false, >> @name="attachment", >> @value=nil>} >> {file_uploads} >> {buttons >> #> @name="preview", >> @value="Preview"> >> #> @name=nil, >> @value="Submit ticket">}>}> >> >> I also installed LiveHTTPheaders and get this... >> >> >> __FORM_TOKEN=65739413a411f580eade5c6d&summary=test+ticket&type=defect&description=test+ticket&action=create&status=new&priority=major&milestone=Sprint+4&keywords=&owner=tbeld&cc= >> >> Thanks in advance. >> >> -Tony >> >> > _______________________________________________ > Mechanize-users mailing list > Mechanize-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/mechanize-users > -------------- next part -------------- An HTML attachment was scrubbed... URL: From jeremywoertink at gmail.com Tue Nov 3 12:10:53 2009 From: jeremywoertink at gmail.com (Jeremy Woertink) Date: Tue, 3 Nov 2009 09:10:53 -0800 Subject: [Mechanize-users] trouble with second form on page In-Reply-To: <246EA8AD-26EB-4B3E-A6CB-E502D71996F8@gmail.com> References: <8CB86465-3CF1-4A3F-9ACF-7DB8C4EFC568@gmail.com> <246EA8AD-26EB-4B3E-A6CB-E502D71996F8@gmail.com> Message-ID: <1ea5c3820911030910j2e2304e2gea4f0922e3396597@mail.gmail.com> page.forms.class == Array so you treat it just like an array with forms[0] being first. You should also be able to use page.form_with(:action => "/trac/newticket#preview"). Hope that helps! ~Jeremy Web Developer http://www.justprofessionals.com On Mon, Nov 2, 2009 at 9:01 PM, Tony Beld wrote: > After some more testing I found that form = page.forms[1] works but not > form = page.forms.first. Why is that? > > > On Nov 2, 2009, at 10:31 PM, Tony Beld wrote: > > Hi all, >> First encounter with Ruby/Mechanize. I'm trying to write a script to >> auto-fill a trac new ticket. I need to target the second form (with the >> action "/trac/newticket#preview). I can target the first form o.k. but not >> the second. I googled and found: >> >> form = page.forms[2] >> >> Here's what I'm trying: >> >> a = WWW::Mechanize.new { |agent| >> agent.follow_meta_refresh = true >> agent.basic_auth(TRAC_USERNAME, TRAC_PASSWORD) >> } >> a.get('http://noname.org/trac/login') do |home_page| >> page = a.get('http://noname.org/trac/newticket') >> form = page.forms[2] # form = page.forms.first works with ticket field >> form.summary = 'test ticket' >> pp page >> end >> >> but that isn't working. Here's what pp page gives me when I target the >> first form and the "ticket" field: >> >> #> {url #} >> {meta} >> {title "New Ticket - Dev Trac"} >> {iframes} >> {frames} >> {links >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> # >> #> "WikiFormatting" >> "/trac/wiki/WikiFormatting"> >> # >> # >> # >> #> http://www.edgewall.org/"> >> #> "http://trac.edgewall.org/" >> "http://trac.edgewall.org/">} >> {forms >> #> {name nil} >> {method "GET"} >> {action "/trac/search"} >> {fields >> # >> # >> #> @value="on"> >> #> @name="ticket", >> @value="test ticket">} >> {radiobuttons} >> {checkboxes} >> {file_uploads} >> {buttons >> #}> >> #> {name nil} >> {method "POST"} >> {action "/trac/newticket#preview"} >> {fields >> #> @name="__FORM_TOKEN", >> @value="58c01dd36925b540cf115fc4"> >> # >> #> @value="create"> >> # >> # >> # >> # >> #> @value=""> >> #> @name="type", >> @options= >> [#> @select_list=#, >> @selected=true, >> @text="defect", >> @value="defect">, >> #> @select_list=#, >> @selected=false, >> @text="enhancement", >> @value="enhancement">, >> #> @select_list=#, >> @selected=false, >> @text="task", >> @value="task">], >> @value=[]> >> #> @name="priority", >> @options= >> [#> @select_list=#, >> @selected=false, >> @text="critical", >> @value="critical">, >> #> @select_list=#, >> @selected=true, >> @text="major", >> @value="major">, >> #> @select_list=#, >> @selected=false, >> @text="minor", >> @value="minor">], >> @value=[]> >> #> @name="milestone", >> @options= >> [#> @select_list=#, >> @selected=false, >> @text="", >> @value="">, >> #> @select_list=#, >> @selected=false, >> @text="ISLET Branch", >> @value="ISLET Branch">, >> #> @select_list=#, >> @selected=true, >> @text="Sprint 4", >> @value="Sprint 4">], >> @value=[]>} >> {radiobuttons} >> {checkboxes >> #> @checked=false, >> @name="attachment", >> @value=nil>} >> {file_uploads} >> {buttons >> #> @name="preview", >> @value="Preview"> >> #> @name=nil, >> @value="Submit ticket">}>}> >> >> I also installed LiveHTTPheaders and get this... >> >> >> __FORM_TOKEN=65739413a411f580eade5c6d&summary=test+ticket&type=defect&description=test+ticket&action=create&status=new&priority=major&milestone=Sprint+4&keywords=&owner=tbeld&cc= >> >> Thanks in advance. >> >> -Tony >> >> > _______________________________________________ > Mechanize-users mailing list > Mechanize-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/mechanize-users > -------------- next part -------------- An HTML attachment was scrubbed... URL: From candeller at o2.pl Sun Nov 8 07:19:20 2009 From: candeller at o2.pl (candeller at o2.pl) Date: Sun, 08 Nov 2009 13:19:20 +0100 Subject: [Mechanize-users] =?utf-8?q?Preserving_cookies?= Message-ID: <7e89ddb6.1959269e.4af6b748.31da9@o2.pl Hello. I wrote a script that visits people's profiles and then downloads their .jpeg pictures. It works fine as long as as there exists a direct link to a picture, which I can access via page = agent.click(page.link_with(:href => /profile/pic/34243242) which for example, opens up: http://page/2948717/1/main/ad5867be9a.jpeg and then save it: File.new(".../pic.jpeg", "a+") << agent.get_file(page) But, sometimes there's no direct link, although the picture is still in their profile. In the page source by using nokogiri I am locating it's tag, i.e: zdj?cie and then scraping the contents of the src attribute. and loading the page: page = agent.get(the_src_link) But unfortunately I am getting a HTTP Error 403 Forbidden Access. From what I understand is that once I invoke the 'get' method it's treated as a new session and I am losing my previous settings (cookies, etc.) How would I pass previous session data to the new link? There are a few methods in the CookieJar class, but I really have no clue how to make them work. Thanks in advance.