PDA

Visualizza la versione completa : Problema Gemma Mechanize


kerbero1984
28-09-2009, 11:26
Buongiorno a tutti. Avrei bisogno di una mano co la gemma Mechanize . Mi sto interfacciando ad una pagina web, faccio un login ad un sito e va tutto bene . Poi vorrei percorrere un link e posizionarmi su quella pagina per seguire un altro link, e da li riempire un nuovo form, e qui ci sono dei problemi
vi posto il codice :

require 'rubygems'
require 'mechanize'
agent = WWW::Mechanize.new
wp = agent.get('url')
wp_form = wp.forms.first
wp_form.fields.each do |f|
puts " " + f.name + ": " + f.value if f.value
end
wp_form.loginname='loginname'
wp_form.password='password'
pp wp_form.buttons.first
res = agent.submit(wp_form, wp_form.buttons.first)
puts "Links on #{res.title}"
res.links.each do |link|
puts "#{link.text} (#{link.href})"
end
rate=agent.click res.links.text("nome link") #problema

mi da un errore nell'ultima riga .
Sarei grato a tutti che intendono aiutarmi

kerbero1984
29-09-2009, 11:32
prima problema risolto bastato sostituire la riga con :

rate = agent.click(res.link(:text=>"testo link"))

ora pero il problema che se vado a vedere i form della pagine con

rate.forms.each do |form|
puts form.name
end

mi dice

nil
nil

ma io dal codice html riesco a vedere i due form :
come mai?

kerbero1984
29-09-2009, 16:48
Se a qualcuno interessa ho risolto il problema semplicemente intercettando l'action dlel form e poi andando a selezionare il sudetto form con :

change_form = change_rate.form_with(:action => parameter)

dove parameter la stringa che contiene l action del form.
Spero che qualcuno di voi lo trovi interessanti
Alla prossimo Rubbino

weppos
30-09-2009, 09:09
E' possibile che l'attributo name non fosse presente per quella form.
In genere non c', pi probabile che si sia una classe o un id.

kerbero1984
30-09-2009, 10:07
Vero ....
Ora ho un altro piccolo problema . Come fare a selezionare un campo da una select ? Ovvero ora ho scritto :

change_form = change_rate.form_with(:action => parameter)

e poi

change_form.so.value=" valore "

ma l'interprete mi dice :

ailadmin/matrix.html?ses=10420fcead309in_ruby.rb:52: undefined method `so' for #<WWW::Mechanize::F

qualcuno mi sa aiutare ? Grazie

weppos
30-09-2009, 17:39
so te lo sei inventato? :master:
http://mechanize.rubyforge.org/mechanize/WWW/Mechanize/Form/SelectList.html

kerbero1984
14-10-2009, 09:36
Ok prima parte del problema risolto .....
ora per ho un altro dubbio, sul sito in questione ci sono delle combobox con cui selezionare alcuni campi.

ho provato a fare :
form.checkbox_with(:name => 'name').value='valore'
ma in alcuni casi non potevo utilizzare quella sintassi obbligandomi ad usare quest'altra sintassi :
form.name='valore'
questo perch?
Dopo aver completato il riempimento submitto tutto con il bottone
Dopo aver interpretato il tutto ruby non da problemi ma non si vedono nessun cambiamenti, come mai ? Sembra non funzionare ........,

kerbero1984
15-10-2009, 11:38
Con un paio di caff in piu ho risolto ......
era chiaro che una checkbox oltre a settare il valore dovevo anche spuntarla con l'attributo check

Loading